如何给 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),仅供参考

相关新闻

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

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

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

2026/10/11 21:22:14 阅读更多 →
基于Spark的买菜推荐系统设计与实现:从协同过滤到ALS实战

基于Spark的买菜推荐系统设计与实现:从协同过滤到ALS实战

平时在技术社区里经常看到有人问“推荐系统毕设选题选啥”,我的回答一般都很直接: 如果你已经掌握了Java基础,又想让项目有亮点,那“基于Spark的买菜推荐系统”是一个非常值得做的毕设方向。 为什么这么说?核心原因…

2026/10/11 21:22:14 阅读更多 →
数字化工厂APS高级计划排程:从约束建模到落地的完整指南

数字化工厂APS高级计划排程:从约束建模到落地的完整指南

1. 为什么数字化工厂绕不开APS这道坎做制造业数字化转型这些年,我见过太多企业上了ERP、上了MES,设备也联网了,数据也采集了,但一到排产环节,车间计划员还是靠Excel排程,每天光协调插单、催料、调机就要耗掉…

2026/10/11 21:21:13 阅读更多 →

最新新闻

新浪Level2接口SDK接入实战:授权、协议解析与避坑指南

新浪Level2接口SDK接入实战:授权、协议解析与避坑指南

简介:新浪Level2接口SDK是一份面向量化开发与行情分析人员的Java工程,用于对接新浪Level2全推行情,获取股票、基金等品种的深度交易数据。相比普通免费接口,Level2数据在速度与深度上更适合机构级策略,适合有一定Java基…

2026/10/11 22:50:35 阅读更多 →
一个 Key 调用所有模型:2026 四大聚合平台价格、生态与稳定性横评

一个 Key 调用所有模型:2026 四大聚合平台价格、生态与稳定性横评

大模型 API 聚合平台的核心价值一句话就能说清:一个 Key 接入多家大模型,统一计费与访问管理,把供应商切换成本降到最低。市面上的主流玩家分三类——国际商业聚合、国内商业聚合、自托管开源方案,路线不同,取舍也不同…

2026/10/11 22:50:35 阅读更多 →
HOP上游升级SOP:pnpm upstream:update一键同步rhwp并全链路验证的完整流程

HOP上游升级SOP:pnpm upstream:update一键同步rhwp并全链路验证的完整流程

【免费下载链接】hop 项目地址: https://gitcode.com/gh_mirrors/hop22/hop 点击查看 免费下载 HOP 是一款开源的 HWP/HWPX 文档编辑器,桌面外壳由 HOP 团队维护,而文档解析与渲染引擎来自上游项目 rhwp。如何安全地跟随上游版本前进&#x…

2026/10/11 22:50:35 阅读更多 →
Android游戏逆向重构实战:从植物大战僵尸源码2到可运行工程

Android游戏逆向重构实战:从植物大战僵尸源码2到可运行工程

简介:本资源为《植物大战僵尸》Android平台开源实现的完整工程源码,面向Android游戏开发初学者与进阶者,聚焦塔防类游戏架构设计、图形渲染与状态管理等核心实践。压缩包共173个文件,含20个Java源文件(涵盖GameScene、…

2026/10/11 22:50:35 阅读更多 →
基于线性回归的PM2.5预测系统Python源码实战解析

基于线性回归的PM2.5预测系统Python源码实战解析

简介:基于线性回归的PM2.5预测系统源码,是一套面向Python学习者、机器学习入门者及大气环境数据分析场景的小型完整项目。代码以单文件Python脚本承载数据读取、特征构造、模型训练与结果预测等关键流程,配套原始训练/测试CSV表、处理后的特征…

2026/10/11 22:50:35 阅读更多 →
PgQue 监控实战:5 个必须告警的队列健康指标 + 如何揪出卡住的消费者

PgQue 监控实战:5 个必须告警的队列健康指标 + 如何揪出卡住的消费者

【免费下载链接】PgQue PgQue – Zero-bloat Postgres queue built on top of on battle-proven Skypes PgQ. One SQL file to install, pg_cron to tick https://pgque.dev 项目地址: https://gitcode.com/gh_mirrors/pg/PgQue 点击查看 免费下载 PgQue 是一个零膨…

2026/10/11 22:49:35 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →