如何通过ID查找Angular多语言项目中的可翻译字符串?
用自动生成ID全局搜索
每个这类无效字符串都带自动生成的ID(格式为@@xxxxxx),直接在代码库全局搜索这个ID,就能找到对应的i18n标记所在的模板或组件代码。比如ID是@@emptyInterpolation456,搜这个字符串,就能定位到模板里类似<span i18n="@@emptyInterpolation456">{$INTERPOLATION}</span>的位置。排查对应组件的插值绑定
找到关联组件后,检查它的.html模板文件,找带i18n标记的插值表达式({{ }}),看是不是原本的静态文本被误删了——比如原本是<div i18n="@@greeting">你好, {{userName}}</div>,后来被改成了<div i18n="@@greeting">{{userName}}</div>,就会生成仅含{$INTERPOLATION}的条目。同时也要检查组件.ts文件里用$localize函数的地方,有没有只传插值变量、没写基础文本的情况,比如$localize:@@greeting:${userName};`。用Angular CLI提取命令查日志
重新执行ng extract-i18n --verbose命令,看控制台的详细输出,里面会提示生成每个messages条目对应的具体文件路径和行号,直接定位到问题代码的位置。查版本控制记录
如果项目用了Git这类工具,搜该messages条目的ID对应的提交记录,看提交diff就能知道原本的文本内容,以及是谁、什么时候修改了代码,快速定位来源。
内容的提问来源于stack exchange,提问作者hakuni

