npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@konghayao/i18n-cli

v1.40.0

Published

Lobe i18n is a CLI tool that automate translate your i18n localization with AI

Downloads

29

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


📝 License

Copyright © 2023 LobeHub. This project is MIT licensed.