设置iOS应用的默认本地化

12p*_*2pm 22 iphone xcode objective-c ios

我正在为讲俄语的人开发应用程序.俄罗斯附近的很多国家都有第二语言 - 俄语.我的应用程序有两个本地化:俄语和英语.我需要设置默认的俄语本地化.英语应仅适用于使用英语的人,如设备的语言.

我知道Apple建议在设置中优先使用本地优先语言,但我有一个重要的理由不遵循此建议.

如何设置默认的俄语本地化?

Las*_*zlo 31

我想你需要Localization native development regioninfo.plist文件中使用密钥.

在此输入图像描述

  • 这是人们的答案! (6认同)

eof*_*ter 12

您可能需要将Russian设置为CFBundleDevelopmentRegionInfo.plist中的值.

CFBundleDevelopmentRegion(String - iOS,OS X)指定包的本机区域.此键包含一个字符串值,该值通常对应于编写该包的人的本地语言.如果无法为用户的首选区域或语言找到资源,则此值指定的语言将用作默认语言.

更新

如果您真的想要并且需要覆盖操作系统的语言优先级,则可以使用AppleLanguages用户默认密钥(但是,如您所知,不建议这样做):

[[NSUserDefaults standardUserDefaults] setObject:@[@“ru”, @“en”] forKey:@“AppleLanguages”];
Run Code Online (Sandbox Code Playgroud)

  • 这个问题有6年了,Apple没有解决这个问题. (3认同)
  • 设置"AppleLanguages"键可能会出现问题.您可能必须尽早设置它,就像在main()中一样. (2认同)

Gle*_*sov 5

在我的情况下,我的应用程序中只有俄语本地化和硬编码字符串,但我使用本地化包的库.图书馆的字符串默认为英文.因为NSBundle.mainBundle.preferredLanguages[ "en" ].

在我使用CFBundleLocalizations密钥在Info.plist中指定应用程序本地化语言后,他们变成了俄语:

截图

CFBundleLocalizations(Array - iOS,OS X)标识应用程序手动处理的本地化.如果您的可执行文件是非捆绑式的,或者未使用现有的捆绑软件本地化机制,则可以包含此密钥以指定应用程序确实处理的本地化.

此属性的数组中的每个条目都是一个字符串,用于标识支持的本地化的语言名称或ISO语言指示符.有关如何指定语言指示符的信息,请参阅"国际化文档中的国际化和本地化指南"中的"语言和语言环境指定".


12p*_*2pm 4

我还没有找到正确的解决方案。只有一种适合我的问题的方法是NSLocalizedStringFromTableInBundle使用NSLocalizedString. 这种方式不允许本地化图像或笔尖,但对于字符串来说效果很好。

首先您需要定义当前设备语言:

NSString *lang = (NSString *)[[NSLocale preferredLanguages] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

接下来找到该语言的包:

NSBundle *myLangBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:lang ofType:@"lproj"]];
Run Code Online (Sandbox Code Playgroud)

如果找到捆绑包,则将其用于NSLocalizedStringFromTableInBundle

_label.text = NSLocalizedStringFromTableInBundle(@"LabelText",nil,myLangBundle,nil);
Run Code Online (Sandbox Code Playgroud)

否则找到并使用默认包。