添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

工作流程和初衷

作为中文开发者,我们更习惯在中文环境下编程,并且也少有程序员能够掌握多门语言,尤其是比如日语、泰语、法语这类小语种。

因此,我们的程序主要以中文为第一公民。但是,如果我们的程序需要支持多语言,那么我们就需要将中文的内容翻译成其他语言,这就是 bbt 的初衷。

bbt 的工作流程如下:

  • 收集所有的翻译内容 - ( npx bbt collect )
  • 将翻译内容导出到 Excel(excel 文件或者 CSV) 表格中
  • 将 excel 表格发送给翻译人员, 或者程序员通过翻译工具翻译 - ( npx bbt translate )
  • 翻译人员翻译或校准完成之后,将 excel 表格发送给开发人员
  • 开发人员将 excel 表格导入到项目中
  • 开发人员将 excel 表格回写到语言包中 - ( npx bbt write )
  • $ npm install @wakeadmin/bbt  // or
    $ yarn add @wakeadmin/bbt  // or
    $ pnpm add @wakeadmin/bbt
    $ npx bbt [command] <options>

    bbt init

    初始化,将生成配置文件

    $ npx bbt init

    执行 init 命令之后, 会生成 bbt.config.js 配置文件。默认配置如下:

    module.exports = {
      langs: ['zh', 'en'],
      test: '.*\\.tr$',
      exclude: ['node_modules'],
    

    langs 是我们需要支持的语言,这是一个字符串数组,其中数组的第一项为基准语言,也就是我们会通过基准语言来:

  • 作为基准翻译到其他语言
  • 已基准语言的语言包为基础,对比和推断需要翻译的其他语言包
  • 查看更多配置项

    bbt collect

    收集所有的符合要求的语言包,并将信息提取到 bbt.csv 中,方便翻译人员进行翻译和校准。当然你也可以使用 bbt translate 自动翻译

    shortName description default required 'google' | 'deepl' | 'chatgpt' 使用哪个翻译 API, 如果 bbt.config.js 自定义了 translator,则以配置为准 'google' false --proxy string 正向代理地址 , 如果为空的话,会通过环境变量进行获取 false --force boolean 是否强制进行翻译, 默认情况下只会翻按需翻译(即无翻译内容时翻译), 请谨慎开启 false false --model 'gpt-4' | 'gpt-3.5-turbo' 使用chatgpt进行翻译时所使用的模型 'gpt-3.5-turbo' false --api-key string 翻译服务的API Key , 如果为空的话,会通过环境变量进行获取 false --base-url string 反向代理地址, 如果为空的话,会通过环境变量进行获取 false

    bbt 支持通过 Google、DeepL、ChatGPT 等方案进行初步的机器翻译。如果你想使用其他的翻译服务,可以通过自定义插件的方式进行扩展.

    Google 翻译

    默认使用的就是 Google 翻译

    npx bbt translate -t google --api-key GOOGLE_TRANSLATION_API_KEY
    

    可以通过 --api-key 选项或者 BBT_GOOGLE_API_KEY 环境变量来配置 Google 翻译的 API KEY。

    我们也建议你将环境变量配置在用户目录下的 .profile 或者 .bashrc 这类文件中,这样可以避免每次都需要输入 API KEY。

    Google 翻译需要依赖科学上网,需要自行解决。有两种代理配置方式:

  • 通过 --proxy 选项或者 BBT_PROXY 环境变量来配置正向代理地址,bbt 会自动将请求转发到代理地址上
  • 通过终端代理的方式进行配置,例如:export http_proxy=YOU_PROXY_ADDRESS

    和 Google 翻译类似,需要通过 --api-key 选项或者 BBT_DEEPL_API_KEY 环境变量来配置 DeepL 翻译的 API KEY。

    ChatGPT 翻译(实验性)

    --model 确定使用的 ChatGPT 模型版本。默认为 gpt-3.5-turbo --base-urlBBT_OPEN_AI_BASE_URL 环境变量。如果你自己搭建了 ChatGPT 的代理服务,可以通过这个选项来配置
  • --api-keyBBT_OPEN_AI_API_KEY 配置 OPEN AI 的 API KEY

    有时候国际化资源并不是使用JSON格式, 因此可以通过plugins.parser来自定义文件的解析方式

    export interface FileParser<T = any> {
      parse(str: string): Record<string, T>;
      stringify(record: Record<string, T>): string;
    

    example

    zh.tr

    hello 你好
    world 世界
    

    bbt.config.js

    module.exports = {
      // ...other
      plugins: {
        parser: {
          parse(content) {
            return Object.fromEntries(content.split(/\n/).map(str => str.split(/\s/)));
          stringify(record) {
            return Object.entries(record)
              .map(arr => arr.join(' '))
              .join('\n');
    

    自定义翻译 API

    * @param record - 需要翻译的数据源 * @param target - 翻译的目标语言 * @param sourceLanguage - 数据源原本的语言 * @returns Observable<TranslatedList<string>> | Promise<TranslatedList<string>>; translator: (record: Record<string, string>, target: string, sourceLanguage: string) => Observable<TranslatedList<string>> | Promise<TranslatedList<string>>;

    example

    // bbt.config.js
    module.exports = {
      // other
      plugins: {
        translator: (textMap, target, sourceLanguage) => {
          return Promise.resolve(
            Object.entries(textMap).map(([key, value]) => ({
              target,
              key,
              translatedText: `${value} - ${target}`,
            }))
    

    License