0

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

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

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

到目前为止,我已经尝试在 Xcode 中本地化俄语的 plist 文件并将其放在它自己的 ru.lproj 文件夹中,但是,当我在模拟器中运行它时,UITableView 中根本没有数据出现!没有俄罗斯文件,它工作正常。所以我的想法是,Xcode 以某种方式混淆了 plist 文件,因为名称是相同的,即使它位于不同的目录中(en.lproj 和 ru.lproj)。该文件在两个目录中都称为 Basic.plist。这个过程让我很困惑,从我收集的信息来看,应该不难弄清楚!

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

4

1 回答 1

1

很多事情可能是错误的。一种可能性是 plist 文件没有被复制到包中(在目标的 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,但是您可以将其用作 .strings 文件的键,而不是显示 plist 中的字符串。NSLocalizedString您可以使用宏(定义为)检索本地化,[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]这将在运行时为您提供本地化 .strings 文件中的相应值。当然,这意味着当您更新您的 plist 时,您还必须更新您的 .strings 文件以匹配。好消息是你不需要为你的活动语言确定 plist 的路径——使用 NSLocalizedString,你根本不需要提供路径。

于 2012-07-11T20:41:14.837 回答