添加语言

Lingo.dev CLI 通过向 i18n.json 配置中添加目标语言区域并运行一个命令,使得将项目扩展到新语言变得简单。

当您添加新语言时,CLI 会为新语言区域生成完整的翻译文件,同时保留所有现有翻译并维护相同的内容指纹系统。

添加您的第一个新语言

要添加新语言,请更新 i18n.json 配置中的 targets 数组:

原始配置:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr"]
  },
  "buckets": {
    "json": {
      "include": ["locales/[locale].json"]
    }
  }
}

添加德语后的更新配置:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de"]
  },
  "buckets": {
    "json": {
      "include": ["locales/[locale].json"]
    }
  }
}

运行 npx lingo.dev@latest i18n 会创建新的德语翻译文件:

locales/
  en.json    (源文件 - 未更改)
  es.json    (现有文件 - 未更改)
  fr.json    (现有文件 - 未更改)
  de.json    (新文件 - 完全翻译)

新语言生成的工作原理

Lingo.dev CLI 对新语言和现有语言的处理方式不同:

  1. 现有语言 — 仅生成缺失的翻译
  2. 新语言 — 从头开始创建完整的翻译文件

带有部分现有翻译的示例:

// locales/en.json (源文件)
{
  "welcome": "Welcome",
  "button.save": "Save",
  "error.network": "Network error"
}

// locales/es.json (现有文件,缺少翻译)
{
  "welcome": "Bienvenido"
}

添加德语并运行 CLI 后:

// locales/es.json (填补缺失部分)
{
  "welcome": "Bienvenido",
  "button.save": "Guardar",
  "error.network": "Error de red"
}

// locales/de.json (完整的新文件)
{
  "welcome": "Willkommen",
  "button.save": "Speichern",
  "error.network": "Netzwerkfehler"
}

添加多种语言

您可以同时添加多种语言:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de", "ja", "zh"]
  }
}

CLI 会处理所有新增语言,为每个新语言区域创建完整的翻译文件。

区域变体

Lingo.dev CLI 支持使用 BCP 47 语言标签的区域语言变体:

{
  "locale": {
    "source": "en-US",
    "targets": ["en-GB", "es-ES", "es-MX", "fr-FR", "fr-CA"]
  }
}

这将为每个区域变体生成独立的翻译文件,考虑术语、拼写和文化背景的差异。

文件结构影响

CLI 会根据您的存储模式创建新文件。对于不同的文件格式:

JSON 存储:

locales/[locale].json → locales/de.json, locales/ja.json

Markdown 存储:

content/[locale]/*.md → content/de/*.md, content/ja/*.md

嵌套结构:

app/[locale]/messages.json → app/de/messages.json, app/ja/messages.json

添加特定语言

您可以使用 --locale 标志为特定的新语言生成翻译:

npx lingo.dev@latest i18n --locale de

这将仅生成德语翻译,其他新语言可以稍后处理。

删除语言

要删除某种语言,只需将其从 targets 数组中移除。CLI 不会删除现有文件,但会停止处理该语言区域:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr"]
  }
}

如果需要,您可以手动删除相应的翻译文件。