1.40.0 • Published 2 months ago

@konghayao/i18n-cli v1.40.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

Lobe i18n 是一款使用 ChatGPT 自动化 i18n 的 CLI 流程工具

English ・ 简体中文 ・ Changelog · Report Bug · Request Feature

npm.io

TOC

✨ 特性

  • 🤖 利用 ChatGPT 实现 i18n 翻译自动化
  • ✂️ 支持大型文件自动分割,不必担心 ChatGPT token 限制
  • ♻️ 支持 i18n 增量更新,按照 entry 文件自动提取新增内容
  • 🗂️ 支持单文件模式 en_US.json 和文件夹 en_US/common.json 模式,完美配合 i18next 使用
  • 🌲 支持 扁平树状 locale 文件
  • 🛠️ 支持自定义 OpenAI 模型、API 代理、temperature、topP
  • 📝 支持 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 请求基础 URLhttps://api.chatanywhere.cn/v1默认值:https://api.openai.com/v1

🌏 Locale 配置

属性名称必填类型默认值描述
entry*string-入口文件或文件夹
entryLocale*string-作为翻译参考的语言
modelNamestringgpt-3.5-turbo使用的模型
output*string-存储本地化文件的位置
outputLocales*string[][]需要进行翻译的所有语言
referencestring-提供一些上下文以获得更准确的翻译
splitTokennumber-按令牌分割本地化 JSON 文件,默认自动计算
temperaturenumber0使用的采样温度
topPnumber1生成过程中的核采样方法概率阈值,取值越大生成的随机性越高
concurrencynumber5同时并发的队列请求数量
experimentalexperimental{}实验性功能,见下文
markdownmarkdown{}markdown 配置说明

experimental

属性名称必填类型默认值描述
jsonModebooleanfalse开启 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
entryLocalestring继承同父级作为翻译参考的语言
entryExtensionstring.md入口文件扩展名
excludestring[][]需要过滤的文件,支持 glob
outputLocalesstring[]继承同父级需要进行翻译的所有语言
outputExtensionsfunction(locale) => '.{locale}.md'输出文件的扩展名生成
modestring,mdast,functionstring翻译的模式选择,解释见下文
translateCodebooleanfalsemdast 下是否翻译代码块,其他模式无效
includeMatterbooleanfalse是否翻译 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


📝 License

Copyright © 2023 LobeHub. This project is MIT licensed.