ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OmniRoute 多语言国际化(i18n)实战指南:42 语言 UI、LLM 增量文档翻译与 CLI 本地化全链路解析

OmniRoute 多语言国际化(i18n)实战指南:42 语言 UI、LLM 增量文档翻译与 CLI 本地化全链路解析 OmniRoute 多语言国际化i18n实战指南42 语言 UI、LLM 增量文档翻译与 CLI 本地化全链路解析【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150 free), 1200 models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline Copilot. Quota-aware auto-fallback, RTKCaveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550 contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRoute本文以 OmniRoute 仓库的 docs/guides/I18N.mdi18n 工具链文档版本 3.8.40为主体骨架结合 src/i18n/、config/i18n.json、scripts/i18n/ 等源码与测试展开。文章聚焦 OmniRoute 自身的国际化工程实践Dashboard 的 42 语言 UI 与 RTL 支持、基于哈希增量的 LLM 文档翻译管道、CLI 的独立本地化层以及一整套验证与质量门禁。读者读完可掌握如何在 OmniRoute 中新增语言、运行增量翻译、管理不可翻译键、执行静态与视觉 QA并理解其背后的源码级工作原理。总览OmniRoute 的多语言体系OmniRoute 的国际化由三套相互独立又共享配置的子系统构成Dashboard UI 层Next.js 应用内 42 种语言的界面翻译基于next-intl框架与 Cookie 解析文档镜像层docs/i18n/{locale}/docs/**下 42 种语言的 Markdown 文档由哈希驱动的 LLM 增量翻译管道维护CLI 层omniroute命令行工具自带独立 i18n 层42 个语言目录开箱即用支持--lang标志、环境变量与系统 locale 自动探测。三者共享同一份唯一事实来源config/i18n.json。该 JSON 列出了每个语言代码、显示名称、国旗、RTL 集合、uiOnly/docsExcluded配置以及aliases别名如id声明aliases: [in]uk-UA声明aliases: [uk]。而 src/i18n/config.ts 只是该 JSON 的瘦类型适配层文件头注释明确要求不要在源码中手工维护 locale 列表。RTL 支持ar、fa、he、ur四个 locale 被声明为 RTL见config/i18n.json的rtl数组其中阿拉伯语与希伯来语同时具备完整文档翻译。运行时架构Dashboard 如何解析语言唯一事实来源Source of TruthUI 字符串src/i18n/messages/en.json——英文源文件约 2800 个 key语言文件src/i18n/messages/{locale}.json——42 份翻译框架next-intl基于 Cookie 的语言解析配置src/i18n/config.ts——定义全部 42 个 locale、语言名与国旗。运行时流程Runtime Flow根据 src/i18n/request.ts 的实现locale 解析链路为用户在界面上选择语言 → 写入NEXT_LOCALECookiesrc/i18n/request.ts 读取 Cookie未命中时读取x-locale请求头最终由resolveRequestedLocaleLOCALE_COOKIE → header → fallback en归一化动态import()加载messages/{locale}.json组件通过useTranslations(namespace)与t(key)消费翻译。值得注意的工程细节request.ts中的deepMergeFallback实现了G1 缺失键回退 EN——当某语言缺失某个 key 时自动回落到英文使部分翻译始终可用。该函数还防御了__proto__/constructor/prototype原型链污染攻击。此外__MISSING__:哨兵前缀由 scripts/i18n/sync-ui-keys.mjs 写入会被识别为未翻译从而让干净的英文回退值获胜对应 issue #7258。支持的 42 种语言CodeLanguageRTLGoogle Translate CodearالعربيةYesarazAzərbaycan diliNoazbgБългарскиNobgbnবাংলাNobncsČeštinaNocsdaDanskNodadeDeutschNodeenEnglishNoenesEspañolNoesfaفارسیYesfafiSuomiNofifrFrançaisNofrguગુજરાતીNoguheעבריתYesiwhiहिन्दीNohihuMagyarNohuidBahasa IndonesiaNoiditItalianoNoitja日本語Nojako한국어NokomrमराठीNomrmsBahasa MelayuNomsnlNederlandsNonlnoNorskNonophiFilipinoNotlplPolskiNoplptPortuguês (Portugal)Noptpt-BRPortuguês (Brasil)NoptroRomânăNororuРусскийNoruskSlovenčinaNosksvSvenskaNosvswKiswahiliNoswtaதமிழ்NotateతెలుగుNotethไทยNothtrTürkçeNotruk-UAУкраїнськаNoukurاردوYesurviTiếng ViệtNovizh-CN中文 (简体)Nozh-CNzh-TW中文 (繁體)Nozh-TWdocs/i18n/目录下还有fa、gu、ta、te、sw、bn、mr、ur、phi等语言的文档镜像目录完整 locale 集合以config/i18n.json的locales数组为准。推荐翻译管道哈希增量 LLM 翻译v3.8.0从 v3.8.0 起文档翻译的推荐路径是基于哈希的增量翻译器后端是 OpenAI 兼容的 LLM 端点典型通过 OmniRoute Cloud 使用cx/gpt-5.4-mini之类的模型。常用命令# 运行翻译增量——只触碰变更过的源文件 npm run i18n:run # 只处理单个 locale npm run i18n:run -- --localept-BR # 指定文件逗号分隔仓库相对路径 npm run i18n:run -- --filesCLAUDE.md,docs/architecture/ARCHITECTURE.md # 强制全部重译昂贵 npm run i18n:run -- --force # 预演将发生什么不调 API、不写盘 npm run i18n:run:dry # CI 门禁——状态漂移时以非零码退出 npm run i18n:check重建状态Re-bootstrappingnpm run i18n:run -- --adopt从磁盘上已有的镜像重建.i18n-state.json——不调 API、不写任何.md。适合源文件做了无需重译的编辑如改链接列表、改数字或状态文件丢失时使用可加--files…/--locale…只采用子集加--dry-run预演。另有一个--adopt --targets-only变体只对磁盘上的镜像重新哈希保留全部source_hash使纯机械的镜像改写不再被误报为target changed而真实的源漂移仍会报告。后端环境变量由环境变量配置写入.env永不提交scripts/i18n/run-translation.mjs 在启动时自带轻量.env加载器VariablePurposeOMNIROUTE_TRANSLATION_API_URLOpenAI 兼容 base URL如…/v1OMNIROUTE_TRANSLATION_API_KEYbearer token不进入日志OMNIROUTE_TRANSLATION_MODEL模型 id如cx/gpt-5.4-miniOMNIROUTE_TRANSLATION_TIMEOUT_MS可选默认6000060 秒OMNIROUTE_TRANSLATION_CONCURRENCY可选默认4状态追踪与输出形态.i18n-state.json已提交为每个源文件与每个 locale 保存 SHA-256 哈希。漂移检测自动且确定性——i18n:check不产生任何 API 调用输出形态每个翻译文件顶部是一行# 标题native、一条 Languages: …语言栏、一个---分隔符随后是翻译正文。该布局与 scripts/check/check-docs-sync.mjs 对llm.txt与CHANGELOG.md镜像执行的校验规则保持一致。从源码看run-translation.mjs还在写盘前用 Prettier 对每个翻译文件做格式化并在记录哈希之前完成从而避免 lint-staged 的后续 Prettier 通道把文件内容从.i18n-state.json下面改走Prettier 不可用时仅告警不阻断。已弃用的旧脚本老 Python 脚本 scripts/i18n/i18n_autotranslate.py 与基于 Google 翻译的生成器 scripts/i18n/generate-multilang.mjs 仍然存在但带有弃用横幅计划在 v3.10 移除。不要用generate-multilang.mjs messages翻译 UI 字符串——受支持路径是 LLM 后端# 填充每个 locale 目录中所有缺失/占位的 UI key npm run i18n:sync-ui -- --translate-markers --batch-size40目前只有readme模式根目录 README 变体还没有替代品。快速参考常见任务命令TaskCommand全链路新增语言npm run i18n:add-locale -- --codeel …config → docs → CLI → site翻译文档LLMnpm run i18n:run推荐——增量、基于哈希翻译 UI 字符串npm run i18n:sync-ui -- --translate-markers --batch-size40检查翻译漂移npm run i18n:check真翻译棘轮ratchetnpm run i18n:check-ratio与英文相同/占位符占比重新生成 语言栏npm run i18n:sync-bars校验某个 localepython3 scripts/i18n/validate_translation.py quick -l cs检查代码 keypython3 scripts/i18n/check_translations.py生成 QA 报告node scripts/i18n/generate-qa-checklist.mjs视觉 QAPlaywrightnode scripts/i18n/run-visual-qa.mjs这些命令与 package.json 中声明的 npm 脚本一一对应i18n:run、i18n:run:dry、i18n:check、i18n:sync-ui、i18n:check-ui-coverage、i18n:check-glossary、i18n:check-ratio、i18n:sync-bars、i18n:add-locale等。全链路新增一门语言config/i18n.json是唯一声明 locale 的地方src/i18n/config.ts是类型化适配层不得手工编辑。一条命令即可把新语言注册到所有表面配置、国旗、Dashboard 目录、文档镜像、CLI 目录、README 与索引、语言栏可选站点# 需要 .env 中配置 OMNIROUTE_TRANSLATION_API_URL / _API_KEY / _MODEL node scripts/i18n/add-locale.mjs --codeel --englishGreek --nativeΕλληνικά --flag # 印度语言共享 in.svg 国旗文件 node scripts/i18n/add-locale.mjs --codekn --englishKannada --nativeಕನ್ನಡ --flag --flag-filein.svg # 仅预演 node scripts/i18n/add-locale.mjs --codeel --englishGreek --nativeΕλληνικά --flag --dry-run然后验证node --import tsx/esm --test tests/unit/i18n-locale-surfaces-parity.test.ts npm run i18n:check-ui-coverage npm run i18n:check-ratio npm run check:docs-all npm run check:cli-i18nscripts/i18n/add-locale.mjs 会同步更新 CLI 侧语言目录bin/cli/locales/、语言栏与文档镜像结构。测试 tests/unit/i18n-locale-surfaces-parity.test.ts 双向守护一致性——配置的 docs locale 必须有对应行行也必须能映射回已配置的 locale配套的 tests/unit/i18n-locale-scaffold.test.ts 守护 locale 脚手架。已弃用的 Google 翻译生成器generate-multilang.mjs不属于此流程。旧式自动翻译管道弃用但仍在仓库中generate-multilang.mjsGoogle Translate历史上是主自动翻译引擎使用 Google Translate 免费 API 生成 UI 字符串、README 与文档的翻译node scripts/i18n/generate-multilang.mjs [messages|readme|docs|all]Mode作用messages从en.json翻译src/i18n/messages/{locale}.json中缺失的 keyreadme将README.md翻译为项目根目录下的README.{code}.mddocs将DOC_SOURCE_FILES翻译到docs/i18n/{locale}/{docName}all依次运行以上三种模式特性文本保护翻译前屏蔽代码块、行内代码、Markdown 链接/图片、HTML 标签、表格与 ICU 占位符{count}等翻译后还原分块批处理以__OMNIROUTE_I18N_SEPARATOR__分隔拼接多字符串单请求上限 1800 字符会话内内存缓存对 429/5xx 的指数退避重试最多 5 次300ms × 尝试次数延迟单请求超时 20 秒目标文件已存在则不覆盖。重要行为docs/i18n/README.md每次运行都被重新生成作为所有文档的自动索引根目录README.{code}.md仅在不存在时创建跳过EXISTING_README_CODES中的语言语言栏 **Languages:** …自动插入/更新到所有翻译文档。i18n_autotranslate.pyLLM 版次要翻译器使用任意 OpenAI 兼容 LLM API包括 OmniRoute 自身翻译docs/i18n/下已存在的 Markdown 文件适合用更高品质打磨或重译python3 scripts/i18n/i18n_autotranslate.py \ --api-url http://localhost:20128/v1 \ --api-key sk-your-key \ --model gpt-4o特性扫描docs/i18n/中英文段落跳过代码块、表格与已翻译内容以技术翻译系统提示词发送段落给 LLM支持全部 42 种语言。CLI i18n命令行工具的本地化层omnirouteCLI 拥有独立于 Next.js Dashboard 的 i18n 层实现在 bin/cli/i18n.mjs。工作原理CLI 命令中的每个用户可见字符串都经t(module.key, vars)读取目录为bin/cli/locales/下的 JSON 文件——42 个开箱即用任何缺失 key 都回退到en因此部分翻译是合法的可用 locale 的唯一事实来源同样是config/i18n.json与 Dashboard 共享。locale 选择顺序检测顺序先命中者胜优先级来源示例1--lang标志omniroute --lang de status2OMNIROUTE_LANG环境变量OMNIROUTE_LANGja omniroute providers3LC_ALL系统环境变量从终端 locale 自动探测4LC_MESSAGES系统环境变量从终端 locale 自动探测5LANG系统环境变量从终端 locale 自动探测6兜底en带下划线的 locale 代码pt_BR会被归一化为连字符形式pt-BR。locale 代码经/^[a-zA-Z0-9-]$/校验——路径穿越被拒绝。持久化语言偏好# 设置语言并保存到 ~/.omniroute/.env跨会话持久 omniroute config lang set pt-BR # 查看当前语言 omniroute config lang get # 列出全部 42 种可用语言 omniroute config lang list # JSON 输出 omniroute config lang list --output json保存的偏好被原子写入~/.omniroute/.env并由 CLI 引导流程在任何命令运行前加载。一次性覆盖# 仅覆盖当前命令不持久化 omniroute --lang de providers list注意--lang标志不会写入环境文件——只影响本次调用。持久化请用config lang set。可用 locale 状态42 个语言文件随bin/cli/locales/发布。完整翻译en、pt-BR。仅脚手架所有 key 回退enbn、gu、he、mr、ms、phi、sw、ta、te、ur。其余 30 个 locale 的commonprogramkey 已翻译。新增 CLI locale在config/i18n.json中添加 locale 条目运行node bin/cli/scripts/generate-locales.mjs——创建语言文件翻译 key或留{}以走 en 回退脚手架PR 必须向en.json与pt-BR.json添加字符串其余文件尽力而为。验证与 QA 工具链validate_translation.py——翻译校验器对比任意 locale JSON 与en.json并报告问题位置scripts/i18n/validate_translation.py# 快速检查仅计数 python3 scripts/i18n/validate_translation.py quick -l cs # 输出 # Missing: 0 # Untranslated: 0 # Ignored (UNTRANSLATABLE_KEYS): 236 # 按类别查看详细差异 python3 scripts/i18n/validate_translation.py diff common -l cs python3 scripts/i18n/validate_translation.py diff settings -l cs # 导出 CSV python3 scripts/i18n/validate_translation.py csv -l cs report.csv # 导出 Markdown python3 scripts/i18n/validate_translation.py md -l cs report.md # 完整报告默认 python3 scripts/i18n/validate_translation.py -l cs检测项缺失 keyen.json有而 locale 无多余 keylocale 有而en.json无未翻译 keylocale 值与英文源相同排除 allowlist占位符不匹配源与翻译间 ICU 占位符不一致。退出码Code含义0OK1通用错误2缺失字符串硬错误3未翻译警告软错误环境设置TRANSLATION_LANGcs或使用-l cs标志。check_translations.py——代码到 JSON 的 key 检查器扫描src/**/*.tsx与src/**/*.ts中的useTranslations()调用并验证所有被引用的 key 都存在于en.json# 基本检查 python3 scripts/i18n/check_translations.py # 详细输出 python3 scripts/i18n/check_translations.py --verbose # 自动修复向 en.json 添加缺失 key python3 scripts/i18n/check_translations.py --fixgenerate-qa-checklist.mjs——静态分析 QA扫描 Next.js 页面文件计算 i18n 风险指标并生成 Markdown 报告node scripts/i18n/generate-qa-checklist.mjs检查项定宽 class 使用溢出风险方向性 left/right classRTL 风险易裁剪模式locale 对齐相对en.json的缺失/多余 key优先语言es、fr、de、ja、arREADME 语言选择栏。输出docs/reports/i18n-qa-checklist-{date}.mdrun-visual-qa.mjs——Playwright 视觉 QA对多种语言与视口下的所有 Dashboard 路由截图评估页面健康# 默认es, fr, de, ja, ar, zh-CN作用于 localhost:20128 node scripts/i18n/run-visual-qa.mjs # 自定义 base URL 与 locale QA_BASE_URLhttp://staging.example.com QA_LOCALESde,fr node scripts/i18n/run-visual-qa.mjs # 自定义路由 QA_ROUTES/dashboard/settings,/dashboard/providers node scripts/i18n/run-visual-qa.mjs检测项文本溢出元素裁剪RTL 布局不匹配。输出docs/reports/i18n-visual-qa-{date}.md JSON 报告。管理不可翻译键untranslatable keys文件scripts/i18n/untranslatable-keys.json。这是应保持与英文源完全一致 key 的 allowlist由validate_translation.py用于避免未翻译的误报{ description: Keys that should remain untranslated..., keys: [ common.model, common.oauth, health.cpu ] }适合放入此处的 key品牌/产品名landing.brandName、common.social-github技术术语/缩写health.cpu、mcpDashboard.pid、settings.aiICU/格式字符串apiManager.modelsCount、health.millisecondsShort占位符值providers.openaiBaseUrlPlaceholder、cliTools.baseUrlPlaceholder协议名common.http、common.oauth、providers.oauth2Label导航分区sidebar.primarySection、sidebar.cliSection。新增 key编辑keys数组后重新运行校验。术语表层语义漂移的最后防线仅靠 key 对齐check-ui-keys-coverage.mjs与 ICU 合法性validate_translation.py无法发现语义漂移——例如同一个英文概念 provider 在数千条字符串中被翻译成两个都正确的不同中文词提供商 vs 提供者。#8038 从 zh-CN 开始引入了按语言维护的术语表层。scripts/i18n/glossary/{locale}.json按版本维护的常用概念表provider、connection、routing、fallback、quota、context window、reasoning、tool call、cache、circuit breaker…每个概念有一个canonical翻译和可选的synonyms列表——目录中出现任何同义词都会被标记为漂移。synonyms为空数组表示该概念已记录但尚未强制执行目录中仍有合理的混合用法规范化属于后续工作。scripts/i18n/glossary/zh-CN.json 播种了上述十个概念目前只有provider被强制执行对应一次性的 提供商→提供者 归一化镜像 #8024 的 zh-TW 处理范围覆盖src/i18n/messages/zh-CN.json与bin/cli/locales/zh-CN.json。scripts/i18n/glossary/protected-terms.json产品/提供方/模型/协议/CLI/环境/标识符名的扁平清单OmniRoute、OAuth、MCP、A2A、DATA_DIR…必须原样出现在任何翻译值内。这与untranslatable-keys.json把整个 KEY 排除在对齐/ICU 检查之外粒度不同——受保护术语按概念而非按 key 路径在任意值的任意位置被检查。check-glossary-consistency.mjs# 默认 zh-CN npm run i18n:check-glossary # 显式 locale、JSON 报告或非失败报告模式 node scripts/i18n/check-glossary-consistency.mjs --localezh-CN node scripts/i18n/check-glossary-consistency.mjs --localezh-CN --json node scripts/i18n/check-glossary-consistency.mjs --localezh-CN --report导出纯函数checkGlossaryConsistency(localeMessages, glossary, protectedTerms)返回{ violations: [...] }——非规范术语产生glossary-synonym违规误译的受保护名称产生protected-term-altered违规。已接入 CI 的i18n-glossary-zhcnjob与i18n-ui-coverage相同的门禁策略跳过草稿 PRi18n 或代码变更时运行。CI 集成与文档文件结构GitHub Actions.github/workflows/ci.ymlCI 在每次 push 与 PR 时验证全部 localei18n-matrixjob——动态发现所有语言文件排除en.jsoni18njob——对每个语言并行运行validate_translation.py quick -l langci-summaryjob——把结果聚合为 Dashboard 摘要。# i18n-matrix: 发现语言 LANGS$(ls src/i18n/messages/*.json | xargs -n1 basename | sed s/.json$// | grep -v ^en$) # i18n: 校验每个语言 python3 scripts/i18n/validate_translation.py quick -l ${{ matrix.lang }}Dashboard 输出## Translations | Metric | Value | |--------|------| | Languages checked | 30 | | Total untranslated | 0 | ✅ All translations complete文件结构src/i18n/ ├── config.ts # locale 定义42 locales、RTL 配置——config/i18n.json 的薄适配层 ├── request.ts # 运行时 locale 解析 ├── resolveRequestedLocale.ts # locale 归一化别名、BCP-47 标签 └── messages/ ├── en.json # 唯一事实来源约 2800 个 key ├── cs.json # 捷克语翻译 ├── de.json # 德语翻译 └── ... # 42 个语言文件 scripts/i18n/ ├── run-translation.mjs # 哈希增量 LLM 文档翻译管道推荐 ├── add-locale.mjs # 全链路新增语言 ├── check-translation-drift.mjs # 漂移检测i18n:check ├── check-translation-ratio.mjs # 真翻译棘轮i18n:check-ratio ├── sync-language-bars.mjs # 语言栏同步i18n:sync-bars ├── sync-ui-keys.mjs # UI key 同步/回填i18n:sync-ui ├── check-ui-keys-coverage.mjs # UI key 覆盖检查 ├── check-ui-value-drift.mjs # UI 值漂移检查 ├── check-glossary-consistency.mjs # 术语表一致性 ├── generate-multilang.mjs # 旧自动翻译引擎Google Translate弃用 ├── generate-qa-checklist.mjs # 静态分析 QA ├── run-visual-qa.mjs # Playwright 视觉 QA ├── untranslatable-keys.json # 校验 allowlist236 个 key ├── validate_translation.py # 翻译校验器 ├── check_translations.py # 代码到 JSON 的 key 检查器 └── i18n_autotranslate.py # LLM 文档翻译器弃用 bin/cli/ ├── i18n.mjs # CLI 独立 i18n 层 └── locales/ # 42 个 CLI 语言目录 docs/ ├── guides/I18N.md # 本文——i18n 工具链文档 ├── i18n/ │ ├── README.md # 语言索引add-locale 增量维护 │ ├── hi/docs/guides/I18N.md # 印地语文档镜像 │ └── ... # 各语言目录 └── reports/ ├── i18n-qa-checklist-*.md # 静态分析报告 └── i18n-visual-qa-*.md # 视觉 QA 报告最佳实践编辑翻译时总是先改en.json——它是唯一事实来源运行npm run i18n:sync-ui或旧式generate-multilang.mjs messages把新 key 传播到所有语言人工复核自动翻译——机器翻译是起点而非终点提交前校验——python3 scripts/i18n/validate_translation.py quick -l lang若某个 key 应保持英文更新untranslatable-keys.json。占位符安全ICU 占位符{count}、{value}、{total}、{seconds}必须逐字保留复数格式{count, plural, one {# model} other {# models}}必须保持结构校验器会自动检测占位符不匹配。在代码中新增翻译 key// 使用命名空间 key const t useTranslations(settings); t(cacheSettings); // 映射到 JSON 中的 settings.cacheSettings // 运行 check_translations.py 验证 key 存在 python3 scripts/i18n/check_translations.py --verboseRTL 注意事项阿拉伯语ar与希伯来语he是 RTL 语言此外fa、ur也在 RTL 集合中避免硬编码left/rightCSS——使用start/end逻辑属性视觉 QA 通过run-visual-qa.mjs捕获 RTL 布局不匹配。已知问题与历史记录in.json→hi.json修复与in语言退役生成器曾使用code: in已弃用的 Google Translate 代码表示印地语而非正确的 ISO 639-1hi产生了孤立的in.json重复文件通过将generate-multilang.mjs中的code: in改为code: hi并删除孤儿文件修复。退役记录2026-09-02in在那次修复后又以第二个印尼语 locale 的身份存活下来——config/i18n.json称其为 Indonesian (Legacy)而 README 仍标注为印地语。现已从所有表面配置、目录、docs/i18n/in/、README、索引、基线移除。id现在声明aliases: [in]因此已保存的NEXT_LOCALEin或OMNIROUTE_LANGin会解析到id。仓库中的docs/i18n/in/目录已随这次退役被移除印地语翻译现在位于 docs/i18n/hi/docs/guides/I18N.md英文权威版本位于 docs/guides/I18N.md。docs/i18n/README.md由手工维护过去它由generate-multilang.mjs docs整体重新生成现在不再如此npm run i18n:add-locale原地插入新 locale 行并更新计数句其余编辑全部手工完成。tests/unit/i18n-locale-surfaces-parity.test.ts 双向守护——配置的 docs locale 必须有行行也必须映射回已配置的 docs locale。外部化的不可翻译键列表untranslatable-keys.jsonallowlist 从validate_translation.py的内联 Python 集合移到了外部 JSON 文件便于维护校验器在运行时加载它。validate_translation.py忽略计数输出quick检查现在显示来自untranslatable-keys.json的忽略键数量Missing: 0 Untranslated: 0 Ignored (UNTRANSLATABLE_KEYS): varies per release架构图图源docs/diagrams/i18n-flow.mmdMermaid 源文件该图展示了从源 Markdown仓库根级CLAUDE.md、GEMINI.md、README.md及docs/*.md经哈希状态文件.i18n-state.json与 LLM 后端产出docs/i18n/{locale}/镜像文档的完整数据流与本文章节推荐翻译管道相互印证。【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150 free), 1200 models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline Copilot. Quota-aware auto-fallback, RTKCaveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550 contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRoute创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表