尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
如何给 KOReader SimpleUI 插件添加新语言:.po 文件、Poedit 与 msgfmt 校验完整教程
【免费下载链接】simpleui.kopluginA highly customizable UI plugin for KOReader that features a home screen, bottom navigation bar, top bar and desktop modules/widgets.项目地址https://gitcode.com/gh_mirrors/si/simpleui.koplugin点击查看免费下载SimpleUI 是 KOReader 的一款高度可定制界面插件提供主页、底部导航栏、顶部状态栏和桌面小组件。本文是一份 KOReader 插件翻译教程教你用.po文件 Poedit 为 SimpleUI 添加一种新语言并用 msgfmt 校验全程无需编程基础。整个流程只有 3 步复制模板 → 填写 msgstr → msgfmt 校验。SimpleUI 的翻译加载器 infra/sui_i18n.lua 会在启动时自动读取locale/目录下的.po文件并匹配 KOReader 的语言设置所以整个过程中不需要改动任何代码。先认识 .po 文件翻译文件长什么样SimpleUI 的翻译工作区集中在 locale/ 目录目前已有约 27 个语言文件中文、日语、德语、法语、俄语等外加一个模板文件文件作用locale/simpleui.pot翻译模板包含插件中所有可翻译的英文字符串约 5400 行locale/zh_CN.po、locale/de.po 等各语言的正式翻译文件结构与模板一一对应.po文件由一条条「键值对」组成msgid是英文原文绝不能改msgstr是你填写的译文。以中文翻译为例msgid Set Goal (%d hr/month) msgstr 设定目标%d 小时/月每条记录前还会带#: 文件路径:行号注释指向该字符串在源码中的位置方便你理解语境#: modules/module_reading_goals.lua:1348 msgid Set Goal (%d hr/month) 如果你需要新增字符串可以用 scripts/extract_strings.py 从 Lua 源码重新提取生成模板python3 scripts/extract_strings.py第一步复制模板创建新语言文件下载源码仓库仓库只读仅用于参考和提交贡献git clone https://gitcode.com/gh_mirrors/si/simpleui.koplugin在locale/目录中把 simpleui.pot 复制一份命名为你的语言代码.po。语言代码遵循 ISO 标准例如语言文件名德语locale/de.po韩语locale/ko.po葡萄牙语巴西locale/pt_BR.po文件名要精确对应 KOReader 的语言设置加载器才会找到它。第二步用 Poedit 填写翻译用任意文本编辑器打开.po文件当然可以但推荐用 Poedit它可以把文件渲染成「原文 | 译文」两栏对照界面还能直观显示翻译完成度在 Poedit 中打开新复制的.po文件先补齐文件头header信息Language-Team、Language、Plural-Forms三个字段复数公式见后文逐条把译文填入msgstr栏例如 de.po 中的一条msgid et al. msgstr u. a.拿不准的字符串留空即可——msgstr为空时SimpleUI 会自动回退显示英文原文界面不会出现空白或乱码保存文件放回locale/目录。完成 ✅效率技巧Poedit 支持「导入已翻译字符串」如果你已有其他项目的同语言词汇库可以批量复用。第三步用 msgfmt 校验避免整份翻译失效⚠️ 这一步最容易被新手跳过却是最重要的.po文件只要有一处语法错误未转义的引号、字符串里混入真实换行整个文件就无法加载你的语言会整体回退成英文。用 gettext 自带的msgfmt工具做快速体检msgfmt --statistics -o /dev/null locale/语言代码.po输出示例locale/xx.po 5400 messages; 3200 untranslated; 0 obsoleteuntranslated未翻译完全正常留空就留空命令报错、输出fuzzy/syntax error说明文件有问题按提示的行号修复后重新校验直到干净为止README.md 中同样建议使用这条命令自检这也是提交翻译贡献前的标准动作。第四步处理复数形式SimpleUI 中大量使用复数字符串如「5 本书」「2 天阅读」它们在.po文件里长这样msgstr[0]是单数msgstr[1]起是复数msgid %d book msgid_plural %d books msgstr[0] %d 本书 msgstr[1] %d 本书不同语言的复数规则差异很大需要在文件头的Plural-Forms中声明公式以 zh_CN.po 和 de.po 为例语言Plural-Forms说明中文zh_CN.ponplurals1; plural0;只有 1 种形式德语de.ponplurals2; plural(n ! 1);单数/复数两种俄语、波兰语nplurals3; ...3 种形式msgstr[0]、msgstr[1]、msgstr[2]都要填加载器 infra/sui_i18n.lua 内置了Plural-Forms解析器会按你声明的公式自动挑选正确形式所以公式一定要抄准可参考你语言所属语族的现有文件。翻译规范5 条铁律来自 CONTRIBUTING.md 的翻译准则照做即可避免 90% 的常见错误永远不要修改msgid只编辑msgstr占位符必须原样保留%d数字、%s字符串、%%百分号要出现在译文中顺序可以调整但不能删除——否则数字会丢失或显示成%!d(MISSING)\n表示换行保持在原文的相对位置不确定的msgstr留空让英文原文兜底语言有复数差异时正确设置Plural-Forms翻译不生效按这张清单排查现象最可能的原因解决办法整个界面还是英文.po文件有语法错误整体加载失败运行msgfmt --statistics定位错误行整个界面还是英文文件名与语言代码不匹配对照 KOReader 语言设置命名如pt_BR.po只有个别数字显示异常msgstr中丢掉了%d/%s/%%与msgid逐位核对占位符换了语言没反应翻译缓存未刷新重启 KOReader另外加载器的回退顺序是精确代码pt_PT.po→ 语言前缀pt.po→ 英文原文所以pt_BR用户找不到巴西葡语时会自动使用葡语属于正常行为。插件升级后如何同步翻译插件更新可能带来新字符串用msgmerge把模板的新条目合并进你的文件已完成的译文会被自动保留msgmerge --update locale/语言代码.po locale/simpleui.pot合并后可能出现标记为「fuzzy」的模糊条目机器判定原文已变化人工确认译文后去掉模糊标记即可最后再跑一遍msgfmt校验。提交你的翻译贡献SimpleUI 欢迎翻译贡献提交流程见 CONTRIBUTING.md新文件放在locale/目录文件名 语言代码 .pomsgfmt --statistics校验通过无语法错误文件头Language、Language-Team、Plural-Forms填写正确所有msgid未被改动占位符齐全提交一条 Pull Request你的语言就会随下个版本与全世界的 SimpleUI 用户见面 小结步骤做什么关键命令/文件1复制模板locale/simpleui.pot →locale/语言代码.po2填写译文Poedit 打开只改msgstr3校验msgfmt --statistics -o /dev/null locale/语言代码.po4升级同步可选msgmerge --update整个过程不写一行代码SimpleUI 的 infra/sui_i18n.lua 会自动发现并加载你的语言文件。挑一个你最熟悉的语言开始翻译吧赞分享【免费下载链接】simpleui.kopluginA highly customizable UI plugin for KOReader that features a home screen, bottom navigation bar, top bar and desktop modules/widgets.项目地址https://gitcode.com/gh_mirrors/si/simpleui.koplugin点击查看免费下载相关推荐如何用智能弹幕助手告别直播中的重复劳动B站直播效率提升300%的秘密如何用智能弹幕助手告别直播中的重复劳动B站直播效率提升300%的秘密 还在为直播时手忙脚乱而烦恼吗当弹幕如潮水般涌来你既要感谢礼物又要回答重复问题还要直播如何为 Helix 添加新语言的完整支持languages.toml 配置与查询文件如何为 Helix 添加新语言的完整支持languages.toml 配置与查询文件 这篇文章完成一个具体任务让一个新语言在 Helix 中完整可用——代码编辑器开发工具CLIDifftastic插件开发如何为新的编程语言添加支持Difftastic插件开发如何为新的编程语言添加支持 引言 Difftastic是一个理解语法的结构差异工具它能够帮助开发者更清晰地查看代码之间的差异。为开发工具CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

条件语句入门:从if/else到分支结构核心原理与实战

条件语句入门:从if/else到分支结构核心原理与实战

这一章的主角是条件语句,也就是你代码里第一次出现“如果……那么……”的决定性瞬间。前面几章我们写的程序都是按顺序一路执行到底,不管什么输入都走同一条路;到了条件语句,程序才真正开始有一点“智能”的味道——它能根据当前…

📅 2026/10/11 21:22:11
大时滞过程控制与MATLAB仿真:Smith预估器、内模控制及参数整定全解析

大时滞过程控制与MATLAB仿真:Smith预估器、内模控制及参数整定全解析

简介:面向自动化、控制工程及仪器仪表方向学习者的一份MATLAB仿真案例文档,围绕大时滞过程(纯滞后)系统的控制难点,系统梳理微分先行、中间微分反馈、史密斯预估补偿及改进型算法的原理与实现。内容既涵盖纯滞后对象传…

📅 2026/10/11 21:17:09
通道注意力LW-ResNet小麦病害识别系统

通道注意力LW-ResNet小麦病害识别系统

简介:本资源是一个面向农业AI应用开发者的轻量级小麦病害识别系统,基于Python实现通道注意力机制与LW-ResNet融合的图像分类模型,适用于作物病害智能诊断、农技推广辅助工具开发及深度学习实践教学。压缩包共12个文件,含3个核心Py…

📅 2026/10/11 21:17:09
MORE NEWS

更多资讯

📰

机器学习多因子选股实战:因子筛选、模型回测与避坑指南

简介:基于机器学习方法构建多因子选股模型的完整实战项目,面向量化金融、金融工程及人工智能相关专业的学生与研究者,可作为毕业设计或课程设计的参考实现。项目围绕单因子测试与机器学习回测两条主线,涵盖因子筛选、共线性分析、…

📰

机器学习重构多因子选股:从IC加权到排序学习的完整实战路线

简介:一份基于机器学习构建多因子选股模型的完整项目,含源代码与文档说明,面向量化金融专业学生及智能选股开发者。项目覆盖单因子测试、因子共线性分析、特征与标签构建,并实现支持向量回归、长短期记忆网络、极端梯度提升、随机…

📰

NVM安装与Node版本切换实战指南

如果你的电脑里同时躺着好几个前端项目,大概率早晚会撞上这样一个场景:某个老项目在 package.json 里写死了 Node 12,另一个新项目要用 Node 18 的新特性,还有一次上线前的紧急修复只需要临时切到 Node 16 跑一下构建。手忙脚乱地…

📰

BP模糊神经网络python实现:兼顾精度与可解释性的预测模型

简介:面向深度学习与模糊系统方向的开发者及研究人员,这份Python实现代码包提供了BP模糊神经网络(BP-FNN)的完整可运行范例。作者添加了详细注解,可配合博文中的算法推导过程逐段理解实现思路,适合课程设计…

📰

Python实现16个经典机器学习算法源码解析与实战

简介:这份基于Python的机器学习算法设计源码包,面向具备一定Python基础和机器学习概念的开发者与学习者,可用于系统掌握多种经典算法的实现与调参思路。资源按算法分章节组织,覆盖分类、回归、聚类、推荐等常见任务,包…

📰

C# WinForm触摸屏虚拟键盘:基于SendInput的无焦点输入方案

简介:这是一份面向C#初学者与WinForm开发者的轻量级模拟键盘工具项目,专为触摸屏交互场景定制,解决无物理键盘设备下的快捷输入需求。项目完整实现悬浮式圆形键盘界面、Win32底层按键注入、SendKeys指令发送及窗体图片填充等核心功能&#xf…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬