生产使用Angular国际化的工作流程和工具

时间:2018-03-15 18:12:46

标签: angular angular-i18n

Angular的国际化解决方案似乎仍处于开发阶段。同时,它现在正式列在文档中,因此我认为现在可以在生产应用程序中使用它。

我能解释的是,在商业环境中,此解决方案可以使用工作流程和工具。

工作流程对我来说很有意义。开发人员将开发应用程序,生成翻译的源字符串,并生成一个文件,翻译人员可以将其加载到程序中,以最少的技术专业知识翻译字符串。要生成文件,请使用提取器(xi18n)获取非翻译模板XLIFF,为每种语言复制此文件,并且翻译器使用XLIFF编辑器更新模板中的每种语言,因为后来的提取会对其进行更改。源字符串中的更改。这与Gettext方法类似。这是Angular的合适策略,还是使用Angular以其他方式从模板XLIFF更新翻译文件?

对我来说更大的问题是Angular如何将XLIFF文件拼凑在一起。不幸的是,Angular将XLIFF 1.2和ICU结合在一起的方式似乎相当复杂,我还没有找到一个能够正确处理这个问题的工具。 Angular似乎在翻译单元中使用XLIFF占位符,只使用文本" ICU"作为ID和类似ICU的模式。然后以某种方式将其与包含随机ID和完整ICU表达的另一翻译单元匹配。插值也使用带有ID" INTERPOLATION"的占位符来处理。以及等值文本中的变量。

不仅难以弄清楚Angular在内部做什么来进行ICU表达式的匹配,但是在XLIFF编辑器中所有这一切的结果对于我这个开发人员来说很难理解,更不用说了翻译。在屏幕截图中,可以使用Virtaal XLIFF编辑器查看ICU和插值的示例。这是由下面的翻译源字符串产生的,提取到它下面的XLIFF。你不能对占位符做很多事情,你不能看到VAR_PLURAL ICU翻译与使用它的翻译之间的联系。我看过其他编辑,他们似乎有类似的问题。

Virtaal

角度模板:

<ng-container i18n>Example with ICU {randomNumber, plural, =1 {expression} other {expressions}}: {{randomDecimal}}</ng-container>

XLIFF:

  <trans-unit id="698dc3ea0590e8f5f533d296e91d012993eb9b36" datatype="html">
    <source>Example with ICU <x id="ICU" equiv-text="{randomNumber, plural, =1 {...} other {...}}"/>: <x id="INTERPOLATION" equiv-text="{{randomDecimal}}"/></source>
    <context-group purpose="location">
      <context context-type="sourcefile">OMITTED</context>
      <context context-type="linenumber">1</context>
    </context-group>
  </trans-unit>
  <trans-unit id="e3f60ad6a9d907d30e2c51244085d3084d326cbe" datatype="html">
    <source>{VAR_PLURAL, plural, =1 {expression} other {expressions} }</source>
    <context-group purpose="location">
      <context context-type="sourcefile">OMITTED</context>
      <context context-type="linenumber">1</context>
    </context-group>
  </trans-unit>

人们通常使用什么工具与用于生产的Angular应用程序来解决这些问题,以便翻译文件实际上对翻译有意义?我已经读过很多人手工编辑文件,但我认为这根本不会对翻译人员有所帮助。

0 个答案:

没有答案