
桌面应用【免费下载链接】BongoCat BongoCat — A cross-platform interactive desktop pet that brings fun to your desktop!项目地址https://gitcode.com/gh_mirrors/bong/BongoCat点击查看免费下载本文解读 BongoCat 仓库中 本地化文案书写规范 的技术内涵。该规范约束crates/bongocat-i18n/locales/*.json下全部 UI 文案的书写方式核心只有一条省略号一律写成单个…U2026。读完本文你将理解这条约定为何必须与语言无关、它如何被tools/validate-locales.py机械强制以及新增/修改多语言文案时的完整实战流程与配套校验。规范定位与适用范围BongoCat 的 UI 文案统一存放在crates/bongocat-i18n/locales/目录每种语言一个 JSON 文件。当前仓库实际携带 6 份 catalogen-US、zh-CN、zh-TW、ar-SA、vi-VN、pt-BR清单见 crates/bongocat-i18n/src/lib.rs 中的SHIPPED_LOCALES。本规范是一份规范性约定有两个明确边界它只约束crates/bongocat-i18n/locales/*.json里的 UI 文案怎么写不涉及目标架构架构以 docs/technical-design.md 和docs/adr/下的决策记录为准catalog 的结构、key 命名与占位符规则由 docs/adr/0012-json-localization.md 单独定义本文与 ADR 互为补充而非覆盖。规则一律遵守、不因语言而异中英文、阿拉伯语、越南语、葡萄牙语都适用同一套写法。核心规则省略号一律单个…U2026规则一句话省略号写成单个…U2026一个字符视觉上是三个点。其余任何写法都违反规范写法点数是否允许…U2026 ×13✅ 唯一允许的写法……U2026 ×26❌ 中文排版习惯不采用...ASCII 句点 ×33❌ 拉丁写法不采用规范的三个理由值得逐条展开同一个 key 由所有语言共用写法必须与语言无关。……只在中文排版里成立、...只在拉丁文里成立任何一种都会让另一种语言的用户看到错误的省略号。…是单个字符、占一个码位中英文字体都能正确渲染宽度稳定……是两个字符在非中文字体下还可能被拆成两个独立字形。文案里没有需要区分三个点和六个点的语义长度差异纯属排版习惯不是信息差异。以 crates/bongocat-i18n/locales/zh-CN.json 中的模型导入流程为例中文侧每个进行时态字符串都以单个…收尾{ models: { import: { step: { choosing: 正在打开文件选择器…, importing: 正在导入模型…, capturing: 正在截取模型封面… } } } }英文侧crates/bongocat-i18n/locales/en-US.json同样是一个…绝不写 ASCII 的...{ models: { import: { step: { choosing: Opening the file picker…, importing: Importing model…, capturing: Capturing cover… } } } }在仓库真实 catalog 里可以看到这条规则被严格贯彻zh-TW.json写正在開啟檔案選取器…、ar-SA.json写جارٍ فتح منتقي الملفات…、pt-BR.json写Abrindo o seletor de arquivos…6 份 catalog 在models.import.step.choosing等同一 key 下全部使用单个 U2026。甚至带占位符的字符串同样遵守例如更新流程的downloading正在下载… %{percent}%zh-CN与Downloading… %{percent}%en-US——省略号与%{percent}%占位符之间用一个空格分隔。为什么与语言无关是硬性要求同一 key 服务多种语言要理解这条规则为什么如此严格需要看到 catalog 的解析机制。bongocat-i18n的locale_codecrates/bongocat-i18n/src/lib.rs实现了 RFC 4647 的 language-subtag fallback按 primary subtag 匹配已发布的 catalog因此机器实际报告的 tag 几乎总不是 catalog 自身的名字——ar-EG落到ar-SA、pt-PT落到pt-BR、vi落到vi-VN、en-GB落到en-US而不是各自回退英文。zh是唯一按书写体系script subtag分流的语言hant与TW/HK/MO判为繁体落zh-TW其余zh标签判为简体落zh-CN。这意味着一份 catalog 的同一个字符串会被多种语言环境的用户共同阅读。省略号若是语言专属写法就必然让另一批读者看到排版错误。单个…是唯一在中英文、阿拉伯文、越南文、葡萄牙文字体下都渲染正确且宽度稳定的选择。机械强制validate-locales.py把规则变成门禁规范明确指出这条规则不依赖 review 记忆——写错就会在门禁上变红。具体实现是 tools/validate-locales.py其核心是一行正则ELLIPSIS_RUN re.compile(r\u2026{2,}|\.{2,})它匹配连续两个及以上的…或连续两个及以上的 ASCII.check_ellipsis对每个 locale 的每个值逐一扫描一旦命中就抛出错误并报出 key 与实际写法。文档中给出的真实报错样式为error: zh-CN: models.import.step.importing spells an ellipsis as ……; use a single … (U2026) in every locale新增或修改文案后本地跑一次即可验证python3 tools/validate-locales.py脚本在检查省略号之前会先把嵌套 JSON 展平为点号分隔的扁平 keyflatten并顺带完成一系列配套校验文件清单校验crates/bongocat-i18n/locales/下的文件必须与EXPECTED_LOCALESen-US、zh-CN、zh-TW、ar-SA、vi-VN、pt-BR完全一致多一个或少一个文件都直接失败结构校验顶层必须是对象、key 非空、值为非空字符串、不允许空对象、不允许重复扁平 key、_version是保留 keykey 集合一致性每种语言与en-US的扁平 key 集合必须完全相同缺 key 或多余 key 都报错占位符一致性每种语言同一 key 的%{name}占位符集合必须与en-US一致placeholder_names对每个值做排序比较防止漏掉插值参数。正常通过时输出validated 6 locale(s), N key(s) each这套key 集合一致 占位符一致 省略号一致的三重校验正是 docs/adr/0012-json-localization.md 中测试/CI 必须检查 JSON 可解析、语言 key 集合相同、值为非空字符串且占位符集合一致约束的落地实现。配套约束key 命名、占位符与回退ADR-0012省略号规范不是孤立的一条它与 ADR-0012 定义的 catalog 结构约束共同构成完整规则集key 命名翻译 key 使用小写snake_case按navigation、settings、models、shortcuts、diagnostics、about、actions、status、errors等领域分层字段名表达具体上下文JSON 源文件使用真正嵌套的领域结构不得使用点号分隔的扁平 key插值使用rust-i18n的%{name}语法所有语言保持相同的占位符集合回退找不到语言或 key 时回退到en-US即DEFAULT_LOCALE新文案先入 JSON新文案必须先加入 JSON再由 Rust 使用 key禁止在.rs源码中新增自然语言翻译文本单一 catalog ownerbongocat-i18n是唯一调用rust_i18n::i18n!的 crateUI 通过text(locale, key)facade 在使用点直接引用稳定的领域路径不内嵌翻译文本。Rust 侧配套实现可在 crates/bongocat-i18n/src/lib.rs 中看到text带缓存查找、format_text负责%{name}插值、platform_text支持按平台后缀如..status_icon.label.macos覆盖文案。而 crates/bongocat-i18n/src/tests/mod.rs 中的测试基建LOCALES常量、messages/messages_on_disk双路展平、Catalog::resolves解析模拟则保证语言清单只在一处枚举新增语言不会让某条比较测试悄悄少覆盖一种语言。例外与边界规范同时划清了三条边界文档、源码注释、CHANGELOG、memory 记录属于自然语言不受本规范约束。但引用 UI 文案时照抄 catalog 里的写法否则文档与界面会不一致。代码里的..、...不属于文案——Rust 语法、路径、范围表达式如1..3、0..len不受影响。更新日志的书写是另一套独立规范docs/changelog-conventions.md 只约束CHANGELOG.md与CHANGELOG.zh-CN.md的分段标题emoji 词表与本规范互不覆盖——文档本身也通过交叉引用明确了两者的边界。新增 / 修改文案的完整检查清单结合规范、ADR-0012 与校验脚本一次合规的文案变更应当按以下顺序完成定位领域路径在crates/bongocat-i18n/locales/下 6 份 JSON 的同一领域路径如models.import.step同时新增或修改 key——不允许只改一侧省略号写单个…U2026任何进行时、等待态的文案收尾统一用单个字符禁止……与...占位符对齐若文案需要插值使用%{name}语法并确保 6 份 catalog 的占位符集合与en-US完全一致本地跑校验python3 tools/validate-locales.py确认输出validated 6 locale(s), N key(s) each无 error跑 crate 测试cargo test -p bongocat-i18n覆盖 crates/bongocat-i18n/src/tests/ 下的 catalog 一致性、覆盖率、格式化与平台覆盖四组用例。若需要新增一种语言则是一次数据加注册的改动详见 docs/adr/0012-json-localization.md写一份与en-US同 key、同占位符的 JSON然后在build.rs的CATALOGS、语言枚举及其code/catalog_locale/from_system_locale/resolve、settings_language_display_name、以及 tools/validate-locales.py 的EXPECTED_LOCALES与 crates/bongocat-i18n/src/tests/mod.rs 的LOCALES中各加一项。语言下拉中每种语言用自身文字书写endonym例如Português而不是Português (Brasil)。总结BongoCat 的本地化文案规范通过单个 U2026这一条与语言无关的硬性约定加上validate-locales.py的机械门禁和 ADR-0012 的 key/占位符约束把多语言 UI 文案的书写质量从靠 review 记忆提升为靠校验脚本保证。这套做法对任何维护多语言 catalog 的项目都有直接借鉴价值凡是多语言共用的字符串排版习惯必须取所有语言的公约数并用自动化校验锁定它。赞分享桌面应用【免费下载链接】BongoCat BongoCat — A cross-platform interactive desktop pet that brings fun to your desktop!项目地址https://gitcode.com/gh_mirrors/bong/BongoCat点击查看免费下载相关推荐三步存下在线视频与音频猫抓资源嗅探完整指南三步存下在线视频与音频猫抓资源嗅探完整指南 在某个页面想回看一段课程视频却找不到下载按钮时资源嗅探扩展 cat catch猫抓会把页面里的视频、音频文件音视频Easydict 编码规范指南跨语言代码质量、Swift 实践与本地化约束全解析Easydict 编码规范指南跨语言代码质量、Swift 实践与本地化约束全解析 本篇技术指南围绕 Easydict开源 macOS 词典翻译应用仓库中的桌面应用AI 应用gitsigns.nvim 提交信息规范与 commitlint 自动化从格式约定到本地校验gitsigns.nvim 提交信息规范与 commitlint 自动化从格式约定到本地校验 本篇指南围绕 gitsigns.nvim 仓库的 提交信息规范文开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考