You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 8 i18n:xlf文件target标签丢失,执行ng xi18n报错求助

解决Angular 8 i18n中标签被移除及翻译缺失报错的问题

这个问题的核心原因是Angular 8的ng xi18n命令默认会完全覆盖目标文件,而不是合并已有的翻译内容。当你直接执行原命令时,之前手动添加的<target>标签会被新生成的只包含<source>的内容替换,导致系统检测到翻译单元缺失<target>,从而抛出"misses a translation"错误。

下面是具体的解决步骤:

1. 初始化翻译文件(首次操作)

如果还没有基础的源文件,先执行以下命令生成默认的源语言xliff文件:

ng xi18n --output-path src/locale

这会在src/locale目录下生成messages.xlf,里面包含所有标记了i18n的文本的<source>标签。

接下来复制messages.xlf为dutch.xlf,并手动为每个<trans-unit>添加对应的<target>荷兰语翻译内容,确保每个翻译单元的结构类似:

<trans-unit id="welcomeTitle" datatype="html">
  <source>Welcome to our app</source>
  <target>Welkom bij onze app</target>
</trans-unit>

2. 更新翻译文件(添加新文本后)

当你在代码中新增了需要翻译的文本后,不要直接覆盖原dutch.xlf,而是使用--merge参数合并现有翻译文件,保留已有的<target>标签:

ng xi18n --output-path src/locale --out-file dutch.xlf --i18n-locale nl --merge src/locale/dutch.xlf

这个命令会:

  • 扫描代码中的新i18n标记,添加对应的<trans-unit>到dutch.xlf
  • 保留所有已存在的<target>翻译内容
  • 新添加的翻译单元会只有<source>,需要你手动补充<target>

3. 关键注意事项

  • 自定义ID的正确使用:如果你使用@@customId标记文本(比如<h1 i18n="@@welcomeTitle">Welcome</h1>),确保dutch.xlf中对应的<trans-unit>的id属性与自定义ID完全一致,这样合并时Angular才能正确匹配翻译单元,不会重复生成。
  • 检查xliff格式:确保dutch.xlf符合XLIFF 1.2的规范(Angular 8使用的版本),所有标签正确闭合,没有语法错误,否则合并时可能出现解析问题。
  • 补充新翻译:每次合并后,新添加的翻译单元会没有<target>,你需要手动补充这些翻译,否则仍然会触发"misses a translation"错误。

内容的提问来源于stack exchange,提问作者Juliano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:13:15