Transmission 翻译本地化贡献指南:从 Transifex 协作到 GTK+/Qt/macOS 三套翻译管线的仓库实践 Transmission 翻译本地化贡献指南从 Transifex 协作到 GTK/Qt/macOS 三套翻译管线的仓库实践【免费下载链接】transmissionOfficial Transmission BitTorrent client repository项目地址: https://gitcode.com/gh_mirrors/tr/transmission本篇指南围绕 docs/Translating.md 展开系统讲解向 Transmission 项目贡献翻译的完整流程如何加入翻译团队、达到什么样的完成度门槛、以及 GTK、Qt、macOS 三个客户端各自对应的本地化文件格式与构建管线。读完本文你将掌握在 Transifex 上协作翻译的方法、仓库内.po/.ts/.lproj三类翻译资产的分布与作用以及如何通过源码结构验证翻译是否真正被构建进程序。一、翻译工作的基本要求不是直译而是本地化Transmission 官方对翻译者的期望首先是熟悉你要翻译的那个客户端——GTK、Qt 或 macOS 版本各自拥有不同的交互习惯与术语体系。与此同时你需要了解所针对 UI 工具包GTK、Qt和操作系统*NIX、macOS、Windows的本地化实践与规范并掌握目标用户群体惯用的术语表达。文档特别强调不要盲目逐字直译而是应运行对应的客户端程序来检验翻译效果——确认措辞是否贴合界面上下文、文字长度是否破坏了现有布局。也就是说翻译质量最终要以在真实界面中不违和为验收标准这一点贯穿于整个贡献流程。二、加入翻译团队通过 Transifex 协作Mac、Qt 与 GTK 三个客户端的翻译均托管在Transifex平台上统一管理。参与流程为在 Transifex 平台注册账户加入 Transmission 项目项目名为 transmissionbt的翻译团队选择你要翻译的语言与客户端开始提交翻译。Transifex 提供审核review机制如果自觉有余力且愿意承担责任可以向项目方申请基于已审核百分比reviewed percentage的评审流程相关比例协商并非一成不变。仓库内的翻译元数据也印证了这一协作模式例如 po/zh_CN.po 头部记录了历年中/英文贡献者的署名与年份其Language-Team字段同样指向 Transifex 上的语言团队。需要特别说明的历史遗留GTK 客户端的翻译此前曾在 Launchpad 平台管理但这一渠道已停止维护。Launchpad 上不再更新任何短语在该处提交的翻译也不会再被合并回 Transmission——请务必以 Transifex 为唯一有效的提交渠道。三、新语言进入下一个版本的硬性门槛95% 完成度一条明确的规则是新的本地化语言只有在完成度至少达到 95% 时才会被纳入下一个发布版本。这意味着空有几十条翻译的语言是进不了正式发布的贡献者需要把目标语言的绝大多数界面文本都翻译完成才有机会随版本发布。从仓库构建逻辑看这一门槛有对应的落地机制 po/CMakeLists.txt 中维护了一份实际纳入构建的语言列表LINGUAS含da、es、fr、ru、zh_CN、zh_TW等 17 种语言只有当ENABLE_NLS开启时这些语言的.mo文件才会被编译而 po/LINGUAS 则是按字母序排列的完整语言目录清单约 87 种语言二者之间的差异恰好体现了完整目录与达到发布标准之间的筛选关系。换言之只有翻译质量与完成度达标的语言才会被正式纳入构建与发布。四、仓库中的三套翻译管线GTK、Qt、macOS 各成体系Transmission 的三种客户端采用完全不同的本地化技术栈理解它们各自的文件格式是参与翻译的前提。4.1 GTK 客户端gettext 体系.po→.moGTK 客户端使用经典的 GNU gettext 方案所有翻译源文件位于 po/ 目录可翻译源文件清单po/POTFILES.in 列出了所有需要提取翻译字符串的源文件涵盖cli/cli.cc、gtk/下的界面代码、以及libtransmission/中面向用户的提示信息如announcer.c、rpcimpl.c、session.c等排除清单po/POTFILES.skip 用于跳过不应进入翻译流程的文件如third-party/googletest的测试代码编译安装po/CMakeLists.txt 通过msgfmt将每个LANG.po编译为transmission-gtk-${LANG}.mo再安装到${CMAKE_INSTALL_LOCALEDIR}/${LANG}/LC_MESSAGES/transmission-gtk.modesktop/metainfo 的本地化gtk/CMakeLists.txt 在ENABLE_NLS开启时对transmission-gtk.desktop.in与transmission-gtk.metainfo.xml.in同样执行 gettext 处理并把TRANSMISSIONLOCALEDIR与GETTEXT_PACKAGEtransmission-gtk作为编译定义传给源码。以 po/zh_CN.po 为例一个典型条目形如msgid None→msgstr 无同时带有#:注释标明字符串在源码中的出处如../cli/cli.cc:94便于译者对照上下文。这也是 gettext.po文件的标准结构msgid为原文msgstr为译文头部还包含Plural-Forms等语言学参数中文为nplurals1; plural0;。4.2 Qt 客户端Qt Linguist 体系.ts→.qmQt 客户端使用 Qt 官方的翻译工具链翻译文件存放在 qt/translations/ 目录命名规范为transmission_语言代码.ts仓库中已收录约 36 种语言的.ts文件如transmission_zh_CN.ts、transmission_ja.ts、transmission_de.ts。其构建流程定义在 qt/CMakeLists.txt与 GTK 类似先维护一份LINGUAS语言列表在ENABLE_NLS开启时通过tr_qt_add_translation()宏将.ts编译为二进制.qm文件编译后的.qm会被安装到${CMAKE_INSTALL_DATADIR}/transmission/translations见 qt/CMakeLists.txt并在源码编译期以TRANSLATIONS_DIR宏注入程序见 qt/CMakeLists.txt供运行时动态加载。.ts文件是 XML 格式适合用 Qt 官方工具Qt Linguist打开编辑完成翻译后由lrelease/CMake 编译为.qm供程序加载。对译者而言主要工作在.ts文件内的translation元素上并需注意 Qt 特有的占位符如%1、%2与复数处理。4.3 macOS 客户端Apple.lproj/.strings体系macOS 客户端遵循 Apple 的本地化规范所有语言的资源按xx.lproj目录组织仓库中可见zh-CN.lproj、ja.lproj、de.lproj等约 30 个语言目录。其结构在 macosx/CMakeLists.txt 中有清晰定义界面模板XIB存放于Base.lproj/作为基准语言每个非英语语言目录内包含与 XIB 一一对应的.strings文件如MainMenu.strings、通用的Localizable.strings以及InfoPlist.strings用于应用信息本地化构建时依据ENABLE_NLS决定启用全部语言还是仅保留en。macOS 的.strings文件采用Key Value;格式翻译时直接维护各lproj目录下的同名文件即可。五、构建与验证让翻译真正生效翻译完成并同步到仓库后需要验证翻译是否实际进入程序。以下是仓库中与本地化相关的关键构建开关与检查点ENABLE_NLS开关在根 CMakeLists.txt 中定义默认ON。只有开启该选项三种客户端的翻译资源才会被编译并安装关闭时构建出的程序将不含任何本地化数据。语言列表决定产物GTK 以 po/CMakeLists.txt 的LINGUAS为准Qt 以 qt/CMakeLists.txt 的LINGUAS为准。翻译者新增语言时除了提交.po/.ts/.strings文件还需确认该语言是否已加入对应构建列表。运行验证依照文档要求编译安装后应实际运行对应客户端切换到你翻译的语言逐一检查界面文本是否贴合上下文、是否出现被截断的按钮文字或撑破布局的超长字符串、状态栏与菜单中的术语是否与目标用户习惯一致。六、参与翻译的完整工作流小结综合文档与仓库实现一次完整的翻译贡献包含以下步骤在 Transifex 注册并加入 Transmissiontransmissionbt翻译团队选择目标客户端GTK / Qt / macOS与语言对照.po、.ts或.lproj/.strings文件逐条翻译注意保留%1等占位符、遵循Plural-Forms复数规则关注完成度新语言需至少达到 95% 才会被纳入下一个发布版本亦可申请基于已审核百分比的评审方案实际运行程序验证翻译语境与布局避免仅做字面翻译确认目标语言已加入对应 CMake 的LINGUAS列表并在ENABLE_NLS开启下完成构建验证注意 GTK 客户端旧有的 Launchpad 渠道已废弃所有提交均以 Transifex 为准。从 docs/Translating.md 出发结合 po/、qt/translations/、macosx/ 三处翻译资产以及各自的 CMakeLists.txt你可以完整理解 Transmission 的本地化机制并准确找到自己语言与客户端对应的翻译文件——无论是修补一条术语还是从零开启一门新语言的本地化。【免费下载链接】transmissionOfficial Transmission BitTorrent client repository项目地址: https://gitcode.com/gh_mirrors/tr/transmission创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考