为啥 [NSBundle 本地化StringForKey] 不返回 iPhone 语言本地化字符串?
Posted
技术标签:
【中文标题】为啥 [NSBundle 本地化StringForKey] 不返回 iPhone 语言本地化字符串?【英文标题】:Why [NSBundle localizedStringForKey] does not return the iPhone language localised string?为什么 [NSBundle 本地化StringForKey] 不返回 iPhone 语言本地化字符串? 【发布时间】:2018-01-16 23:53:05 【问题描述】:为什么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】:使用这个
NSLocalizedStringWithDefaultValue("requiredTranslationKey", @"StringFileName", [NSBundle mainBundle], @"", @"");
【讨论】:
我不相信。NSLocalizedStringWithDefaultValue
是 localizedStringForKey:value:table:
的宏,我使用的正是这个函数。以上是关于为啥 [NSBundle 本地化StringForKey] 不返回 iPhone 语言本地化字符串?的主要内容,如果未能解决你的问题,请参考以下文章
NSBundle pathForResource 不适用于子目录本地化?
调用 [NSBundle pathForResource] 时得到 nil(本地化问题)
有没有办法在不重新启动应用程序的情况下使 NSBundle 本地化缓存失效? [iOS]
-[NSBundle pathForResource:ofType:inDirectory:] 为本地化资源返回 nil