@konghayao/i18n-cli
v1.40.0
Published
Lobe i18n is a CLI tool that automate translate your i18n localization with AI
Downloads
11
Readme
Lobe i18n 是一款使用 ChatGPT 自动化 i18n 的 CLI 流程工具
English ・ 简体中文 ・ Changelog · Report Bug · Request Feature
TOC
✨ 特性
- [x] 🤖 利用 ChatGPT 实现 i18n 翻译自动化
- [x] ✂️ 支持大型文件自动分割,不必担心 ChatGPT token 限制
- [x] ♻️ 支持 i18n 增量更新,按照
entry
文件自动提取新增内容 - [x] 🗂️ 支持单文件模式
en_US.json
和文件夹en_US/common.json
模式,完美配合i18next
使用 - [x] 🌲 支持
扁平
和树状
locale 文件 - [x] 🛠️ 支持自定义 OpenAI 模型、API 代理、temperature、topP
- [x] 📝 支持
Markdown
i18n 翻译自动化
📦 安装
要安装 Lobe i18n,请运行以下命令:
npm install -g @lobehub/i18n-cli
[!IMPORTANT]
请确保环境中Node.js
版本 >= 18
🤯 使用
要初始化配置 Lobe i8n,请运行以下命令:
$ lobe-i18n -o # 或使用完整标志 --option
[!IMPORTANT]
要使用 AI 自动生成,需要在设置中填写 OpenAI 令牌
# 翻译 Locale 文件
$ lobe-i18n
## or
$ lobe-i18n locale
# 翻译 Markdown 文件
$ lobe-i18n md
# 同时运行 i18n 翻译和 markdown 翻译
$ lobe-i18n --with-md
# 指定配置文件
$ lobe-i18n -c './custom-config.js' # or use the full flag --config
配置
可以按照 cosmiconfig 格式任选配置方式
package.json
中的i18n
属性- 以 JSON 或 YAML 格式的
.i18nrc
文件 .i18nrc.json
、.i18nrc.yaml
、.i18nrc.yml
、.i18nrc.js
、.i18nrc.cjs
文件
[!TIP]
本项目提供了
defineConfig
安全定义方法可以从@lobehub/i18n-cli
中导入
环境变量
本项目提供了一些额外的配置项,使用环境变量进行设置:
| 环境变量 | 类型 | 描述 | 示例 |
| ------------------ | ---- | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| OPENAI_API_KEY
| 必选 | 这是你在 OpenAI 账户页面申请的 API 密钥 | sk-xxxxxx...xxxxxx
|
| OPENAI_PROXY_URL
| 可选 | 如果你手动配置了 OpenAI 接口代理,可以使用此配置项来覆盖默认的 OpenAI API 请求基础 URL | https://api.chatanywhere.cn/v1
默认值:https://api.openai.com/v1
|
🌏 Locale 配置
| 属性名称 | 必填 | 类型 | 默认值 | 描述 |
| ------------- | ---- | -------------- | --------------- | -------------------------------------------------------- |
| entry | *
| string
| - | 入口文件或文件夹 |
| entryLocale | *
| string
| - | 作为翻译参考的语言 |
| modelName | | string
| gpt-3.5-turbo
| 使用的模型 |
| output | *
| string
| - | 存储本地化文件的位置 |
| outputLocales | *
| string[]
| []
| 需要进行翻译的所有语言 |
| reference | | string
| - | 提供一些上下文以获得更准确的翻译 |
| splitToken | | number
| - | 按令牌分割本地化 JSON 文件,默认自动计算 |
| temperature | | number
| 0
| 使用的采样温度 |
| topP | | number
| 1
| 生成过程中的核采样方法概率阈值,取值越大生成的随机性越高 |
| concurrency | | number
| 5
| 同时并发的队列请求数量 |
| experimental | | experimental
| {}
| 实验性功能,见下文 |
| markdown | | markdown
| {}
| 见 markdown
配置说明 |
experimental
| 属性名称 | 必填 | 类型 | 默认值 | 描述 |
| -------- | ---- | --------- | ------- | -------------------------------------------------------------- |
| jsonMode | | boolean
| false
| 开启 gpt 强制 json 输出提升稳定性 (只支持 23 年 11 月后新模型) |
示例一 .i18nrc.js
const { defineConfig } = require('@lobehub/i18n-cli');
module.exports = defineConfig({
entry: 'locales/en_US.json',
entryLocale: 'en_US',
output: 'locales',
outputLocales: ['zh_CN', 'ja_JP'],
});
示例二 .i18nrc.json
{
"entry": "locales/en_US.json",
"entryLocale": "en_US",
"output": "locales",
"outputLocales": ["zh_CN", "ja_JP"]
}
示例三 package.json
{
"...": "...",
"i18n": {
"entry": "locales/en_US.json",
"entryLocale": "en_US",
"output": "locales",
"outputLocales": ["zh_CN", "ja_JP"]
}
}
文件结构选择
支持两种文件结构,分别为 单文件
和 文件夹
结构
单文件结构
单文件结构指的是所有语言的翻译都存储在一个文件中,如下所示:
- locales
- en_US.json
- ja_JP.json
- zh_CN.json
- ...
[!TIP]
单文件结构
需要在配置文件中将entry
配置为对应的 JSON 文件 示例
{
"entry": "locales/en.json",
"entryLocale": "en_US",
"output": "locales",
"outputLocales": ["zh_CN", "ja_JP"]
}
文件夹结构
文件夹结构指的是每个语言的翻译都存储在对应的语种文件夹中,如下所示:
- locales
- en_US
- common.json
- header.json
- subfolder
- ...
- ja_JP
- common.json
- header.json
- subfolder
- ...
- zh_CN
- common.json
- header.json
- subfolder
- ...
[!TIP]
文件夹结构
需要在配置文件中将entry
配置为对应的文件夹 示例
{
"entry": "locales/en_US",
"entryLocale": "en_US",
"output": "locales",
"outputLocales": ["zh_CN", "ja_JP"]
}
运行
使用 lobe-i18n
命令自动化生成 i18n 文件:
$ lobe-i18n
📝 Markdown 配置
| 属性名称 | 必填 | 类型 | 默认值 | 描述 |
| ---------------- | ---- | --------------------------- | ---------------------------- | ----------------------------------------- |
| entry | *
| string[]
| []
| 入口文件或文件夹,支持 glob
|
| entryLocale | | string
| 继承同父级 | 作为翻译参考的语言 |
| entryExtension | | string
| .md
| 入口文件扩展名 |
| exclude | | string[]
| []
| 需要过滤的文件,支持 glob
|
| outputLocales | | string[]
| 继承同父级 | 需要进行翻译的所有语言 |
| outputExtensions | | function
| (locale) => '.{locale}.md'
| 输出文件的扩展名生成 |
| mode | | string
,mdast
,function
| string
| 翻译的模式选择,解释见下文 |
| translateCode | | boolean
| false
| 在 mdast
下是否翻译代码块,其他模式无效 |
| includeMatter | | boolean
| false
| 是否翻译 front matter
|
outputExtensions
默认生成的翻译后文件名为 .{locale}.md
,可以通过 outputExtensions
自定义输出文件扩展名
[!NOTE]
在下方的示意中,入口文件扩展名为
.zh-CN.md
,但我们希望输出的en-US
翻译文件扩展名为.md
, 其他语言保持默认
module.exports = {
markdown: {
entry: ['./README.zh-CN.md', './docs/**/*.zh-CN.md'],
entryLocale: 'zh-CN',
entryExtension: '.zh-CN.md',
outputLocales: ['en-US', 'ja-JP'],
outputExtensions: (locale, { getDefaultExtension }) => {
if (locale === 'en-US') return '.md';
return getDefaultExtension(locale);
},
},
};
outputExtensions
完整支持的props
如下:
interface OutputExtensionsProps {
/**
* @description 输出的翻译文件的语种
*/
locale: string;
config: {
/**
* @description 输入的翻译文件的内容
*/
fileContent: string;
/**
* @description 输入的翻译文件的路径
*/
filePath: string;
/**
* @description 默认的扩展名生成方法
*/
getDefaultExtension: (locale: string) => string;
};
}
mode
mode
用于指定翻译的模式,支持二种模式和自定义生成模式
string
- 使用完整的markdown
内容进行翻译mdast
- 使用mdast
结构化解析文本,指翻译text value
文本内容,如需翻译代码块,需要开启translateCode
[!WARNING]
mdast
模式下,将会把需要翻译的内容缩减到最低限度,移除大部分 markdown 语法结构和链接, 此模式可大大减少 token 消耗,但是可能会导致翻译结果不准确。
文件结构
翻译后的文件将生成在和入口文件同级的目录下,在扩展名上会添加对应的语种后缀:
- README.md
- README.zh-CN.md
- docs
- usage.md
- usage.zh-CN.md
- subfolder
- ...
[!TIP]
运行
使用 lobe-i18n md
命令自动化生成 i18n 文件:
$ lobe-i18n md
⌨️ 本地开发
可以使用 Github Codespaces 进行在线开发:
或者,可以克隆存储库并运行以下命令进行本地开发:
$ git clone https://github.com/lobehub/lobe-cli-toolbox.git
$ cd lobe-cli-toolbox
$ bun install
$ cd packages/lobe-i18n
$ bun dev
🤝 参与贡献
我们非常欢迎各种形式的贡献。如果你对贡献代码感兴趣,可以查看我们的 GitHub Issues,大展身手,向我们展示你的奇思妙想。
🔗 链接
More Products
- 🤖 Lobe Chat - An open-source, extensible (Function Calling), high-performance chatbot framework. It supports one-click free deployment of your private ChatGPT/LLM web application.
- 🤯 Lobe Theme - The modern theme for stable diffusion webui, exquisite interface design, highly customizable UI, and efficiency boosting features.
Credits
- langchainjs - https://github.com/hwchase17/langchainjs
- ink - https://github.com/vadimdemedes/ink
- transmart - https://github.com/Quilljou/transmart