本来我们后台用的是 midwayjs, 然后想做国际化,一开始选的技术方案是 i18next, i18n这样的框架,大佬推荐用kiwi,然后苦逼的开始使用kiwi了

目前这个项目已经不活跃了,kiwi 对应的vscode插件已经无法使用,难顶,
kiwi-intl这个项目应该是可以正常使用,为了可以一键提取文本,要使用他的kiwi-cli

kiwi-cli --extract需要使用谷歌翻译的apiKey,迫于没有,只能基于他魔改一份
改完发现,翻译并没有什么暖用,哈哈,还不如不用翻译,

修改思路
kiwi 之前的思路是将文件中的文本全部提取出来,然后获取中文文本,将其逐字翻译,

比如 圆通快递 翻译对应的是 圆 circle 通 through 这样的,然后取前四个字母,生成key

我直接去掉这一步哈,直接用uuid生成key了,然后翻译也有一点小问题

魔改好的版本叫 wy-kiwi-cli

npm i -g wy-kiwi-cli

部署过程

1. kiwi --init 先生成配置文件,修改.kiwi/kiwi-config.json 吧百度翻译相关的apikey 填一下
2. kiwi --extract ${dir}  针对目录提取中文文件,${dir} 为提取的目录
3. kiwi --sync 同步生成多语言配置文件
4. kiwi --translate 进行翻译

生成的数据如果有模板字符串的话,会有一点小问题,
比如

a = `这是一条模板字符串 ${text}`

当被提取时,text变量会被转义成{val}, 需要自行处理,如果使用kiwi 对应的包, 代码如下

kiwi.template('字符串对应地址', { text: '这里你要换的变量'})

PS. 可以修改config里面的 importI18N 字段,改成绝对目录 比如 @/app/util/i18n 这样就不用修改代码了,怎么修改绝对导入 https://khalilstemmler.com/blogs/typescript/absolute-file-path/
绝对路径的问题,
只改tsconfig.json 会报 cannot find module
在网上找了一下解决方案,尝试无果,发现是 midway的问题😆 https://blog.csdn.net/qq_37365676/article/details/113884986

fuck, 只能使用 tsconfig-paths

npm i -save-dev tsconfig-paths

然后在启动时,加上

import 'tsconfig-paths/register'

就好了