我正在扩展一款现有的 iPhone 应用程序(4.x 及以上版本),以支持更多的语言:爱沙尼亚语、拉脱维亚语和立陶宛语。
我的 iPhone 和模拟器都不支持这些语言,而且我很确定也不存在专门的固件供这些地区使用。
如何最好地制作一个支持它们的应用程序呢?
我提出了两个方案,但都不是很理想。因为用户无法从“设置”应用程序列表中选择捆绑的语言,所以两者都不允许我在应用程序中拥有多种语言。这意味着必须为每种语言提交一个版本。
选项 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
密钥被许多人使用,但此解决方案将其用于加载其他不受支持的语言,因此我担心可能存在困难。
问题
- 其他应用程序通常如何支持这些“不受支持”的语言?
- 有没有办法支持它们和通常支持的语言一起?
- 你对
AppleLanguages
hack怎么看?