XLIFF的工作流程/最佳实践

18
我正在使用命令行工具(ng-xi18n)从我编写的 Angular 2 应用中提取 i18n 字符串。该命令的输出是一个 messages.xlf 文件。由于之前使用过 .po,并且不熟悉 .xlf,我假设该文件相当于 .pot 文件(如果我错了,请纠正我)。
然后我假设,如果我想翻译我的应用程序,我需要执行 cp messages.xlf messages.de.xlf 命令来复制模板文件(messages.xlf),然后在德语中翻译每个消息(因此是 .de.xlf)。
在翻译了一些虚拟文本并运行应用程序后,我发现它按预期工作,所以我停止翻译并继续开发应用程序。过了一段时间,我添加了更多的 i18n 字符串,最终认为我必须更新模板。这就是事情变得难以维护的地方。我更新了模板 messages.xlf 文件,并迅速思考如何将新字符串更新到已经翻译好的 messages.de.xlf 文件中而不会丢失进度。
当我使用.po文件进行开发时,由于像poEdit这样的好工具,这是没有问题的,但是我没有找到任何与.xlf相媲美的东西。尝试了一些工具后,我认为最好的选择是Lokalize,但我也没有找到将模板文件合并到已翻译(但过时)文件的可能性。

到目前为止,这更像是一篇文章而不是一个问题,所以这里是一个快速总结:

  • 处理 .xlf 文件的工作流程是否真的可以与我最初认为的 .po 相比(如上所述),还是完全不同的?
  • 我应该如何更新已经翻译好的文件?
  • 处理 .xlf 文件的最佳实践是什么?
  • 有哪些概念证明工具可用于处理 .xlf

旁注:

  • Lokalize手册完全没有用。我看到了很多听起来很有前途的功能,比如:
    • "文件" > "从模板更新文件"。我在手册中找不到任何解释这个功能的内容。如果我点击这个选项,什么也没发生。
    • "同步" > "打开同步/合并文件"。这似乎是一个将两个相似文件(由多个翻译者)合并的功能,而不是一个从模板更新翻译文件的工具。尽管Lokalize的主同步选项卡中有一个工具提示,通知我有“x个不匹配的条目”,但我就是找不到任何方法将这些不匹配的条目附加到我的.de.xlf文件中。
    • [更新] 结果,我遇到了与this question中类似的问题。在将Lokalize版本降级到建议的版本后,许多问题(包括问题中提到的问题)都消失了。然而,现在“从模板更新文件”选项变灰了,我不知道为什么。
  • 我还尝试了OmegaT,在我的平台(Ubuntu 16.04)上根本不起作用。
  • [更新] Virtaal非常适合从模板合并新字符串,但整体界面设计非常糟糕...
  • 谷歌搜索没有帮助,因为每个搜索结果似乎都与XCode或其他东西有关。

感谢您提前提供的任何帮助,我非常感激。

1
关于 ng-xi18n:这不是对问题的有益补充,也不是对此问题的回答,所以我将其添加到评论中。事实证明,ng-xi18n cli 工具有一个选项(在我撰写本文时未正确工作),可以为任何语言生成 .xlf 文件。因此,不需要模板文件。有关更多信息,请参见此处。只是想添加这个,以防有人发现这个答案,并特别需要 ng-xi18n 的解决方案。 - CharlyDelta
关于 ng-xi18n 的更新:今天早些时候已经开放了一份 i18n 文档的 MR:https://github.com/angular/angular.io/pull/2309 - CharlyDelta
你能提供更多关于OmegaT发生了什么的信息吗?它需要Java,但应该可以在16.04上运行。 - Chase T
顺便说一下,如果我使用“omegat”从命令行启动OmegaT,则控制台中不会出现任何错误。它只是静默地冻结。 - CharlyDelta
说实话,其实并没有好的工具可以翻译xlf文件,而且ng-xi18n也没有我期望的功能。(即使有一个开发者声称ng-xi18n有生成多个翻译文件的选项,但我并没有找到相关的内容。)似乎你只能生成messages.xlf文件,然后需要手动将__所有内容__合并到现有的翻译文件中(因为缺乏可用的工具)。 - CharlyDelta
显示剩余2条评论
3个回答

18

1
如果你可以在这里提供安装和简短的使用信息,除了链接之外,对于用户来说会更方便,因为他们不需要为最琐碎的信息点击链接。 - kabirbaidhya
xliffmerge是一个非常棒的工具,它提供了angular-ci所缺少的服务! - luvaas
+1 for xliffmerge!我通过yarn安装后出现了“command not found”的问题。如果其他人也遇到了同样的问题,这里有一个解决方法:https://github.com/martinroob/ngx-i18nsupport/issues/77 - Matt Rabe

1
我所见过的最佳工作流自动化解决方案来自Roland Oldengarm的博客文章"Angular 2: Automated i18n workflow using gulp"。简而言之,在几十行Gulp代码中,他创建了处理一些挑战的工具。具体而言,它运行ng-xi18n来提取消息;使用源文件创建英语翻译;通过添加新的trans-units、保留现有的和删除缺失的来更新现有的翻译;然后将所有xlf文件公开为TypeScript字符串常量。这些最后的字符串可以被导入以提供翻译提供者选项给bootstrapModule使用。

注意:我自己没有使用过这个确切的解决方案(和代码),但我能够将生成的xlf暴露为TypeScript字符串,并以类似于他描述的方式在应用程序中使用它们。至于维护翻译,我利用IntelliJ IDEAWebStorm)文件比较功能和Counterparts Lite(适用于Mac)进行维护。我的努力仍处于早期阶段,但正在为一个正在积极开发的应用程序端到端工作。


首先,感谢你的回答。目前我没有时间去验证它的有效性,但一旦有时间,如果它能像承诺的那样工作,我会考虑将其选为最佳答案 :) 理论上听起来非常不错。 - CharlyDelta
当然可以。我更新了我的答案,以澄清我已经成功利用了博客中的哪些想法。 - Will
非常感谢,敬请原谅延迟。 - CharlyDelta
1
@Will,“Angular 2:使用gulp自动化i18n工作流程”的链接出现404网站未找到的情况。 - vvahans
谢谢@VahanVardanyan,已更新并附上存档链接。 - Will

-3

6
这并没有真正解释如何更新XLF文件而不丢失现有的翻译文本,对吗? - not2savvy
虽然这是一个被接受的答案,但所引用的文档并没有真正回答问题。 - Anton
截至写作时,文档中没有任何回答这个问题的内容。 - iuliust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接