我正在使用命令行工具(ng-xi18n
)从我写的角度2应用程序中提取i18n字符串。此命令的输出是messages.xlf
文件。来自.po
背景,并且不熟悉.xlf
,我假设此文件等同于.pot
文件(如果我错了,请更正我)。
我假设如果我要翻译我的应用,我必须cp messages.xlf messages.de.xlf
获得模板文件(messages.de.xlf
)的副本(messages.xlf
),我可以在其中翻译每个消息到德语(因此.de.xlf
)。
在翻译了一些虚拟文本并运行应用程序后,我看到它按预期工作,所以我放弃了翻译并继续开发应用程序。过了一段时间,我添加了更多的i18n字符串,并最终认为我必须更新我的模板。这就是事情难以维持的地方。我更新了模板messages.xlf
文件,很快就想知道如何在不失去进度的情况下将新字符串更新为已翻译的messages.de.xlf
文件。
当我使用.po
文件进行开发时,由于像poEdit这样的好工具,这没有问题,但我找不到与.xlf
类似的内容。在尝试了一些工具后,我认为最好的选择是Lokalize,但我没有找到将模板文件合并到已翻译(但过时)文件的可能性。
到目前为止,这只是一篇文章而不是一个问题,所以这里有一个快速摘要:
.xlf
文件的工作流程是否真的与我最初想到的.po
相似(如上所述),还是完全不同?.xlf
个文件的最佳做法是什么?.xlf
合作的概念验证工具?图片的标题说明:
感谢您提前提供任何帮助,我真的很感激
答案 0 :(得分:15)
我写了一个名为xliffmerge的小型npm命令行工具。 原则上它也是如此,Roland Oldengarm在他的博客文章中描述了他的gulp任务。 它是免费的,您可以在https://github.com/martinroob/ngx-i18nsupport#readme
查看它答案 1 :(得分:1)
我见过的最好的工作流程自动化解决方案来自Roland Oldengarm的博客文章"Angular 2: Automated i18n workflow using gulp"。总而言之,在几十行Gulp代码中,他创建了一个工具来处理您面临的一些挑战。具体来说,它运行ng-xi18n来提取消息;创建一个包含复制到目标的源的英文翻译;通过添加新的转换单元,保留现有的转换单元并删除缺失的转换单元来更新现有的转换然后将所有xlf文件公开为TypeScript字符串常量。然后可以导入这些最后的字符串,以便为bootstrapModule提供translation provider选项。
警告:我自己没有使用过这个确切的解决方案(和代码),但我能够将生成的xlf公开为TypeScript字符串,并以类似于他描述的方式在应用程序中使用它们。至于维护翻译,我已经利用IntelliJ IDEA(WebStorm)文件比较功能和Counterparts Lite(对于Mac)。我自己的努力仍处于早期阶段,但正在为正在积极开发的应用程序端到端工作。
答案 2 :(得分:-2)
官方Angular文档现已在https://angular.io/docs/ts/latest/cookbook/i18n.html更新为国际化(i18n),其中包括专门针对creating a translation source file with the ng-xi18n tool的部分。