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



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

如果存在首选语言的 .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语言本地化,无论开发语言如何。

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

最新更新