teletype-cli多语言插件使用手册
teletype:打字机。 意义:愿以后的工作再也不受多语言翻译的迫害!
这个插件可以帮你做到,仅项目里输入中文一键棒帮你替换成英文,告别手动百度单词再编辑多语言json文件的痛苦。那么如何使用呢?here we go!
首先你需要按照teletype-cli在全局
npm i teletype-cli -g
或
yarn global add teletype-cli
当你看到这个,说明装好了(暂时忽略这里的缺陷报错~)
这时候我们需要打开需要翻译的项目,然后根目录下新建一个文件叫 teletype-config.js
,文件内容如下:
/*
* @Author: jizai jizai.zhu@tuya.com
* @Date: 2022-08-07 14:49:43
* @LastEditors: jizai jizai.zhu@tuya.com
* @LastEditTime: 2022-10-14 17:01:17
* @FilePath: /community-app-property-release-2.4.1/teletype-config.js
* @Description: 项目配置文件
*/
module.exports = {
teletypeDir: "client/static/locales", //项目多语言存放地址(用户需要按照项目修改)
pageDir: 'client/containers', //页面文件的地址(用户需要按照项目修改)
srcLang: "zh", //基础多语言类型
distLangs: [ //所需要的翻译的类型
"en",
],
exportHeaders: //导出成excel时表头需要用户自定义
{
zh: '简体中文',
en: '英语',
},
googleApiKey: "", //用户如果有谷歌翻译的api,可以填写进来
baiduApiKey: { //调用百度翻译的api需要apiId和appKey,建议用户自己申请自己的,保证一些不必要的报错。
appId: "20220725001283202",
appKey: "PfhtKXtNKPj0mYuevmCI"
},
baiduLangMap: { //百度翻译的设置
"en-US": "en",
"zh-TW": "cht",
},
translateOptions: { //翻译时的设置,比如超过多少字符,截取key
concurrentLimit: 10,
requestOptions: {}
},
defaultTranslateKeyApi: "Baidu", //默认使用的翻译软件
ignoreDir: "",
ignoreFile: "",
formatter: (v, extra) => `t('${v}'${extra ? extra : ''})`, //项目里如何调用t函数翻译的 (用户需要按照项目修改)
importI18N: `import { useTranslation } from '@/utils/i18n'`,//项目里引入i18n的方式(用户需要按照项目修改)
useI18NTranslation: file => `const { t } = useTranslation(['${file}'])` //项目里如何引入t函数的方式(用户需要按照项目修改)
}
到这里,我们就完成了teletype的所有配置。跑一跑试试。 回到项目的根目录,我们输入需要翻译文件夹📁(这里我建议按照文件夹翻译,原因后面说)
teletype --extract [file]
这里的file是所需要翻译的文件夹基于项目根的相对地址
比如说: 我想翻译stock文件夹内的所有中文。我的file地址为:client/containers/borrow/stock。
在这里我想解释一下,为什么我一直说用文件夹去执行命令,而不是单个文件。因为teletype想帮你每一个文件夹下面的json都整合在一起,并且在json内,teletype也会按照文件夹下面的子文件创建对应的key名。对于微应用拆分也是极为方便的。
tips: Q:如何获得自己专属百度翻译apiId和apiKey。 A:可以注册https://fanyi-api.baidu.com/manage/developer,一个百度翻译开开发者。 然后找到开发者信息,查看自己的密钥。
导出篇
导出可以支持某语种的全量导出,或者diff导出。
teletype --export [file]
注意:teletype-cli是以线上的多语言为主,本地 对 线上 存有的key做了多语言变更是不会被diff出来的。
把需要导出的的多国语言,填写到teletype-config.js文件里的distLangs
//teletype-config.js
module.exports = {
....,
distLangs: [
"zh",
'en',
'ko',
"ja"
],
...
}
其中lang指代需要导出的语种,file指代需要diff的json文件。file不必传,不传全量导出语言类目中的所有多语言词条,传了就是和传进来的json文件diff。
下图是获取json文件的方法,导出的json是全量的项目里的多语言,teletype-cli会按照你传进来的lang字段,去diff出本地项目和线上还没有的多语言词条。
1.0.23版本 修改了导出的逻辑,支持多国语言的导出,但是字段是以简体中文循环的。 举一个例子:如果项目里的多语言zh文件下的,你新增了一个多语言,导出的时候会在表格里。但是你如果在ko文件里(除zh文件以外)新增了一个多语言词条,是不会被导出来的。
导入篇
按照传入的json文件绝对地址和目标lang语种将线上的多语言文件导入本地。
teletype --import [lang] [file]
其中lang指代需要导入的语种,file指代需要导入的json文件。
注意:teletype-cli导入逻辑是 线上和本地多语言取的并集,如果有相同key是线上覆盖本地,如果本地有新增的key会保留,不会被剔除。