在 Xcode 上导出 xliff 文件表现异常
Exporting xliff file on Xcode acting strangely
所以我有一个项目过去已经本地化了。但是我们创建了一些新密钥,我们希望将它们单独翻译。
此外,在某些语言中,一些键丢失了,所以我也想找到它们。所以我所做的是使用 Xcode 的导出工具导出 xliff 文件进行翻译。我在我的项目中到处都使用 NSLocalizedString,所以理论上应该涵盖我。
但是当我打开一个导出的 xliff 文件(比如说意大利语)时,我遇到了以下问题:
可本地化文件的 xliff 文件部分列出了两次。第一次是这样的:
projectName/Localizable.strings
的翻译
在 xliff 文件的这一部分中,所有翻译都丢失了,即使可本地化的文件包含大多数键的翻译值。
然后相同的可本地化文件被列为两次:
projectName/en.lproj/Localizable.strings
的翻译
在这种情况下,所有键都有其翻译后的值,但如果英语本地化文件中缺少某个键,那么此处也会缺少该键。
这让我很痛苦,因为我只是在寻找缺少翻译的键,但这样一来,这意味着我必须再次检查英文列表以确保没有丢失任何键.
这对我来说似乎不正常或不实用。有人知道我可能做错了什么吗?
顺便说一句,翻译的密钥在应用程序本身上都可以正常工作,在设备和模拟器上都试过了。
感谢您的帮助。
我不使用 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
文件执行以下操作:
- 解析
Localizable.strings
以获取所有参考键
- 解析给定的本地化
strings
文件以获取本地化密钥
- 输出未使用的键和未翻译的键
希望对您有所帮助!
所以我有一个项目过去已经本地化了。但是我们创建了一些新密钥,我们希望将它们单独翻译。
此外,在某些语言中,一些键丢失了,所以我也想找到它们。所以我所做的是使用 Xcode 的导出工具导出 xliff 文件进行翻译。我在我的项目中到处都使用 NSLocalizedString,所以理论上应该涵盖我。
但是当我打开一个导出的 xliff 文件(比如说意大利语)时,我遇到了以下问题:
可本地化文件的 xliff 文件部分列出了两次。第一次是这样的:
projectName/Localizable.strings
的翻译在 xliff 文件的这一部分中,所有翻译都丢失了,即使可本地化的文件包含大多数键的翻译值。
然后相同的可本地化文件被列为两次:
projectName/en.lproj/Localizable.strings
的翻译在这种情况下,所有键都有其翻译后的值,但如果英语本地化文件中缺少某个键,那么此处也会缺少该键。
这让我很痛苦,因为我只是在寻找缺少翻译的键,但这样一来,这意味着我必须再次检查英文列表以确保没有丢失任何键.
这对我来说似乎不正常或不实用。有人知道我可能做错了什么吗?
顺便说一句,翻译的密钥在应用程序本身上都可以正常工作,在设备和模拟器上都试过了。
感谢您的帮助。
我不使用 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
文件执行以下操作:
- 解析
Localizable.strings
以获取所有参考键 - 解析给定的本地化
strings
文件以获取本地化密钥 - 输出未使用的键和未翻译的键
希望对您有所帮助!