【免费下载链接】KoffanFree selfhosted groceries list for families and shared households项目地址https://gitcode.com/gh_mirrors/ko/Koffan点击查看免费下载Koffan 是一款免费、可自托管的家庭购物清单应用而它的国际化i18n实现尤为轻巧不依赖任何第三方翻译框架仅用一组嵌入二进制的 JSON 文件就支撑起了 18 种语言的完整界面翻译。本文将带你完整了解 Koffan 国际化的目录结构、运行机制、语言切换流程和新增语言的方法是一份面向自托管玩家的 Koffan 多语言实现指南。一句话原理JSON 文件 Go embed 编译进二进制Koffan 的国际化核心只有一条主线每种语言对应i18n/目录下一个 JSON 文件如 zh.json、de.json通过 Go 的embed机制这些文件在编译期被打进可执行文件运行时按lang cookie → 默认语言 → 英文兜底的顺序取词。这意味着部署时不需要附带任何翻译文件Docker 镜像、单二进制直接跑同时新增语言后重新构建即可生效。关键源码在哪模块文件职责词典加载与取词i18n/locales.goInit()解析所有 JSON、Get()按键取词、GetAllLocales()返回语言列表语言解析与注入handlers/i18n_helper.go从langcookie 读取用户语言把翻译数据注入页面模板语言列表接口handlers/i18n.goGetLocales返回所有可用语言元数据翻译文件i18n/en.json 等 18 个 JSON每种语言的完整文案目录贡献者文档i18n/README.md新增语言与维护文案的官方步骤翻译文件的结构meta 元数据 功能分区每个语言文件的开头是meta段声明语言代码、原生名称和国旗代码其余部分按功能分区组织{ meta: { code: zh, name: 中文, flag: CN }, common: { add: 添加, delete: 删除 }, list: { title: 购物清单, bought: 已购买 }, login: { password: 密码 }, confirm: { delete_item: 删除 \{{name}}\ } }分区即功能模块common通用按钮、nav导航、items商品、sections分区、offline离线与同步、settings设置等占位符统一用{{参数}}比如删除确认里保留{{name}}、{{count}}翻译时可以自由调整语序但不能改占位符本身按键查找采用section.key点号路径如confirm.delete_item后端在 i18n/locales.go 的Get()中逐级下钻找不到时返回 key 本身并在英文兜底界面因此永远不会出现空白文案。运行机制从启动到页面渲染的 4 个阶段阶段 1启动即加载。main.go 在初始化数据库之前就先调用i18n.Init()把i18n/*.json全部解析为内存词典若设置了环境变量DEFAULT_LANG则用它覆盖默认的en。阶段 2请求级语言解析。每次请求到达时handlers/i18n_helper.go 的getLang()读取浏览器langcookiewithPageI18n()随后把该语言外加英文兜底的翻译打包注入模板数据。阶段 3页面内嵌翻译。服务器只把当前语言 英文两份词典写入 HTML而不是全部 18 种早期方案约 170 KB现在大幅瘦身并且编码结果被缓存复用因为词典在Init()后不可变。阶段 4前端t()取词。templates/layout.html 中定义了全局翻译函数先按点号路径在当前语言下查找未命中再自动回落到英文最后做{{参数}}替换。语言选择器则直接由window.locales元数据驱动渲染。用户视角语言是如何记住你的切换语言时前端会把选择同时写入两处localStorage的language键本机偏好和有效期一年的langcookie跨设备/跨标签页。下次访问时页面按 localStorage → cookie → 服务器默认 顺序恢复语言若 cookie 丢失页面还会自动补写并刷新一次保证你的语言选择持久可靠。质量保证一个测试守住 18 种语言的一致性多语言项目最常见的隐患是漏翻——某个语言缺一个 key界面就会裸奔出section.key这种原始键名。Koffan 的解法在 i18n/locales_test.go 中以en.json为基准把每个语言文件拍平成 key → 文案的平面表逐条断言不许缺 key、不许有空值、{{占位符}}必须与英文完全一致、也不许出现英文没有的多余 key一条go test ./i18n/即可校验全部 18 个目录。这正是嵌入式 JSON 方案能低维护成本扩展的关键结构一致性交给测试翻译者只管内容。如何为 Koffan 新增一种语言5 步指南跟着官方文档 i18n/README.md 操作即可复制模板cp i18n/en.json i18n/da.json以丹麦语为例修改 meta填入两位语言代码、语言原生名称、国旗代码翻译所有 value只译值、不动键名和{{参数}}占位符跑测试go test ./i18n/确保 key 与占位符和英文一致重新构建词典已嵌入二进制go build后新语言会自动出现在设置页的语言选择器中。 维护提示新增或修改任何用户可见文案时应在同一次提交中同步更新所有 18 种语言——英文是基准目录运行时的英文兜底不能替代正式翻译。小结为什么这个方案值得参考Koffan 的国际化实现堪称自托管应用的轻量范本零外部依赖只用标准库embedencoding/json没有翻译框架负担部署极简18 种语言随二进制走容器里无任何额外翻译文件性能友好页面只内嵌当前语言 英文编码结果缓存复用健壮兜底缺语言回落默认、缺 key 回落英文界面永不空白可验证一个单测覆盖全语种一致性社区翻译贡献有安全网。对一个以家庭场景为主的购物清单工具来说这套方案以极低的复杂度换来了 18 种语言的开箱即用——这正是 Koffan 国际化实现最值得借鉴的地方。赞分享【免费下载链接】KoffanFree selfhosted groceries list for families and shared households项目地址https://gitcode.com/gh_mirrors/ko/Koffan点击查看免费下载相关推荐LessPass国际化架构揭秘如何实现12种语言的全球密码管理LessPass国际化架构揭秘如何实现12种语言的全球密码管理 LessPass作为一款 无状态开源密码管理器 通过其精妙的国际化架构设计为全球用户提供了后端前端移动开发CLIFilePizza国际化适配支持20种语言的实现方式FilePizza国际化适配支持20种语言的实现方式 项目国际化现状分析 FilePizza作为一款浏览器端的点对点文件传输工具其国际化适配对于全球用户体验yargs国际化方案终极指南25种语言支持的实现原理深度解析yargs国际化方案终极指南25种语言支持的实现原理深度解析 yargs是一个现代化的命令行参数解析库它提供了强大的国际化支持能够自动检测用户操作系统语言CLI开发工具上一篇三大核心技术突破Open-Meteo如何重新定义免费天气API服务下一篇Apache Mesos 权重Weights完全指南通过 /weights 端点动态调控角色资源份额创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?