设置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语言。

  1. 如下所述创buildUIApplication的子类 : 使用Swift子类UIApplication

  2. 第二,覆盖你的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() } 
  3. 就这样。 如果第一种语言不是英语,你会用俄语作为第一语言。

PS如果您不仅要进行本地化,而且国际化不要忘记检查dateselect器,date格式化程序,数字格式化程序等使用的语言环境。

在我的情况下,我只有俄罗斯本地化硬编码string在我的应用程序,但我使用本地化捆绑库。 图书馆的string默认是英文的。 因为NSBundle.mainBundle.preferredLanguages[ "en" ]

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

截图

CFBundleLocalizations (数组 – iOS,OS X)标识您的应用程序手动处理的本地化。 如果您的可执行文件是非捆绑的或者不使用现有的捆绑本地化机制,那么您可以包含此密钥来指定您的应用所处理的本地化。

此属性数组中的每个条目都是一个string,用于标识支持的本地化的语言名称或ISO语言指示符。 有关如何指定语言指示符的信息,请参阅“国际化文档中的国际化和本地化指南”中的“语言和区域设置标识”。