如何从 Angular 6 自动生成的 XLIFF 文件中删除位置、源文件和行号?

lam*_*ade 7 internationalization xliff angular angular6 angular8

我们正在使用 Angular 的内置工具从模板中提取消息。

这工作正常,我们使用以下命令获取 XLIFF 文件中的所有信息:

ng xi18n
Run Code Online (Sandbox Code Playgroud)

在这个文件中,atrans-unit看起来像这样:

<trans-unit id="3535a6c8296b457542000d2cbd15ca93f86cdd79" datatype="html">
    <source>Homepage</source>
    <context-group purpose="location">
      <context context-type="sourcefile">app/component/nav/nav.component.html</context>
      <context context-type="linenumber">39</context>
    </context-group>
    <note priority="1" from="description">description</note>
    <note priority="1" from="meaning">title</note>
</trans-unit>
Run Code Online (Sandbox Code Playgroud)

尽管其中的内容<context-group purpose="location">看起来很有趣,但它向外部翻译服务解释了项目和实施细节。

有没有办法告诉 Angular 不要这些信息包含到 XLIFF 文件中?

或者,是否有其他工具可以进行转换?也许编译器在构建过程中获得这些信息很重要。

小智 5

你不应该删除它们,因为 Angular 需要它来翻译。

但如果这是你想要的,你可以使用 JS 脚本来删除它们:

const fs = require('fs');
const data = fs.readFileSync('./i18n.xliff').toString();
const contentToRemoveRegexp = /<context-group purpose="location">([.\s\S])*<\/context-group>/g;
const replaced = data.replace(contentToRemoveRegexp, '');
fs.writeFileSync('./i18n-updated.xliff', replaced);
Run Code Online (Sandbox Code Playgroud)

将其存储在您想要的任何 JS 文件中,并在包文件中创建一个脚本:

"i18n:update": "ng xi18n && node path/to/your/script/js"
Run Code Online (Sandbox Code Playgroud)

  • 我们还使用脚本从 xlf 文件中删除所有上下文,对于我们来说,构建过程中缺少上下文没有问题,而且我们有几千个翻译。当译者开始将 html 标签添加到未准备好附加标签的翻译中时,通常会出现更大的问题。我们还按源值对翻译进行排序,这样在进行公关审查时更容易检查。 (2认同)