CLI 支持翻译六种文件格式。格式会根据文件扩展名自动推断;如需覆盖,可在 files[] 条目中设置 format。
| 格式 | 扩展名 | format 值 | 说明 |
|---|---|---|---|
| JSON | .json | json | 键值对。支持 键控制。 |
| JSONC | .jsonc | jsonc | 带注释的 JSON。注释会被保留,也可作为 translator notes 使用。 |
| Markdown | .md | md | 默认翻译正文;frontmatter 需手动启用。 |
| MDX | .mdx | mdx | Markdown + JSX。组件 props 需手动启用。 |
| Markdoc | .mdoc | markdoc | Markdown + 标签。支持 frontmatter 和标签属性。 |
| OpenAPI YAML | .yaml | yaml-openapi | OpenAPI 规范。请始终显式设置 format。 |
看完整流程
demo project 为每种格式都提供了一个示例文件,并附上对应所需的完整配置。使用 npx degit lingodotdev/lingo.dev/demo/new-cli my-lingo-demo 克隆项目后,运行一次 push 即可。
npx degit lingodotdev/lingo.dev/demo/new-cli my-lingo-demo
cd my-lingo-demoJSON 和 JSONC#
标准的键值对翻译。除非 键控制 另有指定,否则每个字符串值都会被翻译。
{ "pattern": "content/en/app.json", "lockedKeys": ["meta.version"] }JSONC 还会保留注释,引擎会将其读取为上下文信息——详见 translator notes。
{ "pattern": "content/en/settings.jsonc", "preservedKeys": ["featureFlags"] }Markdown、MDX 和 Markdoc#
默认会翻译正文内容。frontmatter 和嵌入的组件不会被翻译,除非你手动启用。
Frontmatter#
使用 translateFrontmatterFields 列出需要翻译的 frontmatter 字段:
{
"pattern": "content/en/guide.md",
"translateFrontmatterFields": ["title", "description"]
}MDX 组件 props#
在 MDX 中,可使用 translateComponentProps 为指定组件的指定 props 开启翻译:
{
"pattern": "content/en/landing.mdx",
"translateFrontmatterFields": ["title"],
"translateComponentProps": [{ "component": ["Hero", "Callout"], "props": ["title", "body"] }]
}这会翻译 <Hero> 和 <Callout> 上的 title 与 body props,其他所有 props 均保持不变。
Markdoc#
Markdoc 的工作方式与 Markdown 类似,同时保留 frontmatter 和标签属性:
{
"pattern": "content/en/changelog.mdoc",
"translateFrontmatterFields": ["title"]
}OpenAPI YAML#
通用 YAML 存在歧义,因此 OpenAPI 规范需要显式设置 format:
{ "pattern": "content/en/api.yaml", "format": "yaml-openapi" }引擎会翻译面向用户的字段(如摘要和描述),同时保留 schema 键、路径和 operation ID 不变。
输出路径#
目标文件会通过替换源路径模式中的 locale 段写入——content/en/app.json → content/de/app.json。请在路径中保留源 locale,这样 CLI 才知道目标文件应写到哪里。详见 Configuration。
正在从旧版 CLI 迁移?#
旧版 CLI 支持约 25 种格式(包括 CSV、PO、XLIFF、Android/Xcode strings、Flutter ARB、HTML 等)。当前 CLI 正在根据实际使用情况逐步补齐这些格式;在你的格式上线之前,可先参考 legacy CLI docs。
