为什么[NSBundle localizedStringForKey]不返回iPhone语言本地化字符串?

时间:2018-01-16 23:53:05

标签: ios objective-c iphone

为什么localizedStringForKey首先返回开发语言的本地化而不是iPhone的语言? documentation中的“捆绑搜索模式”说:

  

如果首选语言存在.lproj文件夹,则使用该本地化。否则,捆绑包将搜索与下一个首选语言匹配的.lproj文件夹,依此类推,直到找到一个。如果首选语言没有本地化,则捆绑包会选择开发语言本地化。

     

然后捆绑包按以下顺序[...]

搜索资源

但这对我没有意义。

测试iPhone采用中文,法语键盘,捆绑包含32种语言,开发语言本地化为英文。我不明白为什么首先返回英语本地化是有道理的。为什么不是中文这个iPhone语言?

NSArray* arr = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
// ( zh-Hant-FR, en-FR, fr-FR )

NSArray* localizations = [bundle localizations];
// ar,bg,ca,cs,da,de,el,en,es,fr,he,hu,id,it,ja,ko,ms,nb,nl,nn,pl,pt,pt_BR,ro,ru,sv,th,tr,uk,vi,zh-Hans,zh-Hant

NSArray* preferredLocalizations = [bundle localizations];
// same output

<key>CFBundleDevelopmentRegion</key>
<string>en</string>

NSString* str = [bundle localizedStringForKey:@"hello" value:@"" table:@"mytable"];
// hello

我该如何解决这个问题?无论开发语言如何,我都希望localizedStringForKey始终返回iPhone语言本地化。

1 个答案:

答案 0 :(得分:0)

使用它 NSLocalizedStringWithDefaultValue("requiredTranslationKey", @"StringFileName", [NSBundle mainBundle], @"", @"");