在Xcode上导出xliff文件的行为很奇怪

时间:2016-05-19 09:42:46

标签: ios xcode nslocalizedstring xliff

所以我有一个过去已经本地化的项目。但是我们创建了一些新的密钥,我们希望单独翻译它们。

另外在某些语言中缺少一些键,所以我也想找到它们。所以我所做的是使用Xcode的导出工具导出xliff文件进行翻译。我在我的项目中到处使用NSLocalizedString,理论上应该让我接受。

但是当我打开导出的xliff文件时(让我们说意大利语)我有以下问题:

可本地化文件的xliff文件中的部分列出两次。这是第一次:

projectName / Localizable.strings的翻译

在xliff文件的这一部分中,所有翻译都缺失,即使可本地化文件包含大多数键的翻译值。

然后将相同的可本地化文件列为两次:

projectName / en.lproj / Localizable.strings的翻译

在这种情况下,键都具有翻译的值,但如果英语可本地化文件中缺少某个键,那么它也会从这里丢失。

这对我来说是一个巨大的痛苦,因为我只是在寻找缺少翻译的密钥,但这意味着我必须再次浏览英文列表以确保没有密钥丢失

这对我来说似乎不正常或不实用。任何人都知道我可能做错了什么?

顺便说一句,翻译过的密钥在应用程序本身上运行良好,在设备和模拟器上都尝试过。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我没有使用xliff导出的文件来管理我的翻译,所以我不能用这个给你答案。

但是,您可以使用Localization.strings文件解决查找缺少本地化的问题。

您可以使用genstrings命令生成Localizable.strings文件,该文件将包含代码中的所有NSLocalizedString。 为此,您必须将源文件的所有内容传递给genstrings。 例如,如果您只有一个swift项目,则可以在项目的根目录下运行此命令:

find . -name "*.swift" | xargs genstrings

这将生成一个Localizable.strings文件,然后您可以使用FileMerge等文件比较工具与现有的Localizable.strings文件进行比较。为了使其有效,您可能需要对所有Localizable.strings文件中的键进行排序,我知道很多编辑都可以这样做(SublimeText是一个)。

正如您所看到的,上述解决方案是手动的,如果您需要多次执行此操作,则会出现错误。在过去,我使用python脚本对其进行了自动化,该脚本根据生成的Localizable.strings和本地化的strings文件执行以下操作:

  1. 解析Localizable.strings以获取所有引用键
  2. 解析给定的本地化strings文件以获取本地化密钥
  3. 输出未使用的密钥和未翻译的密钥
  4. 希望这有帮助!