https://github.com/tenadolanter/i18n-cli
i18n-cli 是一个国际化脚本,自动提取中文,自动翻译,自动保存翻译结果。
https://github.com/tenadolanter/i18n-cli
globalization internationalization languages translation
Last synced: 5 months ago
JSON representation
i18n-cli 是一个国际化脚本,自动提取中文,自动翻译,自动保存翻译结果。
- Host: GitHub
- URL: https://github.com/tenadolanter/i18n-cli
- Owner: tenadolanter
- License: mit
- Created: 2023-06-15T06:31:13.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-06T03:29:32.000Z (7 months ago)
- Last Synced: 2025-05-12T13:15:18.124Z (5 months ago)
- Topics: globalization, internationalization, languages, translation
- Language: JavaScript
- Homepage:
- Size: 560 KB
- Stars: 37
- Watchers: 0
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
## 介绍
i18n-cli 是一个自动国际化脚本,通过执行命令,自动提取代码里面的中文,自动调用百度或谷歌翻译接口,自动将翻译结果以 key-value 形式存入\*.json 语言包里。
支持 vue 语法,支持 react 语法,支持 jsx 语法,支持 html 语法,i18n-cli 是一个和库无关的国际化脚本。
## 使用
### 0、环境
node > 15.0.0
### 1、安装
```node
npm install @tenado/i18n-cli -D
或
yarn add @tenado/i18n-cli -D
```### 2、初始化
执行如下命令,会在项目目录下生成一个`i18n.config.js`文件,里面记录了脚本执行时候需要的配置
```node
npx i18n-cli init
```### 3、获取并配置百度翻译 api
- 进入百度翻译开放平台[https://fanyi-api.baidu.com/manage/developer](https://fanyi-api.baidu.com/manage/developer),申请 `APP ID` 和`秘钥`。
- 将获取到的`APP ID` 和`秘钥`填入`i18n.config.js`文件下的`translate.appId`和`translate.secretKey`并保存
### 4、配置 i18n.config.js
| 名称 | 类型 | 说明 | 默认值 |
| ------------------- | ------- | ------------------------------------------------------------------ | ---------------------------- |
| entry | Array | 入口 | src |
| exclude | Array | 排除文件夹:'src/exclude/\*\*',排除文件:'src/exclude/\*\*/\*.js' | [] |
| local | String | 本地语言 | zh-CN |
| localPath | String | 语言存放位置 | src/locales |
| langs | Array | 需要翻译的语言列表 | ['en-US'] |
| keyPrefix | String | 生成翻译 key 时候的默认前缀 | - |
| keygenStrategy | String | 生成翻译 key 的算法,可选值为 random 或不填,更多算法等待后面扩充 | - |
| keyShowOrigin | Boolean | 生成的 key 后面是否显示中文,格式为 i18n.t('test', '测试') | false |
| i18nImport | String | 引入 i18n | import { i18n } from 'i18n'; |
| i18nObject | String | i18n 对象 | i18n |
| i18nMethod | String | i18n 方法 | t |
| ignoreText | String | 注释,如// i18n-disable,则注释所在行的中文不会被翻译 | i18n-disable |
| ignoreMethods | Array | 需要被忽略的方法,例如 console.log | [] |
| ignoreAttributes | Array | 需要被忽略的属性,例如标签上的 id、name 等属性 | [] |
| translate | Object | 翻译配置对象 | - |
| translate.type | String | 翻译的类型,baidu、youdao、google | - |
| translate.appId | String | 翻译 appId | - |
| translate.secretKey | String | 翻译 secretKey | - |
| translate.interval | Number | 翻译接口调用间隔,防止太频繁 | 1000 |语言 key 映射:
| 语言名称 | 语言 key |
| -------- | -------- |
| 简体中文 | zh-CN |
| 繁体中文 | zh-TW |
| 英语 | en-US |
| 日语 | ja-JP |
| 西班牙 | es-ES |
| 俄语 | ru-RU |
| 韩语 | ko-KR |
| 法语 | fr-FR |
| 德语 | de-DE |### 5、自动转换
```node
npx i18n-cli sync
```特别说明:可以使用`npx i18n-cli extract`和`npx i18n-cli translate`代替如上命令,分步骤执行,1)提取代码里面的中文部分,2)翻译提取到的中文
## 转换示例
转换前
```vue
{{ name }}
![]()
暂无数据
import Vue from "vue";
export default Vue.extend({
data(){
return {
name: "测试"
}
},
});```
转换后
```vue
{{ name }}
![]()
{{ $t("zan-wu-shu-ju") }}
import { i18n } from 'i18n';
import Vue from "vue";
export default Vue.extend({
data() {
return {
name: i18n.t('ce-shi')
};
}
});```
## TODO issue
- [x] 处理在转换 html 的时候,大写的标签会自动转换为小写
- [x] html 里面标签转换错误,``
- [x] 已经转换的代码,不需要再次转换
- [x] 处理格式为`:name="'测试'"`类型的数据
- [x] 大写的属性被转换掉了,例如`
`- [x] 自闭和标签的解析,例如``
- [x] console.log 不需要翻译
- [x] disabled-i18n 添加
- [x] 多个 template 标签解析报错
- [x] form 里面的规则报错,:rules="{ required: true, message: '请输入名称', trigger: 'blur' }"
- [x] ts 里面强制类型转换`const arrs = []arr`
## 常见问题
[常见问题与报错](./QA.md)
## 特别提示
提示:**以脚手架的形式安装 i18n-cli,可能会因为依赖版本冲突的问题导致转换失败,这种情况下可以下载 github 上的仓库代码,配置 i18n.config.js 后,将需要翻译的文件夹拷贝到仓库下,然后执行 npm run sync**