在iPhone上NSLocalizedString返回iPhone 语言的字符串.是否可以强制NSLocalizedString使用特定语言使应用程序使用与设备不同的语言?
localization objective-c internationalization nslocalizedstring ios
我正在扩展现有的iPhone应用程序(4.x及更高版本),支持更多语言:爱沙尼亚语,拉脱维亚语和立陶宛语.
在我的iPhone和模拟器中,不支持这些语言,我很确定他们没有特殊固件可供在这些地区使用.
我怎样才能最好地制作支持它们的应用程序?
我想出了两个我不太喜欢的解决方案.它们都不允许我在应用程序中使用多种语言,因为用户无法从Settings.app列表中选择捆绑的语言.这意味着必须为每种语言提交一个版本.
对于每种目标语言(lt,lv,et),我将该语言的字符串文件放入en.lproj目录中.
优点:采用众所周知的机制.该应用程序只是认为它正在运行英语.
缺点:对我的本地化工具造成严重破坏.它对未来的维护者来说很容易混淆,因而容易出错.需要一个奇怪的构建设置.
AppleLanguagesNSUserDefaults中的对象包含要使用的应用程序的语言列表.通过设置它,我可以从lt.lproj目录中加载应用程序,例如立陶宛语:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"lt", nil] forKey:@"AppleLanguages"];
Run Code Online (Sandbox Code Playgroud)
(由于历史原因,我已经做了一个稍微复杂一点的版本,以删除某些版本的应用程序中不推荐使用的翻译.否则,即使我不再将其与应用程序捆绑在一起,旧安装也会选择lproj目录.)
优点:使用正确命名的lproj目录.与本地化工具完美集成.设置简单.只需要一行main.m来实现.
缺点:尽管AppleLanguages很多人都在使用密钥,但这个解决方案使用它来加载其他不支持的语言,所以我担心我可能会在冰上滑冰.
AppleLanguages黑客怎么样?