使用 Xcode 8.1 导入 .xliff 文件后清空 Localizable.strings

Posted

技术标签:

【中文标题】使用 Xcode 8.1 导入 .xliff 文件后清空 Localizable.strings【英文标题】:Empty Localizable.strings after importing .xliff file using Xcode 8.1 【发布时间】:2016-11-25 17:15:28 【问题描述】:

我正在按照 Apple 的 Internationalization and Localization Guide 中的建议通过以下操作测试导出/导入本地化流程:

    使用 Single View Application 模板创建一个新的 ios 项目 像这样设置 ViewController 的标题 override func viewDidLoad() super.viewDidLoad() title = NSLocalizedString("Hello", comment: "Salutation") 为项目添加新的本地化(我选择了意大利语) 使用 Editor > Export For Localization... 命令导出意大利语本地化的 .xliff 文件 编辑 it.xliff 文件并将"Hello" 转换为"Ciao" 使用 Editor > Import Localizations... 命令导入 it.xliff 文件 Xcode 将 Localizable.strings 和 InfoPlist.strings 文件添加到项目中(在 it.lproj 文件夹中) 打开 Localizable.strings 和/或 InfoPlist.strings 文件,注意里面唯一的东西是/* No Localized Strings */

我可以使用 老式 genstrings 方法,但如果有人能指出我使用 xliff 文件的正确方向,我将不胜感激。

【问题讨论】:

【参考方案1】:

据此贴:https://www.raywenderlich.com/64401/internationalization-tutorial-for-ios-2014

您必须将类中的所有硬编码键添加到 Localizable.strings(英文)

所以你要做的是:

改变

title = NSLocalizedString("Hello", comment: "Salutation")

title = NSLocalizedString("general.greeting", comment: "Salutation")

然后,将其添加到您的 Localizable.strings(英文):

"general.greeting" = "Hello";

然后,为本地化而导出,类似这样的内容将写入 .xliff 文件中:

<trans-unit id="general.greeting">
  <source>Hello</source>
  <note>Salutation</note>
</trans-unit>

使用&lt;target&gt;&lt;/target&gt;为问候语添加意大利语本地化版本:

<trans-unit id="general.greeting">
  <source>Hello</source>
  <target>Ciao</target>
  <note>Salutation</note>
</trans-unit>

本地化导入,Localizable.strings(意大利语)应包含本地化。

【讨论】:

现在我看到了我的工作流程的问题:Localizable.strings 文件需要存在于所有本地化之前使用Editor > Export For Localization...(我的理解是它们是在导入 .xliff 文件时创建的)。 是的,很遗憾 XCode 不会自动创建它

以上是关于使用 Xcode 8.1 导入 .xliff 文件后清空 Localizable.strings的主要内容,如果未能解决你的问题,请参考以下文章

XLIFF 中的 xib 中缺少字符串(Xcode 基本本地化)

XCode 7.3.1 导入本地化崩溃

将 localizable.strings 导入 XIB

Xcode Localization & Internationalization: Exporting for Localization (XLIFF) 不会导出 Info.plist 条目

忽略 Xcode 的“本地化导出”中的一些文本

infoPlist.strings 读取失败:无法读取数据,因为它的格式不正确