添加语言

Lingo.dev CLI 让您只需在 i18n.json 配置中添加目标语言,并运行一条命令,即可轻松将项目扩展到新语言。

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

添加您的第一个新语言

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

原始配置:

{
  "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 run 会创建新的德语翻译文件:

locales/
  en.json    (source - unchanged)
  es.json    (existing - unchanged)
  fr.json    (existing - unchanged)
  de.json    (new - fully translated)

新语言生成机制

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

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

部分已有翻译的示例:

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

// locales/es.json (existing with missing translations)
{
  "welcome": "Bienvenido"
}

添加德语并运行 CLI 后:

// locales/es.json (gaps filled)
{
  "welcome": "Bienvenido",
  "button.save": "Guardar",
  "error.network": "Error de red"
}

// locales/de.json (complete new file)
{
  "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 会根据你的 bucket 模式创建新文件。对于不同的文件格式:

JSON bucket:

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

Markdown bucket:

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

嵌套结构:

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

目标语言添加

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

npx lingo.dev@latest run --target-locale de

这只会生成德语翻译,其他新语言可稍后处理。

语言移除

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

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

如有需要,你可以手动删除对应的翻译文件。