存储桶

在 Lingo.dev CLI 中配置存储桶

简介

i18n.json 文件中,buckets 属性定义了:

  • 用于从文件中提取可本地化内容的解析器
  • 文件系统中可本地化内容的位置
  • 某些存储桶特定功能,例如 key locking

配置存储桶是使用 Lingo.dev CLI 搭建翻译流水线的关键步骤。

存储桶类型

Lingo.dev CLI 兼容多种行业标准文件格式(以及部分非标准格式)。每种格式都对应特定类型的存储桶。

存储桶类型通常与文件格式同义,但并非总是一一对应。例如,"json""json-dictionary" 存储桶都处理 JSON 文件中的可本地化内容,但 CLI 期望文件结构不同,因此存储桶也不同。

输出模式

在本地化内容时,部分存储桶会直接修改源内容所在的文件,而其他存储桶则会为每个目标语言创建单独的文件

出现这种行为差异的原因在于,不同存储桶采用哪种方式更为合理。没有一种通用的正确方式适用于所有存储桶类型。

例如,使用 CSV 存储桶时,.csv 文件会被直接修改。这是因为 CSV 文件通常会在同一个文件中、不同的列中存储每个语言的本地化内容:

KEY,en,es
welcome_message,Welcome to our application,Bienvenido a nuestra aplicación

而使用 Markdown 存储桶时,本地化内容会输出到单独的文件,因为通常不会将所有语言版本存储在同一个文件中。

理解这一点很重要,原因有以下几点:

  • 不同的 bucket 行为方式不同,这一点并不直观。
  • 你需要根据文件输出方式,分别定义 includeexclude 模式。

创建 bucket

要创建 bucket,请在 buckets 对象中添加一个条目,位于 i18n.json 文件中:

{
  "buckets": {
    "json": {}
  }
}

每个 key 必须对应一个受支持的 bucket 类型,而 value 必须是包含该 bucket 有效配置的对象。

buckets 属性必须至少有一个有效条目。

包含文件

bucket 至少需要有一个 include 属性,用于定义需要本地化的内容:

{
  "buckets": {
    "json": {
      "include": []
    }
  }
}

该属性必须是字符串数组。

每个字符串可以是以下之一:

  • 文件路径(例如,"some/dir/labels.json"
  • glob 模式(例如,"some/dir/*.json"

这些值始终是相对于 i18n.json 文件的。

[locale] 占位符

当 bucket 将本地化内容输出到单独文件(即不修改现有文件)时,include 模式中必须包含一个特殊的 [locale] 占位符:

{
  "buckets": {
    "json": {
      "include": ["[locale]/*.mdx"]
    }
  }
}

此占位符会在运行时被替换,并影响 CLI 的以下行为:

  • 查找源内容的位置
  • 输出本地化内容的位置

例如,如果源语言环境为 "en",目标语言环境为 "es",那么 [locale]/*.mdx 会在 en/ 目录下查找所有 MDX 文件,并将本地化文件输出到 es/ 目录。

[locale] 占位符的位置无关紧要,以下所有模式都是有效的:

  • content/[locale]/*.mdx
  • [locale]/*.mdx
  • *.[locale].mdx

递归 glob 模式

Lingo.dev CLI 不支持递归 glob 模式。这意味着像 "**/*.json" 这样的模式无法使用。如果你尝试配置递归 glob 模式,将会抛出错误。

文件扩展名

include 模式中,文件扩展名无关紧要。Lingo.dev CLI 会根据 bucket 类型尝试解析指定的所有文件,无论扩展名如何。

排除文件

除了 include 模式外,buckets 还支持 exclude 模式,用于从本地化中排除文件路径或 glob 模式:

{
  "buckets": {
    "json": {
      "include": ["[locale]/*.mdx"],
      "exclude": ["[locale]/ignored/*.mdx"],
    }
  }
}

这些模式遵循与 include 模式相同的规则。

Bucket 专属功能

某些 bucket 具有其他 bucket 不具备的特定功能。这通常是因为这些功能只在相关 bucket 的上下文中才有意义。

这些 bucket 专属功能包括:

如需了解更多这些功能,请参阅相关文档链接。