存储桶

在 Lingo.dev CLI 中配置存储桶

介绍

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

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

配置 buckets 是使用 Lingo.dev CLI 设置翻译流程的关键步骤。

Bucket 类型

Lingo.dev CLI 兼容多种行业标准文件格式(以及一些非标准格式)。每种格式都与特定类型的 bucket 相关联。

Bucket 类型通常与文件格式同义,但并不总是一一对应。例如,"json""json-dictionary" buckets 都处理 JSON 文件中的可本地化内容,但由于 CLI 期望文件的结构不同,这些 buckets 是独立的。

输出模式

在本地化内容时,某些 buckets 会修改源内容所在的文件,而其他 buckets 会为每个目标语言创建单独的文件

这种行为差异的原因是,根据 bucket 的不同,任一选项可能是最合理的选择。没有一种单一的正确选项适用于所有 bucket 类型。

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

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

另一方面,当使用 Markdown bucket 时,本地化内容会输出到单独的文件中,因为通常不会在单个文件中存储所有语言的本地化变体。

理解这一点很重要,原因如下:

  • 不同 buckets 的行为差异并不显而易见。
  • 您需要根据文件的输出方式不同来定义 includeexclude 模式。

创建存储桶

要创建存储桶,请在 i18n.json 文件的 buckets 对象中添加一个条目:

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

每个键必须对应一个支持的存储桶类型,而值必须是包含该存储桶有效配置的对象。

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

包含文件

存储桶至少必须有一个 include 属性,用于定义需要本地化的内容:

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

此属性必须是一个字符串数组。

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

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

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

[locale] 占位符

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

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

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

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

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

[locale] 占位符的位置并不重要,这意味着以下模式都是有效的:

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

递归通配符模式

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

文件扩展名

include 模式中,文件扩展名无关紧要。Lingo.dev CLI 将根据存储桶类型尝试解析指定的文件,而不考虑扩展名。

排除文件

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

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

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

存储桶特定功能

某些存储桶具有其他存储桶没有的特定功能。这通常是因为这些功能仅在这些存储桶的上下文中才有逻辑意义。

存储桶特定功能包括:

要了解更多关于这些功能的信息,请参阅链接的文档。