{"id":25200582,"url":"https://github.com/tenadolanter/i18n-cli","last_synced_at":"2025-05-12T13:15:30.627Z","repository":{"id":180397634,"uuid":"653978365","full_name":"tenadolanter/i18n-cli","owner":"tenadolanter","description":"i18n-cli 是一个国际化脚本，自动提取中文，自动翻译，自动保存翻译结果。","archived":false,"fork":false,"pushed_at":"2025-03-06T03:29:32.000Z","size":573,"stargazers_count":37,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-05-12T13:15:18.124Z","etag":null,"topics":["globalization","internationalization","languages","translation"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tenadolanter.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-15T06:31:13.000Z","updated_at":"2025-04-23T06:01:33.000Z","dependencies_parsed_at":"2024-01-19T08:43:57.467Z","dependency_job_id":"18cdee08-1104-487a-9f11-1259426ff620","html_url":"https://github.com/tenadolanter/i18n-cli","commit_stats":null,"previous_names":["tenadolanter/i18n","tenadolanter/i18n-cli"],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tenadolanter%2Fi18n-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tenadolanter%2Fi18n-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tenadolanter%2Fi18n-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tenadolanter%2Fi18n-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tenadolanter","download_url":"https://codeload.github.com/tenadolanter/i18n-cli/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253745196,"owners_count":21957319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["globalization","internationalization","languages","translation"],"created_at":"2025-02-10T04:33:18.558Z","updated_at":"2025-05-12T13:15:30.597Z","avatar_url":"https://github.com/tenadolanter.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 介绍\n\ni18n-cli 是一个自动国际化脚本，通过执行命令，自动提取代码里面的中文，自动调用百度或谷歌翻译接口，自动将翻译结果以 key-value 形式存入\\*.json 语言包里。\n\n支持 vue 语法，支持 react 语法，支持 jsx 语法，支持 html 语法，i18n-cli 是一个和库无关的国际化脚本。\n\n## 使用\n\n### 0、环境\n\nnode \u003e 15.0.0\n\n### 1、安装\n\n```node\nnpm install @tenado/i18n-cli -D\n或\nyarn add  @tenado/i18n-cli -D\n```\n\n### 2、初始化\n\n执行如下命令，会在项目目录下生成一个`i18n.config.js`文件，里面记录了脚本执行时候需要的配置\n\n```node\nnpx i18n-cli init\n```\n\n### 3、获取并配置百度翻译 api\n\n- 进入百度翻译开放平台[https://fanyi-api.baidu.com/manage/developer](https://fanyi-api.baidu.com/manage/developer)，申请 `APP ID` 和`秘钥`。\n\n- 将获取到的`APP ID` 和`秘钥`填入`i18n.config.js`文件下的`translate.appId`和`translate.secretKey`并保存\n\n### 4、配置 i18n.config.js\n\n| 名称                | 类型    | 说明                                                               | 默认值                       |\n| ------------------- | ------- | ------------------------------------------------------------------ | ---------------------------- |\n| entry               | Array   | 入口                                                               | src                          |\n| exclude             | Array   | 排除文件夹：'src/exclude/\\*\\*'，排除文件：'src/exclude/\\*\\*/\\*.js' | []                           |\n| local               | String  | 本地语言                                                           | zh-CN                        |\n| localPath           | String  | 语言存放位置                                                       | src/locales                  |\n| langs               | Array   | 需要翻译的语言列表                                                 | ['en-US']                    |\n| keyPrefix           | String  | 生成翻译 key 时候的默认前缀                                        | -                            |\n| keygenStrategy      | String  | 生成翻译 key 的算法，可选值为 random 或不填，更多算法等待后面扩充  | -                            |\n| keyShowOrigin       | Boolean | 生成的 key 后面是否显示中文，格式为 i18n.t('test', '测试')         | false                        |\n| i18nImport          | String  | 引入 i18n                                                          | import { i18n } from 'i18n'; |\n| i18nObject          | String  | i18n 对象                                                          | i18n                         |\n| i18nMethod          | String  | i18n 方法                                                          | t                            |\n| ignoreText          | String  | 注释，如// i18n-disable，则注释所在行的中文不会被翻译              | i18n-disable                 |\n| ignoreMethods       | Array   | 需要被忽略的方法，例如 console.log                                 | []                           |\n| ignoreAttributes    | Array   | 需要被忽略的属性，例如标签上的 id、name 等属性                     | []                           |\n| translate           | Object  | 翻译配置对象                                                       | -                            |\n| translate.type      | String  | 翻译的类型，baidu、youdao、google                                  | -                            |\n| translate.appId     | String  | 翻译 appId                                                         | -                            |\n| translate.secretKey | String  | 翻译 secretKey                                                     | -                            |\n| translate.interval  | Number  | 翻译接口调用间隔，防止太频繁                                       | 1000                         |\n\n语言 key 映射：\n\n| 语言名称 | 语言 key |\n| -------- | -------- |\n| 简体中文 | zh-CN    |\n| 繁体中文 | zh-TW    |\n| 英语     | en-US    |\n| 日语     | ja-JP    |\n| 西班牙   | es-ES    |\n| 俄语     | ru-RU    |\n| 韩语     | ko-KR    |\n| 法语     | fr-FR    |\n| 德语     | de-DE    |\n\n### 5、自动转换\n\n```node\nnpx i18n-cli sync\n```\n\n特别说明：可以使用`npx i18n-cli extract`和`npx i18n-cli translate`代替如上命令，分步骤执行，1)提取代码里面的中文部分，2)翻译提取到的中文\n\n## 转换示例\n\n转换前\n\n```vue\n\u003ctemplate\u003e\n  \u003cdiv class=\"empty-data\"\u003e\n    \u003cdiv class=\"name\"\u003e{{ name }}\u003c/div\u003e\n    \u003ctemplate\u003e\n      \u003cdiv class=\"empty-image-wrap\"\u003e\n        \u003cimg class=\"empty-image\" :src=\"emptyImage\" /\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"empty-title\"\u003e暂无数据\u003c/div\u003e\n    \u003c/template\u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n\n\u003cscript lang=\"js\"\u003e\nimport Vue from \"vue\";\nexport default Vue.extend({\n  data(){\n    return {\n      name: \"测试\"\n    }\n  },\n});\n\u003c/script\u003e\n```\n\n转换后\n\n```vue\n\u003ctemplate\u003e\n  \u003cdiv class=\"empty-data\"\u003e\n    \u003cdiv class=\"name\"\u003e{{ name }}\u003c/div\u003e\n    \u003ctemplate\u003e\n      \u003cdiv class=\"empty-image-wrap\"\u003e\n        \u003cimg class=\"empty-image\" :src=\"emptyImage\" /\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"empty-title\"\u003e{{ $t(\"zan-wu-shu-ju\") }}\u003c/div\u003e\n    \u003c/template\u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n\n\u003cscript lang=\"js\"\u003e\nimport { i18n } from 'i18n';\nimport Vue from \"vue\";\nexport default Vue.extend({\n  data() {\n    return {\n      name: i18n.t('ce-shi')\n    };\n  }\n});\n\u003c/script\u003e\n```\n\n## TODO issue\n\n- [x] 处理在转换 html 的时候，大写的标签会自动转换为小写\n\n- [x] html 里面标签转换错误，`\u003cdatasetDetailsDialog\u003e\u003c/datasetDetailsDialog\u003e`\n\n- [x] 已经转换的代码，不需要再次转换\n\n- [x] 处理格式为`:name=\"'测试'\"`类型的数据\n\n- [x] 大写的属性被转换掉了，例如`\u003cdiv originType=\"WORKSPACE\"\u003e\u003c/div\u003e`\n\n- [x] 自闭和标签的解析，例如`\u003cToast /\u003e`\n\n- [x] console.log 不需要翻译\n\n- [x] disabled-i18n 添加\n\n- [x] 多个 template 标签解析报错\n\n- [x] form 里面的规则报错，:rules=\"{ required: true, message: '请输入名称', trigger: 'blur' }\"\n\n- [x] ts 里面强制类型转换`const arrs = \u003cany\u003e[]arr`\n\n## 常见问题\n\n[常见问题与报错](./QA.md)\n\n## 特别提示\n\n提示：**以脚手架的形式安装 i18n-cli，可能会因为依赖版本冲突的问题导致转换失败，这种情况下可以下载 github 上的仓库代码，配置 i18n.config.js 后，将需要翻译的文件夹拷贝到仓库下，然后执行 npm run sync**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftenadolanter%2Fi18n-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftenadolanter%2Fi18n-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftenadolanter%2Fi18n-cli/lists"}