【发布时间】:2012-05-02 20:00:52
【问题描述】:
我正在扩展现有的 iPhone 应用程序(4.x 及更高版本)以支持更多语言:爱沙尼亚语、拉脱维亚语和立陶宛语。
在我的 iPhone 和模拟器中,不支持这些语言,而且我很确定在这些地区也没有针对它们的特殊固件。
如何才能最好地制作支持它们的应用?
我想出了两个我不太喜欢的解决方案。它们都不允许我在应用程序中使用一种以上的语言,因为用户无法从 Settings.app 列表中选择捆绑的语言。这意味着必须为每种语言提交一个版本。
选项 1:滥用 en.lproj 目录
对于每种目标语言(lt、lv、et),我将该语言的字符串文件放入 en.lproj 目录中。
优点:使用众所周知的机制。该应用程序只是认为它正在运行英语。
缺点:严重破坏了我的本地化工具。它让未来的维护者感到困惑,因此容易出错。需要一个奇怪的构建设置。
选项 2:滥用 NSUserDefaults[AppleLanguages]
NSUserDefaults 中的AppleLanguages 对象包含应用程序要使用的语言列表。通过这样设置,我可以让应用程序从 lt.lproj 目录加载例如立陶宛语:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"lt", nil] forKey:@"AppleLanguages"];
(由于历史原因,我已经做了一个稍微复杂的版本,以删除应用程序的某些版本中已弃用的翻译。否则即使我不再将它与应用程序捆绑在一起,旧的安装也会选择 lproj 目录。 )
优点:使用正确命名的 lproj 目录。与本地化工具很好地集成。简单的设置。只需main.m 中的一行即可实现。
缺点:尽管很多人都在使用AppleLanguages 键,但这个解决方案使用它来加载其他不受支持的语言,所以我担心我可能会如履薄冰。 p>
乐问题
- 其他应用程序通常如何支持这些“不受支持”的语言?
- 有没有办法支持它们以及通常支持的语言?
- 您如何看待
AppleLanguages黑客攻击?
【问题讨论】:
标签: iphone ios localization internationalization