You need to enable JavaScript to run this app. 从Angular 7升级至Angular 10后I18n本地化提取与合并失效咨询
优惠活动
大模型
产品
解决方案
定价
更多

从Angular 7升级至Angular 10后I18n本地化提取与合并失效咨询

Angular 10 环境下i18n提取与合并操作方案

报错核心成因

两个问题叠加导致原有流程失效:

  • 原脚本在Windows环境下的反斜杠转义错误,加上Angular 10对ng xi18n的参数校验收紧,原本指代项目名的\\projectName被CLI识别为路径参数,挤占了--i18n-locale的参数值位置,最终把后续xliffmerge的可执行路径当成无效语言配置传入,触发"language is not valid"报错
  • 旧版ngx-i18nsupport的自定义builder和Angular 10的参数解析逻辑不兼容,导致xliffmerge执行时找不到正确的messages.xlf文件路径,触发"i18nFile messages.xlf is not readable"报错

前置依赖校准

当前i18n相关依赖存在跨版本不匹配问题,先完成版本对齐:

  • 卸载旧版不兼容的@ngx-i18nsupport/xliffmerge,安装适配当前Angular 10、TypeScript 4.0.5环境的对应依赖:@angular/localize@10.1.6、xliffmerge@1.5.2
  • 确保本地@angular/cli版本和项目对齐为10.2.0,避免全局CLI和本地版本差异导致的参数解析错位

配置xliffmerge运行规则

废弃原来通过angular.json自定义builder调用xliffmerge的方式,改用独立配置文件规避参数解析bug:

  • 在项目根目录新建xliffmerge.json,写入项目用到的4个locale的配置:
{
  "xliffmergeOptions": {
    "srcDir": "assets/locale",
    "genDir": "assets/locale",
    "i18nFile": "messages.xlf",
    "languages": ["en", "zh-CN", "fr", "es"],
    "defaultLanguage": "en",
    "format": "xlf"
  }
}
  • 删除angular.json中projectName:xliffmerge对应的自定义builder配置段,避免CLI自动解析时捕获错误参数

重写extract-i18n执行脚本

修正package.json中原本存在转义错误的脚本,完全匹配Angular 10的ng xi18n参数规范:

  • 把旧的"extract-i18n"脚本替换为如下写法:
"extract-i18n": "ng xi18n projectName --i18n-format xlf --output-path assets/locale --i18n-locale en && xliffmerge --profile xliffmerge.json"

注意:Windows环境下不要在脚本里使用双反斜杠转义项目名,直接写项目名即可,CLI会自动适配路径分隔符。

流程验证

  • 执行修改后的脚本,会先自动扫描项目中所有带i18n标记的文本,生成基础的messages.xlf文件输出到assets/locale目录
  • 脚本会自动触发xliffmerge流程:将新提取的翻译条目和已有的4份locale的xlf文件做合并,保留原有已完成的翻译内容,仅新增未翻译的条目,不会覆盖已有翻译内容
  • 原报的两个错误会同步解决:xliffmerge将直接通过配置文件读取指定路径的文件,不再受脚本参数错位的影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 01:06:04