问题 XLIFF的工作流程/最佳实践


我正在使用命令行工具(ng-xi18n)从我写的角度2 app中提取i18n字符串。该命令的输出是a 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

图片的标题说明:

  • Lokalize手册根本没用。我看到很多功能听起来很有希望,比如:
    • “文件”>“从模板更新文件”。我没有在手册中找到任何解释此功能的内容。如果我点击这个,没有任何反应。
    • “同步”>“打开文件进行同步/合并”。这似乎是合并两个类似文件(由多个翻译器)而不是从模板更新翻译文件的工具的功能。即使Lokalize的主同步选项卡中有工具提示,通知我“x不匹配的条目”,我也找不到任何可以将这些不匹配的条目附加到我的 .de.xlf 文件。
    • [更新] 事实证明,我有类似的问题 这个问题。在将我的Lokalize版本降级为建议版本后,许多问题(包括问题中提到的问题)都消失了。但是,现在“从模板更新文件”选项显示为灰色,我不知道为什么。
  • 我也尝试过OmegaT,它在我的平台上根本不起作用(Ubuntu 16.04)。
  • [更新] Virtaal非常适合从模板中合并新字符串,但UI通常设计得非常糟糕......
  • 谷歌搜索没有帮助,因为每一次打击似乎都与XCode或其他东西有关。

感谢您提前的任何帮助,我真的很感激


6570
2017-09-06 13:24


起源

关于 ng-xi18n:这既不是问题的有用补充,也不是这个问题的答案,所以我只是将其添加到评论中。事实证明, ng-xi18n cli工具有一个选项(在我写这个时没有正确工作)来生成 .xlf 任何语言的文件。因此不需要模板文件。看到 这里 了解更多信息。只是想添加这个,以防有人找到这个答案,特别需要一个解决方案 ng-xi18n - CharlyDelta
关于 ng-xi18n 更新:i18n文档的MR今天早些时候开放: github.com/angular/angular.io/pull/2309 - CharlyDelta
你能否提供关于OmegaT发生的事情的更多信息?它需要Java,但应该在16.04上工作。 - Chase T
问题是,我甚至无法创建一个新项目。只要我点击按钮选择一个文件夹,OmegaT就会完全冻结。我甚至不能强迫退出OmegaT。 java -version 输出: $ java -version java version "1.7.0_101" OpenJDK Runtime Environment (IcedTea 2.6.6) (7u101-2.6.6-0ubuntu0.15.10.1) OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode) - CharlyDelta
顺便说一句,如果我从命令行启动OmegaT使用 omegat,控制台中没有错误。它只是默默地冻结 - CharlyDelta


答案:


官方Angular文档现在更新为国际化(i18n)at https://angular.io/docs/ts/latest/cookbook/i18n.html 包括一个专门用于的部分 使用ng-xi18n工具创建翻译源文件


-2
2017-10-02 01:31



太棒了,谢谢你! - CharlyDelta
这并没有真正解释如何在不丢失现有翻译文本的情况下更新xlf文件,是吗? - not2savvy
虽然这是一个公认的答案,但引用的文档并没有真正回答这个问题。 - Anton
截至撰写本文时,文档中没有任何内容可以回答这个问题。 - iuliust


我写了一个名为xliffmerge的小型命令行工具。 原则上它也是如此,Roland Oldengarm在他的博客文章中描述了他的gulp任务。 它是免费的,你可以看看它 https://github.com/martinroob/ngx-i18nsupport#readme


14
2018-02-27 18:35



除了链接之外,如果您可以在此处提供安装和简短使用信息,则对于用户来说更容易,因为他们不需要单击链接以获取最简单的信息。 - kabirbaidhya
xliffmerge是一个很棒的工具,并提供angular-ci缺少的服务! - luvaas
为xliffmerge +1!通过纱线安装后,我发现“命令未找到”。如果其他人这样做,这是一个解决方法: github.com/martinroob/ngx-i18nsupport/issues/77 - Matt Rabe


到目前为止,我见过的最好的工作流程自动化解决方案来自Roland Oldengarm的博客文章 “Angular 2:使用gulp自动化i18n工作流程”。总而言之,在几十行Gulp代码中,他创建了一个工具来处理您面临的一些挑战。具体来说,它运行ng-xi18n来提取消息;创建一个包含复制到目标的源的英文翻译;通过添加新的转换单元,保留现有的转换单元并删除缺失的转换单元来更新现有的转换然后将所有xlf文件公开为TypeScript字符串常量。然后可以导入这些最后的字符串以向其提供bootstrapModule 翻译提供者 选项。

警告:我自己没有使用过这个确切的解决方案(和代码),但是我能够将生成的xlf公开为TypeScript字符串,并以类似于他描述的方式在应用程序中使用它们。至于维护翻译,我已经利用了 IntelliJ IDEA (WebStorm)文件比较功能和 同行精简版 (对于Mac)。我自己的努力仍处于早期阶段,但正在为正在积极开发的应用程序端到端工作。


1
2017-12-16 15:46



首先,谢谢你的回答。目前我没有时间来验证它的工作情况,但是一旦我接到它,我会考虑将它作为接受的答案,如果它按照承诺的方式工作:)听起来真的很好理论 - CharlyDelta
当然可以。我更新了我的答案,以澄清我自己成功利用的博客中的哪些想法。 - Will
非常感谢,请原谅延迟 - CharlyDelta
@Will 404网站找不到“Angular 2:使用gulp自动化i18n工作流程”链接。 - Vahan Vardanyan
感谢@VahanVardanyan,刚刚更新了存档链接 - Will