Lingo.dev + .json-dictionary

Lingo.dev CLI 翻译 JSON 文件,其中每个可翻译的字符串在单个对象中包含多个语言区域键。与将不同语言区域分离到不同文件的标准 JSON 格式不同,json-dictionary 将所有翻译与语言区域特定的键存储在一起,例如 {"en": "Hello", "es": "Hola"}

快速设置

创建一个 i18n.json 配置文件:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de"]
  },
  "buckets": {
    "json-dictionary": {
      "include": ["content/pages.json"]
    }
  }
}

文件结构

json-dictionary 格式将翻译存储为带有语言区域键的嵌套对象:

{
  "title": {
    "en": "Welcome to our site",
    "es": "Bienvenido a nuestro sitio"
  },
  "navigation": {
    "home": {
      "en": "Home",
      "es": "Inicio"
    },
    "about": {
      "en": "About Us",
      "es": "Acerca de nosotros"
    }
  },
  "staticValue": "This won't be translated",
  "pages": [
    {
      "title": {
        "en": "Page One",
        "es": "Página Uno"
      }
    }
  ]
}

翻译一切

npx lingo.dev@latest i18n

CLI 会自动:

  • 仅提取可翻译的对象(包含语言区域键的对象)
  • 保留不可翻译的值不变
  • 在现有键旁边添加目标语言区域键
  • 保持源语言区域键的顺序(源语言优先,其他按字母顺序排列)

键行为

可翻译检测:只有包含源语言区域键的对象才会被视为可翻译。普通字符串、数字、布尔值以及不包含语言区域键的对象将保持不变。

键顺序:添加翻译时,源语言区域键首先出现,随后是按字母顺序排列的其他语言区域键:

{
  "message": {
    "en": "Original text",
    "de": "Deutscher Text",
    "es": "Texto en español",
    "fr": "Texte français"
  }
}

嵌套支持:支持深度嵌套结构和包含可翻译对象的数组。

高级配置

排除文件

"json-dictionary": {
  "include": ["content/*.json"],
  "exclude": ["content/config.json"]
}