翻译维护工作流程
有关一般文档命令(构建、部署、截图、README 生成),请参见文档工具。
概述
文档使用 Docusaurus i18n,以英语为默认区域设置。源文档位于 docs/;翻译写在 i18n/{locale}/ 下。支持的区域设置:en-GB(默认)、fr、de、es、pt-BR、hi、zh-Hans。
AI 翻译 用于应用程序 UI、Docusaurus markdown/JSON、SVG 资源 和 默认通知模板 由 仓库根目录 的 ai-i18n-tools 处理,在 ai-i18n-tools.config.json 中配置(不在 documentation/ 内)。运行翻译命令时设置 OPENROUTER_API_KEY。
要在同一台机器上尝试未发布的检出版本(默认 ../ai-i18n-tools),使用 pnpm i18n:tools --local 或 ./scripts/link-ai-i18n-tools.sh --local 切换依赖项。这将链接 CLI(pnpm i18n:*)和 ai-i18n-tools/runtime 导入。源代码更改后重新构建工具包(在该检出版本中执行 pnpm build)。使用 --remote 恢复最新的 npm 包。不要提交 link: 说明符。
当英文文档更改时
- 在
documentation/docs/中编辑源内容(仅限英文)。着陆页文案为documentation/src/landing/landing.html。 - Docusaurus UI 字符串(主题标签、导航栏等):如有需要,在
documentation/中运行pnpm write-translations,以便i18n/en/*.json提取新键。 - 标题 ID:
pnpm write-heading-ids(来自documentation/)。 - 在代码仓根目录执行翻译(或在
documentation/中使用以下快捷指令):pnpm i18n:extract— 从 Next.js 应用中的t('…')刷新src/locales/strings.json。pnpm i18n:translate:docs— 根据配置将 markdown、Docusaurus shell JSON 和着陆页 HTML 翻译为documentation/i18n/和documentation/src/landing/i18n/。pnpm i18n:translate:svg— 按配置翻译documentation/static/img下的 SVG。pnpm i18n:translate:json— 根据en-GB.json翻译src/locales/templates/中的默认通知模板。- 或运行全部任务:
pnpm i18n:translate。
- 构建:
cd documentation && pnpm build(所有区域设置)。
在 documentation/ 内部,相同的流程连接为 pnpm translate → 根目录 i18n:translate,加上 pnpm translate:docs、translate:ui、translate:svg、translate:status、i18n:extract、i18n:sync。
UI 复数
Next.js 应用中的基数复数使用 ai-i18n-tools,而不是手写的 _one / _other 键。
编写一个英文源字符串(通常是复数形式)并传递一个带有 plurals: true 和数字 count 的普通对象字面量:
t("{{count}} backups selected", { plurals: true, count: selectedBackups.size })
规则:
- 不要使用
item(s)模糊表达或count === 1 ? t('…') : t('…')配对。 - 独立的数字计数需要单独的
t()调用 — 一个复数轴不能同时处理两个数字(例如 1 成功和 2 失败)。连接片段:
`${t("Tested {{count}} connections:", { plurals: true, count: total })} ` +
`${t("{{count}} successful,", { plurals: true, count: successCount })} ` +
`${t("{{count}} failed", { plurals: true, count: failureCount })}`
- 非数字插值(名称、标签等)可以在同一个复数字符串中与
{{count}}一起使用。 pnpm i18n:extract标记目录行"plural": true。pnpm i18n:translate:ui填充 CLDR 形式并写入src/locales/en-GB.json(仅复数键)。src/i18n.ts和src/lib/i18n-server.ts将该文件作为sourcePluralFlatBundle加载,因此英语单复数在运行时解析。
默认通知模板
设置 → 模板 → 重置 从 src/locales/templates/{locale}.json 加载默认值(在 src/lib/default-notification-templates.ts 中连接)。
- 仅编辑
src/locales/templates/en-GB.json(英文源文件)。 - 从仓库根目录运行
pnpm i18n:translate:json(或pnpm i18n:translate)。 - 审查差异 — 占位符如
{backup_name}和{problem_table}必须保持不变;priority和tags在ai-i18n-tools.config.json的keyPolicy中被跳过。 - 运行
pnpm i18n:status查看 JSON 块覆盖率。
请参阅 ai-i18n-tools JSON 指南 了解标志(--locale、--force 等)。
着陆页 HTML
文档主页正文是一个单独的英文 HTML 文件,而不是 React 分区组件。
- 编辑
documentation/src/landing/landing.html(以及用于布局的documentation/src/landing/landing.css)。保留哈希 IDfeatures、dashboard、workflow、security和install。 - 从代码仓根目录运行
pnpm i18n:translate:docs(或从documentation/运行pnpm translate:docs)。 - 生成的副本将写入
documentation/src/landing/i18n/{locale}/landing.html。请勿手动编辑这些文件。
translate-docs 使用 HTML 页面 流水线:可见文本和 alt / title / aria-label 会被翻译;<pre> 和 <code> 保持英文。导航栏标签和页面标题保留在 Docusaurus Translate(homepage.nav.*、homepage.meta.*)中。
请勿在此文件中添加 data-i18n 标记,也不要将其列在 ui.sourceRoots 下。同一个 HTML 文件不能同时存在于文档流水线和界面字符串流水线中。
词汇表
- 用于文档的界面术语来自各个保留了
uiGlossary(默认值)的ui[]目录。Next.js 应用目录为src/locales/strings.json(由pnpm i18n:extract生成)。请勿设置glossary.uiGlossary;该键会被拒绝。 - 替代项位于
documentation/glossary-user.csv(配置中的glossary.userGlossary)。有关列格式,请参阅 ai-i18n-tools 术语表文档。 - 生成 CSV 模板:
pnpm i18n:glossary-generate(根目录)。
缓存
ai-i18n-tools 的翻译缓存位于仓库根目录下的 .translation-cache/(ai-i18n-tools.config.json 中的 cacheDir)。该缓存被 gitignore 忽略。当需要完全刷新时,请使用 pnpm i18n:status 和 CLI 的 --force / 缓存标志,具体请参考 ai-i18n-tools 文档。
标题 ID 和锚点
使用显式 ID 以便链接在不同语言间保持稳定。优先使用 MDX 注释语法(pnpm write-heading-ids 使用 --syntax mdx-comment):
## This is a heading {/* #this-is-a-heading */}
将 ID 放在 h2 及以下级别。Docusaurus write-heading-ids 会跳过 h1(页面/侧边栏标题)。documentation/docusaurus.config.ts 还会从推断的标题中删除标题 ID 注释,因为 Docusaurus 元数据提取仍然只移除传统的 {#id}。
cd documentation
pnpm write-heading-ids
忽略列表
如果为您的工作流程添加了一个忽略列表,在仓库根目录使用 .translate-ignore(与 .gitignore 相同的概念),用于文档翻译器应跳过的路径。
Docusaurus 主题 JSON
pnpm write-translations 将 Docusaurus UI 字符串提取到 documentation/i18n/en/ 中。ai-i18n-tools 的 translate-docs 步骤(配合 markdownOutput.style: "docusaurus")会根据 ai-i18n-tools.config.json 在每个区域设置下与 markdown 同级填充翻译后的 JSON。
故障排除
OPENROUTER_API_KEY未设置 — 导出它或添加到仓库根目录的.env.local。- 模型/质量 — 调整
ai-i18n-tools.config.json中的openrouter.translationModels和相关选项。 - 词汇表 — 编辑
documentation/glossary-user.csv或重新生成 UI 字符串并重新运行提取 + 翻译。
添加新语言
- 在
documentation/docusaurus.config.ts中将区域设置添加到 Docusaurusi18n.locales和localeConfigs。 - 在
ai-i18n-tools.config.json(仓库根目录)的targetLocales中添加相同的区域设置。 - 在根目录运行
pnpm i18n:generate-ui-languages,然后按需运行pnpm i18n:extract/ 翻译命令。