ios - 如何本地化 plist 文件

标签 ios properties localization internationalization plist

非常感谢您提前提供的帮助。我到处寻找答案,但没有运气。

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

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

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

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

最佳答案

很多事情都可能是错误的。一种可能性是 plist 文件不会被复制到 bundle 中(在目标的“构建阶段”页面中进行验证 - 它应该显示 Basic.plist,旁边写有“...in (localization).lproj”。

如果您手动创建了 ru.lproj,则可能您将其复制到了错误的位置,或者将原始文件留在了错误的位置(它现在应该位于 en.lproj 内)。最简单的方法是在 XCode 中选择文件 Basic.plist 并使用文件检查器中的本地化控件来添加本地化,​​而不是手动创建文件。正如 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,您根本不需要提供路径。

关于ios - 如何本地化 plist 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11425220/

相关文章:

ios - 如何从 .m 文件中提取字符串以进行本地化

ios - 在 ios 的 mapbox gl 中创建一个圆圈

ios - 适用于 iOS 的 GraphQL 客户端库

ios - NSMutableArray removeAllObjects 崩溃

objective-c - 观察 Objective-C 中任何类属性的变化

java - 如何本地化 java tomcat 网络服务器上的内容?

ios - 在 iOS 中获取歌曲的 BPM

vb.net - 对象属性在不应该的情况下被更改? (Vb.net)

wpf - 刷新 MVVM 中的只读(链式)属性

java - 如何使用 Java 编程将一种语言翻译成另一种语言