我有一个angular 14 i18n项目,默认语言是法语,我有英文翻译。
所以我有一个区域设置文件夹,里面有两个文件:messages.xlf
和messages.en.xlf
。配置:
"i18n": {
"sourceLocale": "fr",
"locales": {
"en": {
"translation": "src/locale/messages.en.xlf"
}
}
代码看起来像:
.html:
<p i18n>Bonjour</p>
和.ts:
$localize`Bonjour`
我想做的是完全删除法语,只提供英语,我想删除i18n配置,并在.html或.ts.中用英语写所有内容
有没有办法用英文翻译完全替换源文件?
我检查了angular CLI,但没有找到实现这一点的方法,并考虑用脚本替换所有内容,但它看起来很乏味。。。
我最终使用xmllint
、find
和sed
编写了它的脚本,类似于以下内容:
#!/bin/bash
# Count source nodes
nodeCount=$(xmllint --xpath "count(//trans-unit)" ./src/locale/messages.en.xlf)
#Iterate the nodeset by index
for i in $(seq 1 $nodeCount); do
source=$(xmllint --xpath "string((//trans-unit)[$i]/source)" ./src/locale/messages.en.xlf)
target=$(xmllint --xpath "string((//trans-unit)[$i]/target)" ./src/locale/messages.en.xlf)
filePath=$(xmllint --xpath "string((//trans-unit)[$i]/context-group/context[@context-type='sourcefile'])" ./src/locale/messages.en.xlf)
gsed -i "s/${source}/${target}/" $filePath >/dev/null 2>&1
advance=$(($i * 100 / $nodeCount))
echo -ne ">>> [${advance}%]r"
done
这个脚本正在翻译文件中查找标记,并找到匹配的目标和文件路径。
警告:它不适用于复数,但除此之外,它还很好!