【问题标题】:Workflow / best practices for XLIFFXLIFF 的工作流程/最佳实践
【发布时间】:2016-09-06 13:24:46
【问题描述】:

我正在使用命令行工具 (ng-xi18n) 从我编写的 angular 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 配合使用?

旁注:

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

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

【问题讨论】:

  • 关于ng-xi18n:这既不是对问题的有益补充,也不是对这个问题的回答,所以我将其添加到 cmets 中。事实证明,ng-xi18n cli 工具有一个选项(在我写这篇文章时它不能正常工作)为任何语言生成.xlf 文件。所以不需要模板文件。有关更多信息,请参阅here。只是想添加这个以防有人找到这个答案并且特别需要ng-xi18n的解决方案
  • 关于 ng-xi18n 更新:今天早些时候打开了 i18n 文档的 MR:github.com/angular/angular.io/pull/2309
  • 您能否提供更多关于 OmegaT 发生了什么的信息?它需要 Java,但应该可以在 16.04 上运行。
  • 问题是,我什至不能创建一个新项目。当我点击按钮选择一个文件夹时,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)
  • 顺便说一句,如果我从命令行使用 omegat 启动 OmegaT,控制台中不会出现错误。它只是静静地冻结

标签: xliff


【解决方案1】:

我编写了一个名为 xliffmerge 的小型 npm 命令行工具。 原则上,它的作用与 Roland Oldengarm 的博客文章中描述的 gulp 任务相同。 它是免费的,您可以在https://github.com/martinroob/ngx-i18nsupport#readme查看它

【讨论】:

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

到目前为止,我所看到的最好的工作流自动化解决方案来自 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)。我自己的努力仍处于早期阶段,但正在为一个正在积极开发的应用程序端到端工作。

【讨论】:

  • 首先,感谢您的回答。目前我没有时间验证它的效果如何,但是一旦我开始使用它,如果它按承诺工作,我会考虑将其作为公认的答案:) 理论上听起来真的很好
  • 当然可以。我更新了我的答案,以阐明我自己成功利用了博客中的哪些想法。
  • 非常感谢,耽误时间见谅
  • @Will 404 未找到“Angular 2:使用 gulp 的自动化 i18n 工作流程”链接的网站。
  • 感谢@VahanVardanyan,刚刚更新了存档链接
【解决方案3】:

官方 Angular 文档现已在 https://angular.io/docs/ts/latest/cookbook/i18n.html 更新国际化 (i18n) 文档,包括专门针对 creating a translation source file with the ng-xi18n tool 的部分。

【讨论】:

  • 这并没有真正解释如何在不丢失现有翻译文本的情况下更新 xlf 文件,是吗??
  • 虽然这是一个公认的答案,但引用的文档并没有真正回答这个问题。
  • 截至撰写本文时,文档中没有任何内容可以回答这个问题。
猜你喜欢
  • 2010-12-02
  • 2016-10-19
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多