# gt: General Translation CLI tool: .stringsdict
URL: https://generaltranslation.com/zh/docs/cli/reference/formats/dot-stringsdict-files.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 使用 General Translation CLI 翻译 .stringsdict 文件。.stringsdict 文件格式的 API 参考。

CLI 可翻译 `.stringsdict` 文件，即承载应用复数规则的 XML 属性列表。每个区域设置都有各自的文件，与对应的 `.strings` 表一同存放在 `<locale>.lproj` 目录中。翻译会保留 plist 结构、格式键和格式说明符，并为每个目标区域设置重建复数形式。

*注意：`.stringsdict` 属于 Apple 旧版本地化布局，与 [`.strings`](/docs/cli/reference/formats/dot-strings-files) 配套使用。Xcode 的 String Catalog 迁移会将两者合并为单个 [`.xcstrings` 目录](/docs/cli/reference/formats/xcstrings-files)并将其删除，因此一个项目只会使用其中一种布局。*

## 配置 [#config]

在 `files` 下添加一个 `dotStringsdict` 条目，其中包含由 glob 模式组成的 `include` 数组。将 `[locale]` 占位符放在 `.lproj` 目录名中，这样 CLI 才能找到源文件，并将翻译保存到正确的路径。

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["pl", "ar", "zh"],
  "files": {
    "dotStringsdict": {
      "include": ["Resources/[locale].lproj/Localizable.stringsdict"]
    }
  }
}
```

使用此配置时，CLI 会读取 `Resources/en.lproj/Localizable.stringsdict`，并将翻译后的文件写入 `Resources/pl.lproj/`、`Resources/ar.lproj/` 和 `Resources/zh.lproj/`。有关全部文件键，请参阅[配置参考](/docs/cli/reference/config#files)。

`dotStringsdict` 键需要 `gt` 2.18.1 或更高版本。

## 文件编码 [#encoding]

CLI 在读取 `.stringsdict` 文件时会检测 UTF-8、UTF-16 和 UTF-32 字节顺序标记 (BOM) ，将解码后的 XML 发送给 API，然后以源文件的原始编码写入每份翻译。不带字节顺序标记的文件一律按 UTF-8 处理。

如果源文件在上传后被移动或删除，只要存在翻译后的文件，CLI 就会沿用该文件的编码。

<Callout type="info">
  **v2.20.0 变更：** CLI 现在会保留源文件的编码，而不再把 UTF-16 文件重写为 UTF-8，也不再将其编码后的字节直接交给 XML 解析器。
</Callout>

## 输出行为 [#output]

CLI 会以 XML 字符引用的形式保留属性列表键和值中的回车符。

## 与 .strings 表一起翻译 [#pairing]

`.stringsdict` 文件仅涵盖需要复数规则的键，该区域设置的其余文本仍保存在其 `.strings` 表中。将两类键都配置好，一次 run 即可覆盖整个 `.lproj` 目录：

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["pl", "ar", "zh"],
  "files": {
    "dotStrings": {
      "include": ["Resources/[locale].lproj/*.strings"]
    },
    "dotStringsdict": {
      "include": ["Resources/[locale].lproj/*.stringsdict"]
    }
  }
}
```

## 复数类别 [#plurals]

翻译后的文件所带有的复数类别，是目标语言实际使用的那一组，很少与源语言相同。英语只在 `one` 和 `other` 之间选择，而波兰语对整数计数使用三种形式，阿拉伯语使用六种，中文只有一种。CLI 不会照搬源语言的类别，而是按目标语言的 CLDR 规则重新构建每个格式变量：

* 目标语言使用的类别始终会出现，因此波兰语译文会新增英语中原本没有的形式。
* 目标语言永远不会选中的类别会被移除，因此中文译文会收缩为单一的 `other` 形式。
* 源文件中显式写出的 `zero` 会被保留，即使某语言的 CLDR 规则中没有该类别，因为 Foundation 无论如何都会在计数为 0 时渲染它。

由于类别集合会发生变化，不要指望翻译后的文件与源文件拥有相同的键。应改为在若干有代表性的计数下比较渲染输出。

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
