设置iOS应用程序的默认本地化
我正在为讲俄语的人开发应用程序。 俄罗斯附近的很多国家都有第二种语言 – 俄语。 我的应用程序有两个本地化:俄语和英语。 而我需要像默认设置俄罗斯本地化。 英语只适用于使用设备语言的英语人士。
我知道苹果公司build议在设置中使用首选语言的本地化,但是我有一个重要的原因是不遵循这个build议。
我如何设置默认的俄语本地化?
我想你需要在你的info.plist文件中使用Localization native development region
键。
您可能需要在Info.plist中将俄语设置为CFBundleDevelopmentRegion
的值。
CFBundleDevelopmentRegion(string – iOS,OS X)指定捆绑包的本地区域。 该键包含一个string值,通常对应于编写该软件包的人的本地语言。 如果无法为用户的首选区域或语言find资源,则使用此值指定的语言作为默认语言。
更新
如果您确实需要并且需要覆盖操作系统的语言优先级,则可以使用AppleLanguages
用户默认值键(尽pipe如您所知,不推荐):
[[NSUserDefaults standardUserDefaults] setObject:@[@“ru”, @“en”] forKey:@“AppleLanguages”];
我还没有find正确的解决scheme。 只有一个方法适合我的问题是使用NSLocalizedStringFromTableInBundle
而不是NSLocalizedString
。 这种方式不允许本地化的图像或笔尖,但与string,它的工作很好。
首先,您需要定义当前的设备语言:
NSString *lang = (NSString *)[[NSLocale preferredLanguages] objectAtIndex:0];
接下来find这个语言的包:
NSBundle *myLangBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:lang ofType:@"lproj"]];
如果发现bundle,那么在NSLocalizedStringFromTableInBundle
使用它:
_label.text = NSLocalizedStringFromTableInBundle(@"LabelText",nil,myLangBundle,nil);
否则,find并使用默认包。
正如eofster所说,你应该把AppleLanguages
键设置为所需顺序的语言数组,但是为了在第一次午餐时工作,你应该尽早做,甚至比applicationWillLunchWithOptions:
早applicationWillLunchWithOptions:
至于我这个解决scheme效果很好,并使用NSLocalizedStringFromTableInBundle
优势,因为它与故事板和笔尖一起工作。
这里是一步一步的解决scheme在Swift语言。
-
如下所述创buildUIApplication的子类 : 使用Swift子类UIApplication
-
第二,覆盖你的
UIApplication
子类的init
方法,以自己replace首选语言列表。override init() { if let languages = NSUserDefaults.standardUserDefaults().objectForKey("AppleLanguages") as? [String], let language = languages.first where !language.hasPrefix("en") { NSUserDefaults.standardUserDefaults().setObject(["ru", "en"], forKey: "AppleLanguages") } super.init() }
- 就这样。 如果第一种语言不是英语,你会用俄语作为第一语言。
PS如果您不仅要进行本地化,而且国际化不要忘记检查dateselect器,date格式化程序,数字格式化程序等使用的语言环境。
在我的情况下,我只有俄罗斯本地化硬编码string在我的应用程序,但我使用本地化捆绑库。 图书馆的string默认是英文的。 因为NSBundle.mainBundle.preferredLanguages
是[ "en" ]
。
在Info.plist中使用CFBundleLocalizations
键指定应用程序本地化语言后,他们成为了俄语:
CFBundleLocalizations (数组 – iOS,OS X)标识您的应用程序手动处理的本地化。 如果您的可执行文件是非捆绑的或者不使用现有的捆绑本地化机制,那么您可以包含此密钥来指定您的应用所处理的本地化。
此属性数组中的每个条目都是一个string,用于标识支持的本地化的语言名称或ISO语言指示符。 有关如何指定语言指示符的信息,请参阅“国际化文档中的国际化和本地化指南”中的“语言和区域设置标识”。