{"_id":"@chellel/i18n-extract-cli","_rev":"3-2a140b516dae95b9d0bc6a9f8d65fcc2","name":"@chellel/i18n-extract-cli","description":"这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然，你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react","dist-tags":{"latest":"3.4.5"},"versions":{"3.4.2":{"name":"@chellel/i18n-extract-cli","version":"3.4.2","keywords":["i18n","intl","extract","intl-cli","i18n-cli","vue-i18n","react-i18n","i18n-translate","auto-translate","translate"],"author":{"name":"IFreeOvO"},"license":"MIT","_id":"@chellel/i18n-extract-cli@3.4.2","homepage":"https://github.com/IFreeOvO/i18n-cli/tree/master/packages/i18n-extract-cli","bugs":{"url":"https://github.com/IFreeOvO/i18n-cli/issues"},"bin":{"it":"bin/index.js"},"dist":{"shasum":"668b05f49920f27d8297ab84b054e08c64bf8623","tarball":"https://registry.npmjs.org/@chellel/i18n-extract-cli/-/i18n-extract-cli-3.4.2.tgz","fileCount":4,"integrity":"sha512-wgmOdLePCGxO++/k8RHRT3pcL0bu+12rmq2oIGiKIp9RH6vZMwk9kbTAPdxLTNhe5aqxVpfq6yM/QE0nLZgtGg==","signatures":[{"sig":"MEUCIH6CLGlBq9+75AgVNwAhoeTq8nsuiDM63OvHilBpjpK8AiEAw8KwCejSKA+V1KnE+3NEbOsMQU0rfwyILzBtSbPMVew=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19205},"types":"types/index.d.ts","engines":{"node":">=14.21.2"},"gitHead":"e9366a88d9d194a721be16541700ef1218416bce","scripts":{"dev":"tsc --watch","build":"rimraf dist && tsc --build","check":"tsc --noEmit"},"_npmUser":{"name":"chellel","email":"1010603372@qq.com"},"repository":{"url":"git+https://github.com/IFreeOvO/i18n-cli.git","type":"git","directory":"packages/i18n-extract-cli"},"_npmVersion":"8.19.3","description":"这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然，你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react","directories":{},"_nodeVersion":"18.13.0","dependencies":{"qs":"^6.11.0","ejs":"^3.1.8","md5":"^2.3.0","glob":"^8.0.3","chalk":"4.1.2","leven":"3.1.0","slash":"3.0.0","lodash":"^4.17.21","semver":"^7.3.8","fs-extra":"^10.1.0","inquirer":"8.2.5","minimist":"^1.2.8","prettier":"^2.7.1","commander":"^9.4.1","node-xlsx":"^0.21.0","@babel/core":"^7.20.2","htmlparser2":"^8.0.1","proxy-agent":"^5.0.0","@babel/types":"^7.20.0","cli-progress":"^3.11.2","@babel/template":"^7.18.10","@babel/traverse":"^7.20.0","@babel/generator":"^7.20.0","@vue/compiler-sfc":"^3.2.39","serialize-javascript":"^6.0.0","@babel/plugin-syntax-jsx":"^7.18.6","@babel/preset-typescript":"^7.18.6","@ifreeovo/translate-utils":"^1.2.0","@babel/plugin-syntax-decorators":"^7.19.0","@babel/plugin-syntax-function-bind":"^7.18.6","@babel/plugin-syntax-do-expressions":"^7.18.6","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-async-generators":"^7.8.4","@babel/plugin-syntax-class-properties":"^7.12.13","@babel/plugin-syntax-export-extensions":"7.0.0-beta.32","@babel/plugin-syntax-object-rest-spread":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.18.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","@types/qs":"^6.9.7","@types/ejs":"^3.1.1","@types/md5":"^2.3.2","@types/glob":"^8.0.0","@types/lodash":"^4.14.188","@types/semver":"^7.3.13","@types/fs-extra":"^9.0.13","@types/inquirer":"^9.0.3","@types/minimist":"^1.2.2","@types/prettier":"^2.7.1","@types/node-fetch":"^2.6.2","@types/babel__core":"^7.1.20","@types/cli-progress":"^3.11.0","@types/babel__template":"^7.4.1","@types/babel__traverse":"^7.18.2","@types/babel__generator":"^7.6.4","@types/serialize-javascript":"^5.0.2"},"_npmOperationalInternal":{"tmp":"tmp/i18n-extract-cli_3.4.2_1719216736331_0.5650444672906743","host":"s3://npm-registry-packages"}},"3.4.3":{"name":"@chellel/i18n-extract-cli","version":"3.4.3","keywords":["i18n","intl","extract","intl-cli","i18n-cli","vue-i18n","react-i18n","i18n-translate","auto-translate","translate"],"author":{"name":"IFreeOvO"},"license":"MIT","_id":"@chellel/i18n-extract-cli@3.4.3","homepage":"https://github.com/IFreeOvO/i18n-cli/tree/master/packages/i18n-extract-cli","bugs":{"url":"https://github.com/IFreeOvO/i18n-cli/issues"},"bin":{"it":"bin/index.js"},"dist":{"shasum":"30a52f89634bdc242d2231c73107ec467610dd70","tarball":"https://registry.npmjs.org/@chellel/i18n-extract-cli/-/i18n-extract-cli-3.4.3.tgz","fileCount":4,"integrity":"sha512-euF6JE66oVsximwLfx5mtxyxL1JzKoaSlQc/r9ThdaqCGRI/zJSLF6ck8crQB+ltFORg8JH/+qbSlArbzjKwHg==","signatures":[{"sig":"MEUCIQDTWpMCMKHpls2MciA5BmWqAS11UtfToe1CmCvXhjR6GAIgc6nLKtXhxbIfPT5yIAyjkQcReF98Gy/hrKGSTmlLORk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19205},"types":"types/index.d.ts","engines":{"node":">=14.21.2"},"gitHead":"e9366a88d9d194a721be16541700ef1218416bce","scripts":{"dev":"tsc --watch","build":"rimraf dist && tsc --build","check":"tsc --noEmit"},"_npmUser":{"name":"chellel","email":"1010603372@qq.com"},"repository":{"url":"git+https://github.com/IFreeOvO/i18n-cli.git","type":"git","directory":"packages/i18n-extract-cli"},"_npmVersion":"8.19.3","description":"这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然，你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react","directories":{},"_nodeVersion":"18.13.0","dependencies":{"qs":"^6.11.0","ejs":"^3.1.8","md5":"^2.3.0","glob":"^8.0.3","chalk":"4.1.2","leven":"3.1.0","slash":"3.0.0","lodash":"^4.17.21","semver":"^7.3.8","fs-extra":"^10.1.0","inquirer":"8.2.5","minimist":"^1.2.8","prettier":"^2.7.1","commander":"^9.4.1","node-xlsx":"^0.21.0","@babel/core":"^7.20.2","htmlparser2":"^8.0.1","proxy-agent":"^5.0.0","@babel/types":"^7.20.0","cli-progress":"^3.11.2","@babel/template":"^7.18.10","@babel/traverse":"^7.20.0","@babel/generator":"^7.20.0","@vue/compiler-sfc":"^3.2.39","serialize-javascript":"^6.0.0","@babel/plugin-syntax-jsx":"^7.18.6","@babel/preset-typescript":"^7.18.6","@ifreeovo/translate-utils":"^1.2.0","@babel/plugin-syntax-decorators":"^7.19.0","@babel/plugin-syntax-function-bind":"^7.18.6","@babel/plugin-syntax-do-expressions":"^7.18.6","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-async-generators":"^7.8.4","@babel/plugin-syntax-class-properties":"^7.12.13","@babel/plugin-syntax-export-extensions":"7.0.0-beta.32","@babel/plugin-syntax-object-rest-spread":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.18.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","@types/qs":"^6.9.7","@types/ejs":"^3.1.1","@types/md5":"^2.3.2","@types/glob":"^8.0.0","@types/lodash":"^4.14.188","@types/semver":"^7.3.13","@types/fs-extra":"^9.0.13","@types/inquirer":"^9.0.3","@types/minimist":"^1.2.2","@types/prettier":"^2.7.1","@types/node-fetch":"^2.6.2","@types/babel__core":"^7.1.20","@types/cli-progress":"^3.11.0","@types/babel__template":"^7.4.1","@types/babel__traverse":"^7.18.2","@types/babel__generator":"^7.6.4","@types/serialize-javascript":"^5.0.2"},"_npmOperationalInternal":{"tmp":"tmp/i18n-extract-cli_3.4.3_1719219401071_0.2323534886528118","host":"s3://npm-registry-packages"}},"3.4.4":{"name":"@chellel/i18n-extract-cli","version":"3.4.4","keywords":["i18n","intl","extract","intl-cli","i18n-cli","vue-i18n","react-i18n","i18n-translate","auto-translate","translate"],"author":{"name":"IFreeOvO"},"license":"MIT","_id":"@chellel/i18n-extract-cli@3.4.4","homepage":"https://github.com/IFreeOvO/i18n-cli/tree/master/packages/i18n-extract-cli","bugs":{"url":"https://github.com/IFreeOvO/i18n-cli/issues"},"bin":{"it":"bin/index.js"},"dist":{"shasum":"ef86beba4178ddc7923d2420c39345963e12ea09","tarball":"https://registry.npmjs.org/@chellel/i18n-extract-cli/-/i18n-extract-cli-3.4.4.tgz","fileCount":62,"integrity":"sha512-fF0qxQjhqUO7Q8lh91g6fChYcKgyi6vsuft2o7Fis3+2WSU0xiyf+wu9q3pH+76MVags8AG5kGi6HyjDi2WquQ==","signatures":[{"sig":"MEUCIQCEFe++ZLnFKkGpklHk5gHjhNolgmz4XT5YrGRZNX6ljAIgTsZsoq4mtjrd5gfQxmqzanWqYrbrOlW67jo3MfJMQ/I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":147767},"types":"types/index.d.ts","engines":{"node":">=14.21.2"},"gitHead":"e9366a88d9d194a721be16541700ef1218416bce","scripts":{"dev":"tsc --watch","build":"rimraf dist && tsc --build","check":"tsc --noEmit"},"_npmUser":{"name":"chellel","email":"1010603372@qq.com"},"repository":{"url":"git+https://github.com/IFreeOvO/i18n-cli.git","type":"git","directory":"packages/i18n-extract-cli"},"_npmVersion":"8.19.3","description":"这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然，你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react","directories":{},"_nodeVersion":"18.13.0","dependencies":{"qs":"^6.11.0","ejs":"^3.1.8","md5":"^2.3.0","glob":"^8.0.3","chalk":"4.1.2","leven":"3.1.0","slash":"3.0.0","lodash":"^4.17.21","semver":"^7.3.8","fs-extra":"^10.1.0","inquirer":"8.2.5","minimist":"^1.2.8","prettier":"^2.7.1","commander":"^9.4.1","node-xlsx":"^0.21.0","@babel/core":"^7.20.2","htmlparser2":"^8.0.1","proxy-agent":"^5.0.0","@babel/types":"^7.20.0","cli-progress":"^3.11.2","@babel/template":"^7.18.10","@babel/traverse":"^7.20.0","@babel/generator":"^7.20.0","@vue/compiler-sfc":"^3.2.39","serialize-javascript":"^6.0.0","@babel/plugin-syntax-jsx":"^7.18.6","@babel/preset-typescript":"^7.18.6","@ifreeovo/translate-utils":"^1.2.0","@babel/plugin-syntax-decorators":"^7.19.0","@babel/plugin-syntax-function-bind":"^7.18.6","@babel/plugin-syntax-do-expressions":"^7.18.6","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-async-generators":"^7.8.4","@babel/plugin-syntax-class-properties":"^7.12.13","@babel/plugin-syntax-export-extensions":"7.0.0-beta.32","@babel/plugin-syntax-object-rest-spread":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.18.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","@types/qs":"^6.9.7","@types/ejs":"^3.1.1","@types/md5":"^2.3.2","@types/glob":"^8.0.0","@types/lodash":"^4.14.188","@types/semver":"^7.3.13","@types/fs-extra":"^9.0.13","@types/inquirer":"^9.0.3","@types/minimist":"^1.2.2","@types/prettier":"^2.7.1","@types/node-fetch":"^2.6.2","@types/babel__core":"^7.1.20","@types/cli-progress":"^3.11.0","@types/babel__template":"^7.4.1","@types/babel__traverse":"^7.18.2","@types/babel__generator":"^7.6.4","@types/serialize-javascript":"^5.0.2"},"_npmOperationalInternal":{"tmp":"tmp/i18n-extract-cli_3.4.4_1719220085694_0.2836095614815899","host":"s3://npm-registry-packages"}},"3.4.5":{"name":"@chellel/i18n-extract-cli","version":"3.4.5","description":"这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然，你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react","publishConfig":{"access":"public"},"bin":{"i18n-auto":"bin/index.js"},"types":"types/index.d.ts","scripts":{"dev":"tsc --watch","build":"rimraf dist && tsc --build","check":"tsc --noEmit"},"keywords":["i18n","intl","extract","intl-cli","i18n-cli","vue-i18n","react-i18n","i18n-translate","auto-translate","translate"],"engines":{"node":">=14.21.2"},"author":{"name":"IFreeOvO"},"license":"MIT","dependencies":{"@babel/core":"^7.20.2","@babel/generator":"^7.20.0","@babel/plugin-proposal-optional-chaining":"^7.18.9","@babel/plugin-syntax-async-generators":"^7.8.4","@babel/plugin-syntax-class-properties":"^7.12.13","@babel/plugin-syntax-decorators":"^7.19.0","@babel/plugin-syntax-do-expressions":"^7.18.6","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-export-extensions":"7.0.0-beta.32","@babel/plugin-syntax-function-bind":"^7.18.6","@babel/plugin-syntax-jsx":"^7.18.6","@babel/plugin-syntax-object-rest-spread":"^7.8.3","@babel/preset-typescript":"^7.18.6","@babel/template":"^7.18.10","@babel/traverse":"^7.20.0","@babel/types":"^7.20.0","@ifreeovo/translate-utils":"^1.2.0","@vue/compiler-sfc":"^3.2.39","chalk":"4.1.2","cli-progress":"^3.11.2","commander":"^9.4.1","ejs":"^3.1.8","fs-extra":"^10.1.0","glob":"^8.0.3","htmlparser2":"^8.0.1","inquirer":"8.2.5","leven":"3.1.0","lodash":"^4.17.21","md5":"^2.3.0","minimist":"^1.2.8","node-xlsx":"^0.21.0","prettier":"^2.7.1","proxy-agent":"^5.0.0","qs":"^6.11.0","semver":"^7.3.8","serialize-javascript":"^6.0.0","slash":"3.0.0"},"devDependencies":{"@types/babel__core":"^7.1.20","@types/babel__generator":"^7.6.4","@types/babel__template":"^7.4.1","@types/babel__traverse":"^7.18.2","@types/cli-progress":"^3.11.0","@types/ejs":"^3.1.1","@types/fs-extra":"^9.0.13","@types/glob":"^8.0.0","@types/inquirer":"^9.0.3","@types/lodash":"^4.14.188","@types/md5":"^2.3.2","@types/minimist":"^1.2.2","@types/node-fetch":"^2.6.2","@types/prettier":"^2.7.1","@types/qs":"^6.9.7","@types/semver":"^7.3.13","@types/serialize-javascript":"^5.0.2","rimraf":"^3.0.2"},"repository":{"type":"git","url":"git+https://github.com/IFreeOvO/i18n-cli.git","directory":"packages/i18n-extract-cli"},"bugs":{"url":"https://github.com/IFreeOvO/i18n-cli/issues"},"homepage":"https://github.com/IFreeOvO/i18n-cli/tree/master/packages/i18n-extract-cli","gitHead":"e9366a88d9d194a721be16541700ef1218416bce","_id":"@chellel/i18n-extract-cli@3.4.5","_nodeVersion":"18.13.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-qjZ50BKJALvRCkWk3b1RAVvo+fAkCESvnHzZMhOfAzl0Q+51sjpntp0DYyQdSNw3rcBk0Ag8+G+XHhcj1Xjabw==","shasum":"f3c4c8802af24b738acdccae49a76d1d15fc1c92","tarball":"https://registry.npmjs.org/@chellel/i18n-extract-cli/-/i18n-extract-cli-3.4.5.tgz","fileCount":62,"unpackedSize":147773,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDL61Qfh84+L4Awrs+QI1HJvFT/SfktDAv2IiD+5yTwYwIhAIzF1tPS7aabPZBRr2xJi6N9uAx0eD5dUpadsZW1uRuf"}]},"_npmUser":{"name":"chellel","email":"1010603372@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/i18n-extract-cli_3.4.5_1719222543624_0.6262852743510374"},"_hasShrinkwrap":false}},"time":{"created":"2024-06-24T08:12:16.180Z","modified":"2024-06-24T09:49:03.942Z","3.4.2":"2024-06-24T08:12:16.495Z","3.4.3":"2024-06-24T08:56:41.213Z","3.4.4":"2024-06-24T09:08:05.916Z","3.4.5":"2024-06-24T09:49:03.764Z"},"maintainers":[{"name":"chellel","email":"1010603372@qq.com"}],"author":{"name":"IFreeOvO"},"repository":{"type":"git","url":"git+https://github.com/IFreeOvO/i18n-cli.git","directory":"packages/i18n-extract-cli"},"keywords":["i18n","intl","extract","intl-cli","i18n-cli","vue-i18n","react-i18n","i18n-translate","auto-translate","translate"],"license":"MIT","homepage":"https://github.com/IFreeOvO/i18n-cli/tree/master/packages/i18n-extract-cli","bugs":{"url":"https://github.com/IFreeOvO/i18n-cli/issues"},"readme":"# 介绍\r\n\r\n这是一款能够自动将代码里的中文转成 i18n 国际化标记的命令行工具。当然，你也可以用它实现将中文语言包自动翻译成其他语言。适用于 vue2、vue3 和 react\r\n\r\n## 流程设计\r\n\r\n见[掘金文章](https://juejin.cn/post/7174082242426175525)\r\n\r\n## 功能 🎉\r\n\r\n- 支持.mjs.cjs.js.ts.jsx.tsx.vue 后缀文件提取中文\r\n- 支持 vue2.0，vue3.0，react 提取中文\r\n- 支持通过/\\*i18n-ignore\\*/注释，忽略中文提取\r\n- 支持将提取的中文以 key-value 形式存入\\*.json 语言包里\r\n- 支持 prettier 格式化代码\r\n- 支持将中文语言包自动翻译成其他语言\r\n- 支持将翻译结果导出成 excel\r\n- 支持读取 excel 文件并转换成语言包\r\n- 自定义语言包 key 的层级嵌套\r\n- 自定义语言包的 key\r\n- 自定义 i18n 工具的调用对象\r\n- 自定义 i18n 工具的方法名\r\n- 自定义 i18n 第三方包的导入\r\n- 自定义忽略提取的方法\r\n\r\n## 安装\r\n\r\n```\r\nnpm i @ifreeovo/i18n-extract-cli -g\r\n```\r\n\r\n## 使用\r\n\r\n在项目根目录执行下面命令\r\n\r\n```\r\nit\r\n```\r\n\r\n## 指令参数\r\n\r\n| 参数              | 类型    | 默认值                 | 描述                                                                                   |\r\n| ----------------- | ------- | ---------------------- | -------------------------------------------------------------------------------------- |\r\n| -i, --input       | String  | 'src'                  | 指定待提取的文件目录。                                                                 |\r\n| -o, --output      | String  | ''                     | 输出转换后文件路径。没有值时表示完成提取后自动覆盖原始文件。当有值时，会输出到指定目录 |\r\n| -c, --config-file | String  | ''                     | 指定命令行配置文件的所在路径（可以自定义更多功能）                                     |\r\n| --localePath      | String  | './locales/zh-CN.json' | 指定提取的中文语言包所存放的路径。                                                     |\r\n| -v,--verbose      | Boolean | false                  | 控制台打印更多调试信息                                                                 |\r\n| -h,--help         | Boolean | false                  | 查看指令用法                                                                           |\r\n| --skip-extract    | Boolean | false                  | 跳过 i18n 转换阶段。                                                                   |\r\n| --skip-translate  | Boolean | false                  | 跳过中文翻译阶段。                                                                     |\r\n| --locales         | Array   | ['en-US']              | 根据中文语言包自动翻译成其他语言。用法例子 --locales en zh-CHT                         |\r\n| --incremental     | Boolean | false                  | 开启后。支持将文件中提取到中文键值对，追加到原有的中文语言包。                         |\r\n| --exportExcel     | Boolean | false                  | 开启后。导出所有翻译内容到 excel。 默认导出到当前目录下的 locales.xlsx                 |\r\n| --excelPath       | String  | './locales.xlsx'       | 指定导出的 excel 路径。                                                                |\r\n\r\n## 子命令\r\n\r\n| 子命令    | 描述                                      |\r\n| --------- | ----------------------------------------- |\r\n| init      | 在项目里初始化一个命令行配置              |\r\n| loadExcel | 根据导入翻译文件的 excel 内容，生成语言包 |\r\n\r\n## 命令行配置\r\n\r\n如果有更多的定制需求，可以在项目根目录执行`it init`，创建`i18n.config.js`文件，按自身需求修改完配置后，再执行`it -c i18n.config.js`。（注意：配置文件里参数的优先级比指令参数高）\r\n\r\n```js\r\n// 以下为i18n.config.js默认的完整配置，所有属性均为可选，可以根据自身需要修改\r\nmodule.exports = {\r\n  input: 'src',\r\n  output: '', // 没有值时表示完成提取后自动覆盖原始文件\r\n  exclude: ['**/node_modules/**/*'], // 排除不需要提取的文件\r\n  localePath: './locales/zh-CN.json', // 中文语言包的存放位置\r\n  localeFileType: 'json', // 设置语言包的文件类型，支持js、json。默认为json\r\n  // rules每个属性对应的是不同后缀文件的处理方式\r\n  rules: {\r\n    js: {\r\n      caller: '', // 自定义this.$t('xxx')中的this。不填则默认没有调用对象\r\n      functionName: 't', // 自定义this.$t('xxx')中的$t\r\n      customizeKey: function (key, currentFilePath) {\r\n        return key\r\n      }, // 自定义this.$t('xxx')中的'xxx'部分的生成规则\r\n      importDeclaration: 'import { t } from \"i18n\"', // 默认在文件里导入i18n包。不填则默认不导入i18n的包。由于i18n的npm包有很多，用户可根据项目自行修改导入语法\r\n      forceImport: false, // 即使文件没出现中文，也强行插入importDeclaration定义的语句\r\n    },\r\n    // ts,cjs,mjs,jsx,tsx配置方式同上\r\n    ts: {\r\n      caller: '',\r\n      functionName: 't',\r\n      customizeKey: function (key, currentFilePath) {\r\n        return key\r\n      },\r\n      importDeclaration: 'import { t } from \"i18n\"',\r\n      forceImport: false,\r\n    },\r\n    cjs: {\r\n      caller: '',\r\n      functionName: 't',\r\n      customizeKey: function (key, currentFilePath) {\r\n        return key\r\n      },\r\n      importDeclaration: 'import { t } from \"i18n\"',\r\n      forceImport: false,\r\n    },\r\n    mjs: {\r\n      caller: '',\r\n      functionName: 't',\r\n      customizeKey: function (key, currentFilePath) {\r\n        return key\r\n      },\r\n      importDeclaration: 'import { t } from \"i18n\"',\r\n      forceImport: false,\r\n    },\r\n    jsx: {\r\n      caller: '',\r\n      functionName: 't',\r\n      customizeKey: function (key, currentFilePath) {\r\n        return key\r\n      },\r\n      importDeclaration: 'import { t } from \"i18n\"',\r\n      functionSnippets: '', // react函数组件里，全局加代码片段\r\n      forceImport: false,\r\n    },\r\n    tsx: {\r\n      caller: '',\r\n      functionName: 't',\r\n      customizeKey: function (key, currentFilePath) {\r\n        return key\r\n      },\r\n      importDeclaration: 'import { t } from \"i18n\"',\r\n      functionSnippets: '',\r\n      forceImport: false,\r\n    },\r\n    vue: {\r\n      caller: 'this',\r\n      functionNameInTemplate: '$t',// vue这里的配置，仅针对vue的template标签里面的内容生效\r\n      functionNameInScript: '$t', // vue这里的配置，仅针对vue的script部分export default里面的内容生效\r\n      customizeKey: : function (key, currentFilePath) {\r\n        return key\r\n      },\r\n      importDeclaration: '',\r\n      forceImport: false,\r\n      tagOrder: ['template', 'script', 'style'], // 支持自定义vue文件的标签顺序\r\n    },\r\n  },\r\n  globalRule: {\r\n    ignoreMethods: [] // 忽略指定函数调用的中文提取。例如想忽略sensor.track('中文')的提取。这里就写['sensor.track']\r\n  },\r\n  // prettier配置，参考https://prettier.io/docs/en/options.html\r\n  prettier: {\r\n    semi: false,\r\n    singleQuote: true,\r\n  },\r\n  skipExtract: false, // 跳过提取中文阶段\r\n  // 以下是和翻译相关的配置，注意搭配使用\r\n  skipTranslate: true, // 跳过翻译语言包阶段。默认不翻译\r\n  locales: [], // 需要翻译的语言包。例如['en', 'zh-CHT']，会自动翻译英文和繁体\r\n  excelPath: './locales.xlsx', // excel存放路径\r\n  exportExcel: false, // 是否导出excel\r\n  // 参数：\r\n  // allKeyValue：已遍历的所有文件的key-value\r\n  // currentFileKeyMap: 当前文件提取到的key-value\r\n  // currentFilePath: 当前遍历的文件路径\r\n  adjustKeyMap(allKeyValue, currentFileKeyMap, currentFilePath) {return allKeyValue}, // 对提取结构进行二次处理\r\n}\r\n```\r\n\r\n具体用法可以点击下方链接参考\r\n\r\n- [react 项目实战例子](https://github.com/IFreeOvO/i18n-cli/tree/master/examples/react-demo)\r\n\r\n- [vue 项目实战例子](https://github.com/IFreeOvO/i18n-cli/tree/master/examples/vue-demo)\r\n\r\n## 举几个栗子 🌰\r\n\r\n1. 跳过转换阶段，仅将中文语言包翻译成其他语言(例如英语、中文繁体等)\r\n\r\n```\r\nit --skip-extract --locales en zh-CHT\r\n```\r\n\r\n2. 跳过自动翻译阶段，仅进行 i18n 转换，并将提取到的 key-value 提取到中文语言包\r\n\r\n```\r\nit --skip-translate\r\n```\r\n\r\n3. 使用自定义配置进行 i18n 转换\r\n\r\n```\r\nit -c ./i18n.config.js\r\n```\r\n\r\n4. 指定需要自动翻译的语言(例如日语)，并指定项目里中文语言包的位置(相对于命令的执行位置)。命令执行时会自动根据中文语言包，将日语翻译出来并存入到`ja.json`文件中\r\n\r\n```\r\nit --localePath ./locales/zh-CN.json  --locales ja\r\n```\r\n\r\n5. 指定需要转换的文件目录，并增量提取中文。例如项目的 src 目录有 A、B、C 三个文件夹，里面分别有 A,B,C 三个文件，其中 A、B 已经替换过 i18n，此时执行命令，会将 C 文件的中文进行 i18n 替换，并将新提取到的中文追加到原有的中文语言包里\r\n\r\n```\r\nit --incremental -i ./src/C\r\n```\r\n\r\n6. 导入翻译的 excel 表格，并自动生成对应语言包的 json 文件\r\n\r\nexcel 的表头格式举例`['字典key', 'zh-CN', 'en-US']`\r\n\r\n```\r\n# 方式1，根据指令参数导入\r\nit loadExcel --excelPath ./demo.xlsx --localePath ./locales/zh-CN.json\r\n# 方式2，根据本地自定义配置导入\r\nit loadExcel -c ./i18n.config.js\r\n```\r\n\r\n1. 将翻译结果导出到 excel 表格\r\n\r\n```\r\n# 方式1，根据指令参数\r\nit --skip-extract --skip-translate --exportExcel --excelPath ./demo.xlsx\r\n# 方式2，根据本地配置\r\nit --skip-extract --skip-translate  -c ./i18n.config.js\r\n```\r\n\r\n## 转换效果示例\r\n\r\n#### react 转换示例\r\n\r\n转换前\r\n\r\n```jsx\r\nimport { useState } from 'react'\r\n\r\n/*i18n-ignore*/\r\nconst b = '被忽略提取的文案'\r\n\r\nfunction Example() {\r\n  const [msg, setMsg] = useState('你好')\r\n\r\n  return (\r\n    <div>\r\n      <p title=\"标题\">{msg + '呵呵'}</p>\r\n      <button onClick={() => setMsg(msg + '啊')}>点击</button>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default Example\r\n```\r\n\r\n转换后\r\n\r\n```jsx\r\nimport { t } from 'i18n'\r\nimport { useState } from 'react'\r\n\r\n/*i18n-ignore*/\r\nconst b = '被忽略提取的文案'\r\n\r\nfunction Example() {\r\n  const [msg, setMsg] = useState(t('你好'))\r\n  return (\r\n    <div>\r\n      <p title={t('标题')}>{msg + t('呵呵')}</p>\r\n      <button onClick={() => setMsg(msg + t('啊'))}>{t('点击')}</button>\r\n    </div>\r\n  )\r\n}\r\nexport default Example\r\n```\r\n\r\n#### vue 转换示例\r\n\r\n转换前\r\n\r\n```vue\r\n<template>\r\n  <div :label=\"'标签'\" :title=\"1 + '标题'\">\r\n    <p title=\"测试注释\">内容</p>\r\n    <button @click=\"handleClick('信息')\">点击</button>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n  methods: {\r\n    handleClick() {\r\n      console.log('点了')\r\n    },\r\n  },\r\n}\r\n</script>\r\n```\r\n\r\n转换后\r\n\r\n```vue\r\n<template>\r\n  <div :label=\"$t('标签')\" :title=\"1 + $t('标题')\">\r\n    <p :title=\"$t('测试注释')\">{{ $t('内容') }}</p>\r\n    <button @click=\"handleClick($t('信息'))\">{{ $t('点击') }}</button>\r\n  </div>\r\n</template>\r\n<script>\r\nexport default {\r\n  methods: {\r\n    handleClick() {\r\n      console.log(this.$t('点了'))\r\n    },\r\n  },\r\n}\r\n</script>\r\n```\r\n\r\n## 注意事项\r\n\r\n- 自定义配置里的 js 规则，除了用于处理 js 文件，也会应用到 vue 的模版和 vue`script`标签的非`export default`部分。例如\r\n\r\n```js\r\n<script>import a from 'a.js' function b() {a('哈哈哈')}</script>\r\n```\r\n\r\n- 自定义配置里的 vue 的`functionNameInScript`规则，仅针对`script`标签的`export default`部分生效。例如\r\n\r\n```vue\r\n<script>\r\nexport default {\r\n  data: {\r\n    return {\r\n      a: '测试'\r\n    }\r\n  }\r\n}\r\n</script>\r\n```\r\n\r\n- 代码转换后，新插入的导入语句中`import { t } from \"i18n\"`的`i18n`是通过打包工具(如`webpack`)的别名`alias`功能实现的。开发者可以结合自身需求自己定义，通过别名把`i18n`文件指向一个绝对路径\r\n\r\n- 导入语句中`import { t } from \"i18n\"`，其中的`i18n`文件内容要自己去封装实现\r\n\r\n- 翻译后，命令行工具自动去掉提取汉字里的回车，这是因为回车会影响翻译准确度。所有原文里如果有回车，请自行校对，在语言包里手动补上回车\r\n\r\n## 开源许可证\r\n\r\n[MIT](./LICENSE)\r\n","readmeFilename":"README.md"}