如何本地化plist文件

时间:2012-07-11 03:45:18

标签: ios properties localization internationalization plist

我提前感谢您的帮助。我一直在寻找一个没有运气的答案。

我有一个应用程序,它使用非常专业的运动术语,我存储在plist文件中。然后,这些术语将显示在UITableView中。当用户点击技能时,将播放视频演示。该应用程序运行良好,但我非常希望将其本地化为其他语言。

我已经翻译了这些术语,我希望我可以通过制作它的副本来本地化plist文件,只是在文件的每个连续副本中更改特定于运动的术语,然后将其放入各自的语言中夹。这有可能,如果是这样,有人可以请我指出一个好的例子或教程吗?

到目前为止,我已经尝试在Xcode中为俄语本地化plist文件并将其放在自己的ru.lproj文件夹中,然而,当我在模拟器中运行它时,UITableView中根本没有数据出现!没有俄罗斯文件,它工作正常。所以我的想法是,不知何故Xcode混淆了plist文件,因为名称是相同的,即使它位于不同的目录(en.lproj和ru.lproj)。该文件在两个目录中都称为Basic.plist。这个过程对我来说完全是混乱的,从我收集的内容来看,这应该不难理解!

再次,先谢谢你。本地化概念对我来说是全新的,我渴望学习它。我很确定我理解.strings文件如何处理嵌入代码中的字符串,但我想知道是否可以翻译整个pList文件。

1 个答案:

答案 0 :(得分:1)

很多事情可能都是错的。一种可能性是plist文件没有被复制到bundle中(在你的目标的Build Phases页面中验证 - 它应该说Basic.plist,旁边写着“... in(localization).lproj”。

如果您手动创建了ru.lproj,可能是您将其复制到了错误的位置,或者将原始文件保留在错误的位置(现在应该在en.lproj中)。而不是手动创建文件,最简单的方法是在XCode中选择文件Basic.plist并使用File Inspector中的Localization控件添加本地化。正如Kevin Grant所提到的,如果这不会显示你的文件有英文和俄文,那么就会出现问题,你可以再次使用+控件。

最后,我不是100%肯定这一点,但足够接近:我相信您的代码可能需要更新以确定从哪里加载plist文件。它是.xib或.strings文件,您不必这样做,因为这将是自动的,并且iOS知道首先查看相关的.lproj文件夹(当您加载.xib时,您只指定其名称,不是它的确切位置)。但我假设您正在通过特定路径加载plist文件,因此该路径现在必须包含.proj文件夹。

如果可能的话,我认为在每种语言中使用不同的plist文件的一种更好的方法是只有一个plist,但是不是显示plist中的字符串,而是可以将它用作.strings文件的键。您可以使用NSLocalizedString宏(定义为[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil])检索本地化,该宏将在运行时为您提供本地化.strings文件中的相应值。当然,这意味着当您更新plist时,您还必须更新.strings文件以匹配。好处是您不需要为活动语言确定plist的路径 - 使用NSLocalizedString,您根本不提供路径。