UNPKG

i18n-xy

Version:

自动提取React项目中的中文字符串并进行国际化的CLI工具

199 lines (150 loc) 4.05 kB
# i18n-xy 一个自动提取React项目中的中文字符串并进行国际化的CLI工具。支持智能字符串提取、AST代码转换、key生成、自动翻译等功能。 ## ✨ 特性 - 🚀 **自动提取**: 智能识别并提取JavaScript/TypeScript/JSX/TSX文件中的中文字符串 - 🔄 **代码转换**: 使用AST技术精确替换中文字符串为国际化函数调用 - 🎯 **智能Key生成**: 支持拼音转换、哈希生成、重复Key检测等多种策略 - 🌐 **自动翻译**: 集成百度翻译API,支持批量翻译国际化文件 - ⚙️ **灵活配置**: 丰富的配置选项,满足不同项目需求 - 📁 **文件管理**: 支持临时目录处理,避免直接修改源文件 - 🔧 **自动导入**: 可配置自动添加国际化函数导入语句 - 📊 **详细日志**: 多级别日志输出,方便调试和监控 ## 📦 安装 ```bash # 全局安装 npm install -g i18n-xy # 或使用pnpm pnpm add -g i18n-xy # 或使用yarn yarn global add i18n-xy ``` ## 🚀 快速开始 ### 1. 初始化配置 ```bash # 初始化配置文件 i18n-xy init # 或使用简短命令 i18nx init ``` ### 2. 提取中文字符串 ```bash # 使用默认配置提取 i18n-xy extract # 指定配置文件 i18n-xy extract -c ./my-config.json ``` ### 3. 翻译国际化文件 ```bash # 批量翻译 i18n-xy translate --batch # 翻译单个文本 i18n-xy translate --test -f zh -t en -i "你好世界" ``` ## ⚙️ 基本配置 配置文件示例 (`i18n.config.json`): ```json { "locale": "zh-CN", "fallbackLocale": "en-US", "outputDir": "locales", "include": [ "src/**/*.{js,jsx,ts,tsx}", "pages/**/*.{js,jsx,ts,tsx}", "components/**/*.{js,jsx,ts,tsx}" ], "exclude": [ "node_modules/**", "dist/**", "build/**", "**/*.test.{js,jsx,ts,tsx}" ], "replacement": { "functionName": "$t", "autoImport": { "enabled": true, "insertPosition": "afterImports" } } } ``` ### 核心配置项说明 | 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `locale` | string | `"zh-CN"` | 源语言 | | `outputDir` | string | `"locales"` | 国际化文件输出目录 | | `include` | string[] | `["src/**/*.{js,jsx,ts,tsx}"]` | 要处理的文件匹配模式 | | `exclude` | string[] | `["node_modules/**"]` | 要排除的文件匹配模式 | | `replacement.functionName` | string | `"$t"` | 替换函数名 | ## 🛠️ 开发 ### 环境要求 - Node.js >= 16.0.0 - npm/pnpm/yarn ### 本地开发 ```bash # 克隆项目 git clone <repository-url> cd i18n-xy # 安装依赖 pnpm install # 开发模式 pnpm dev # 构建 pnpm build # 代码检查 pnpm lint # 类型检查 pnpm type-check ``` ### 项目结构 ``` src/ ├── ast/ # AST处理核心逻辑 ├── cli.ts # CLI命令行入口 ├── config/ # 配置管理 ├── translation/ # 翻译功能 ├── utils/ # 工具函数 └── vars/ # 变量管理 ``` ## 📚 使用示例 ### 处理前的代码 ```javascript function Welcome({ name }) { return ( <div> <h1>欢迎使用我们的系统</h1> <p>用户:{name},您好!</p> <button onClick={handleClick}>点击开始</button> </div> ); } ``` ### 处理后的代码 ```javascript import { useTranslation } from 'react-i18next'; function Welcome({ name }) { const { t: $t } = useTranslation(); return ( <div> <h1>{$t("huan_ying_shi_yong_wo_men_de_xi_tong")}</h1> <p>{$t("yong_hu")}:{name},{$t("nin_hao")}!</p> <button onClick={handleClick}>{$t("dian_ji_kai_shi")}</button> </div> ); } ``` ### 生成的国际化文件 `locales/zh-CN.json`: ```json { "huan_ying_shi_yong_wo_men_de_xi_tong": "欢迎使用我们的系统", "yong_hu": "用户", "nin_hao": "您好", "dian_ji_kai_shi": "点击开始" } ``` ## 📝 许可证 ISC ## 🤝 贡献 欢迎提交Issues和Pull Requests! --- 更多详细配置和高级功能请查看 [文档](./docs/)。