理想情况下,这是我想做的:
- 使用基本的英语本地化在 Xcode 中设置项目。最终我想要英语,比如说我
Localizable.strings
和 Storyboards的荷兰语版本 NSLocalizedString
使用表单的键将代码中的字符串外部化fooViewController.barLabel
,勤奋并为每个键添加适当的上下文注释- 在我的 Storyboard 文件中添加荷兰语本地化
- 将 Storyboard 中的特定标签标记为将在运行时设置且不需要翻译的占位符
- 为情节提要中需要翻译的标签添加注释
- 导出“开发语言”
xliff
文件(点击项目、编辑器/导出本地化...,选择“仅开发语言”) - 在Counterparts或Xliffie 之类的工具甚至基于 Web的工具中打开英文
xliff
文件 - 在键旁边添加实际的英文翻译
fooViewController.barLabel
,然后重新保存 en.xliff nl.xliff
从原始文件创建一个文件en.xliff
并添加荷兰语翻译- 将这两个
xliff
文件导入 Xcode 并让它.strings
为代码中定义的键和情节提要中的键创建荷兰语和英语的适当文件;将新.strings
文件提交到我的源存储库 - 在我的源代码和情节提要中添加、删除和更改键之后的某个时间点,
en.xliff
再次导出“开发语言”作为事实来源 - 使用当前翻译更新
en.xliff
和nl.xliff
文件,使用工具突出显示已添加或删除的键 - 将这些
xliff
文件导入回 Xcode,它会更新.strings
文件,然后我可以签入到我的源存储库
这有意义吗?这是一件合理的事情吗?我想是的,但它不起作用。
以下是我遇到的问题:
- Xcode 不支持第 4 步——该
xliff
格式可以将键标记为translate=no
,但无法在 Xcode 中对其进行注释(理想情况下,Xcode 根本不会导出标记为占位符的键。) - Xcode 不支持第 5 步——无法为标签设置翻译器注释。甚至没有办法设置独立于您在情节提要的标签中放置的占位符文本的键,如果您发现在布置视图时使用Lorem Ipsum填充标签很有用,这将是一个巨大的痛苦。
- 当您进入第 10 步时,Xcode 抱怨
en.xliff
文件中没有指定目标语言。有一种方法可以在 Counterparts 中更改目标语言(或者至少创建一个将目标语言设置为 的新文件EN
),但我找不到任何使用 Xliffie 的方法。 en.xliff
在尝试使用更新的密钥重新导出文件时,Xcode 告诉我"Localization failed reading "[...]/Supporting Files/en.lproj/Localizable.strings, Please address the issue at file location 782"
在哪个字符位置找到了……一个撇号。xliff
如果源.strings
文件包含撇号, Xcode 无法导出文件。什么在实际的F...?!- 第 12 步和第 13 步变得很奇怪,我只是不明白发生了什么。Counterparts 和 Xliffie 都用
fooViewController.barLabel
英文翻译替换了我原来的密钥,看起来他们试图告诉我我没有英文翻译。在尝试将其导入en.xliff
Xcode 时,它告诉我除了新键之外我没有任何翻译,当我继续操作时,它会从en.lproj/Localization.strings
文件中擦除现有的翻译。
这是一团糟。
在无法手动设置键、添加翻译注释或将特定标签标记为不用于翻译的占位符的情况下翻译 Storyboard 中的标签是行不通的。我们已经将每个标签连接到 an@IBOutlet
并将其翻译设置为viewDidLoad()
with NSLocalizedString
。
Xcode 在尝试导出.strings
包含撇号乞丐信念的文件时窒息。
似乎还有一个潜在的假设,即如果 Xcode 中的“开发语言”是英语,那么开发人员负责英语翻译。我可以想象除了一个人的独立开发者商店之外没有任何背景是真实的。
最后,我似乎也遗漏了一些关于我尝试使用的工具如何构建其工作流程的信息。如果有人能启发我,我将不胜感激。
是否有人设法构建了一个可行的本地化工作流程,其中开发人员不负责对“开发语言”的最终编辑控制,并且.strings
签入存储库的文件是事实的来源?