openSUSE:本地化指南
在此页面中,您可以找到关于 openSUSE 中软件组件本地化 (L10N, LCN) 的信息。它适用于诸如 YaST、openSUSE 更新小程序或桌面菜单系统之类的程序。有关本地化 openSUSE wiki(此站点)的信息,请参阅 帮助:翻译。
openSUSE Weblate
所有翻译人员都鼓励加入 openSUSE Weblate 翻译门户。所有 openSUSE 翻译都在那里完成。
要使用 openSUSE Weblate,您不需要任何编程技能。您甚至不需要了解翻译文件格式。您只需要对所选语言和既定的计算机术语有很好的了解。
openSUSE/SUSE 特定的翻译项目
除了用于内部项目(如 YaST)和托管项目的通用翻译项目外,还有用于特定目的的翻译项目,这些项目处理仅适用于 openSUSE/SUSE 的翻译。
update-desktop-files 和 desktop-file-translations
始于 2003 年,旨在实现 Novell Linux Desktop 9 的 100% 桌面菜单翻译目标。该实现使用 SUSE-first(过去是 SUSE-only)策略,因此与当前的 upstream first 策略相矛盾。它还支持应用程序类别重映射和修复过时的桌面文件格式。为了将翻译导入回去,glib2 和 KDE 中存在补丁,YaST 包含专用代码。
原始实现使用 spec 文件中的 %suse_update_desktop_file 宏,%install 阶段。
自 2011 年以来,该实现不再依赖于该宏。它使用一个 brp 脚本,该脚本最初删除了所有 upstream 翻译(现在保留它们)。由于该软件包是几个 {meta}-devel-packages 的一部分,因此该脚本会自动部署到使用其中一个元软件包的 BuildRequires 中的所有软件包。
一个自定义工具链在 OpenQA 内网 VPN 上运行,收集所选项目中的所有桌面文件,并将其放入 GitHub 和连接的 Weblate 项目。
2024 年,该项目获得了一个允许上游更改的代码,并且该项目本身被标记为已弃用。
- 引入年份: 2003
- 弃用年份: 2024
- 涉及的软件包数量: > 5000
- 要翻译的字符串数量: > 15000
- 软件包名称:update-desktop-files 和 desktop-translations
- GitHub 项目:desktop-file-translations
- Weblate 翻译项目:desktop-file-translations
- Wiki 文档:Packaging Conventions RPM Macros: %suse_update_desktop_file (deprecated)
- 弃用项目:update-desktop-files deprecation
packages-i18n 和 package-translations
该项目允许翻译 YaST 安装程序中的 rpm 摘要和描述。该工具链下载所选项目中的所有软件包并将其发送到翻译项目。随着时间的推移,发行版中的软件包数量显著增加,因此它生成了一个非常大的翻译项目。这导致翻译覆盖率较低。
- 引入年份: 2009
- 涉及的软件包数量: > 10000
- 要翻译的字符串数量: > 80000
- 软件包名称:package-translations
- GitHub 项目:packages-i18n
- Weblate 翻译项目:packages-i18n
gnome-patch-translations
2004 年,Novell 发布了一个基于大量打补丁的 GNOME 2 的 Novell Linux Desktop 9。许多补丁中的字符串未翻译,导致 i18n 体验较差。这就是为什么创建此项目的原因。它基于 spec 文件 %prep 阶段中使用的专用命令。该工具链运行软件包设置,比较打补丁前后源字符串,并生成一个合并来自更多软件包的此类字符串的翻译项目。后来,openSUSE 迁移到原始 upstream 软件包,该项目失去了重要性。该项目存在于 openSUSE LCN SVN 中,从未迁移到 GitHub 或 Weblate。
- 引入年份: 2006
- 停止主动维护: 2016
- 开始删除过程: 2021
- 涉及的软件包数量: ~ 20
- 要翻译的字符串数量: ~ 120
- 软件包名称:gnome-patch-translation
- SVN 项目:https://svn.opensuse.org/svn/opensuse-i18n/{branch}/lcn (已停用)
- Weblate 翻译项目:N/A
translation-update
一个翻译更新包,允许为任何软件包发布在线更新,覆盖随软件包 rpm 文件分发的翻译。它使用一个专用目录和一个强制该目录覆盖标准 locale 目录的 glibc 补丁。2013 年,它获得了一个更新,允许半自动导入 upstream 翻译。
下游翻译项目存在于 openSUSE LCN SVN 中,从未迁移到 GitHub 和 Weblate。上游导入项目完全由辅助脚本处理,没有翻译界面。
如果存在更新文件,打补丁的 glibc 会强制使用它并完全忽略随软件包分发的翻译。(该实现略有不足,因为最新的 glibc 版本已经支持使用多个文件混合的翻译搜索路径。)如果更新不同步,则会导致回归。这就是为什么在存在多年的最后几年中,它被弃用并删除了翻译存档。
- 引入年份: 2006
- 已弃用: 2019
- 已弃用: 2024
- 涉及的软件包数量:~ 100(由下游翻译,可能重复 upstream),~250(由 upstream 翻译)
- 受影响的字符串数量:~ 20000(由下游提供,可能重复 upstream),~ 50000(由 upstream 提供)
- 软件包名称:translation-update
- SVN 项目:https://svn.opensuse.org/svn/opensuse-i18n/{branch}/lcn (下游部分;已停用)
- Weblate 翻译项目:N/A
translation-update-upstream
过去,GNOME 冻结在产品开发的早期阶段。那时,upstream 翻译通常不完整,更好的支持出现在后续版本中。
该软件包允许半自动导入 upstream 翻译并在发布后提供它们,而无需修改代码。它支持在 rpm spec 文件的 %prep 阶段使用专用命令导入,触发包含的所有软件包重新构建,并使用此宏导入到 translation-update 中,用于不会获得重新构建的软件包(例如,发布后)。该工具链在受控环境中解包源代码,应用补丁,生成 pot 文件,并从选定的 VCS 分支或选定的源代码回溯最新的 upstream 翻译。
由于工具链的性质,完整运行需要大约一天时间,并且对故障敏感。它还会触发数百个软件包进行重新构建。
在后期,GNOME 更新模型发生了变化。即使在后期开发中,版本更新也会完成。它将新的 upstream 翻译直接带到软件包中。这降低了该软件包的重要性。它也导致了保持同步的问题。每次单个软件包版本更新都会使 translation-update-upstream 和 translation-update 软件包过时。由于 translation-update 翻译强制覆盖 upstream 翻译,因此它开始导致翻译回归。
- 引入年份: 2009
- 自弃用以来:2019 年(现在什么也不做)
- 涉及的软件包数量:~ 250(由 upstream 翻译)
- 受影响的字符串数量:~ 73000(由 upstream 提供)
- 软件包名称:translation-update-upstream
- GitHub 项目:N/A
- Weblate 翻译项目:N/A
translate-suse-desktop
有一些桌面文件完全由 openSUSE 或 SUSE 软件包维护者创建和维护,需要翻译。由于之前的项目 update-desktop-files 无法区分此类项目和具有来自 upstream 的桌面文件的软件包,因此创建了一个新项目。它是一个简约的工具,使用 intltool 集成翻译和 OBS getbinaries 功能从更多软件包中收集翻译。工具链中的迁移工具允许在迁移 spec 文件后自动迁移现有的 update-desktop-files 翻译。
- 引入年份: 2024
- 涉及的软件包数量: < 10
- 要翻译的字符串数量: < 30
- 软件包名称:translate-suse-desktop
- GitHub 项目:suse-desktop-translations
- Weblate 翻译项目:suse-desktop-translations
locale langpacks 和 bundles
Locale langpacks 本身并不是翻译项目。这些项目只是从现有软件包中获取 lang 子软件包,并重新打包它们。该工具链获取原始 -lang 布局中的软件包 = 单个软件包的所有翻译,并创建一个包含许多软件包(例如,所有 GNOME 软件包)的翻译文件的单个语言的软件包。使用 rpm requires/provides 和语言设置,这些软件包被安装而不是 -lang 软件包。这种重新打包节省了单语桌面的安装大小。
为了防止文件冲突,它使用了专用的目录 /usr/share/locale-bundle 和 /usr/share/locale-langpack。glibc 中的补丁优先考虑这些目录中的文件。如果单个软件包版本升级,则会导致翻译回归(停留在旧版本)。
- 涉及的软件包数量: ~ 500
- 引入年份: 2006
- 停止主动使用: 2018
- 删除支持: 2024
加入现有团队
鼓励所有翻译人员加入 opensuse-translation 邮件列表,并最终加入语言团队列表。
如果您的语言有语言团队,请联系该团队的协调员。
添加新语言
翻译没有技术限制。大多数项目允许您通过单击一下开始新的翻译。但是,获得良好的本地语言体验需要大量工作。因此,建议拥有一个翻译团队。
如果您的语言已包含在本地化团队列表中,则存在您的语言团队。在加入现有团队中查找有关加入团队的信息。如果您的语言没有团队,请启动一个团队并按以下步骤操作
- 发送邮件至 opensuse-translation@opensuse.org。在您的邮件中,提供以下信息:新语言名称、您的全名、您的联系邮件地址。
- 等待新语言项目的批准。
- 将您的语言添加到本地化团队表格。同时填写有关语言协调员和您的项目页面位置的信息,请参阅语言项目页面。
- 开始本地化。在开始之前阅读开始工作。
使用 Weblate 进行翻译
您可以使用 openSUSE Weblate 获得关于所有翻译项目、其状态和翻译文件的良好概述。在那里使用您的通用 openSUSE 帐户。任何人都可以创建它。
语言团队可以根据团队政策限制访问权限。
您应该只修改您语言团队的文件。
翻译被拆分为项目和组件。组件可以是分支或项目的子域,或者它们的组合。
分支 (Branches)
软件包可以有不同的分支,这在 Weblate 中反映为不同的组件。分支是包含特定版本文件的目录。因此,您可以为同一软件找到不同的翻译文件。大多数项目都有一个用于 Tumbleweed 的 master 或 main 分支,并且项目可以为 Leap 和 SLE 拥有特定的分支。您无需翻译名称中带有 SLE 的组件。这些文件由 SUSE 为 SUSE Linux Enterprise 翻译。我们与他们共享我们的系统。
许多项目没有这些专用分支,并且翻译开发同时适用于 Tumbleweed 和下一个 Leap。
之后您可以选择您的语言。
但是,有一个可用的 PO 下载按钮,并且仍然支持本地离线翻译,鼓励翻译人员在 Weblate 中在线翻译。
只需选择“未翻译的字符串”,您就可以在 Web 界面中输入您的翻译。
最重要的项目
如果您刚开始本地化,您应该从最重要的文件开始。这些文件属于 openSUSE 发行版中最常用的应用程序,例如安装程序或 YaST 控制中心。最重要的文件是
对于安装: * download.o.o
- software-o-o
- landing-page
- openSUSE-EULAs
- release-notes
- skelcd-openSUSE
- yast-slide-show
- packages-i18n/patterns
软件安装和回滚: * libzypp
- snapper
- zypper
- Agama
YaST 基础: * yast-base
- yast-country
- yast-firewall
- yast-installation
- yast-ncurses
- yast-ncurses-pkg
- yast-network
- yast-pam
- yast-pkg-bindings
- yast-qt
- yast-qt-pkg
- yast-storage
- yast-timezone_db
- packages-i18n/yast2
Conferences/Booth
- quiz
SUSE 翻译
我们与 SUSE Linux Enterprise 翻译人员共享 Weblate。有许多 YaST 的 po 文件,您不必翻译。它们用注释标记为
或者类似的内容
深入信息
openSUSE Weblate 只是 openSUSE GitHub 项目和 YaST GitHub 开发门户的界面。它保存这些项目的副本,并将所有翻译工作返回到开发 git 仓库。
关于 PO 和 POT 文件
大多数(但并非全部)项目使用双语 po 文件。源包含英文文本,翻译人员提供翻译。
不允许更改 PO 文件中的原始英文文本。您只能更改翻译。如果您发现原始英文文本中的错误,请使用 Bugzilla 报告它。所有错误的文本必须首先在应用程序的源代码中修复,然后将生成一个新的 POT 文件并自动与您的文件合并。之后,更改的字符串将被标记为模糊(即需要编辑)。
如果您不知道什么是 PO 和 POT 文件,请阅读文章 使用 PO 文件进行工作。
并非所有项目都使用 po 甚至双语文件。但是,由于 Weblate,这个事实对于翻译人员来说几乎是不透明的。可编辑英文翻译的存在是使用单语文件的组件的唯一区别。
您 github 仓库的权限
Weblate 的 github 用户是 opensuse-i18n,但是由于某种原因,github 阻止了将 opensuse-i18n 添加到项目。作为解决方法,我们创建了一个团队 robots-i18n。因此,请将 robots-i18n 添加到您的 github.com/openSUSE 项目,以允许 weblate 将提交推送到您的仓库。
GitHub 上的拉取请求
大多数 Weblate 项目配置为自动将翻译推送到 GitHub。同步时间设置为最后编辑后的 2 小时。
所有 po 文件都可在 github 上获取,并将由 Weblate 和开发者更新。
如果您想在 GitHub 上提交 po 文件,您必须创建一个分支,克隆它,提交,推送并创建一个拉取请求。只有当您无法使用 Weblate 上传“最重要的文件”的 po 文件并且我们即将发布时才这样做。原因是拉取请求必须由项目所有者审查。这可能会花费时间,并且可以执行许多提交。因此可能会发生合并冲突。
如果您选择您的翻译文件,单击上面的名称并选择“信息”,您可以在 Weblate 上找到指向 github 仓库的特殊链接。项目网站是 github 仓库。
最小翻译
我们没有将本地化包含到发行版中的百分比限制。
统计信息
您可以在 Weblate 的 统计信息 中找到有关您的本地化工作状态的信息。如果您的语言未包含在内,请发送电子邮件至 opensuse-translation 邮件列表。
统计信息每天更新一次。更新时间显示在每个页面的底部。如果您的语言中缺少某个文件的任何翻译,则该文件将显示为未翻译并链接到 POT 文件。您可以翻译 POT 文件并提交到 github/Weblate 作为 PO 文件,或者等待 POT 文件的初始化。
语言团队页面
如果您在大型团队中工作,您应该在您的母语中拥有自己的团队页面。要创建它,请在您的语言中使用 openSUSE wiki,并将链接添加到 本地化团队表格。如果您的语言没有翻译成 openSUSE wiki,请在英文 wiki 页面上使用名称 your_language_code Language_name Localization Team 创建团队页面。
旧式离线工作工具
Weblate 优选用于在线工作。但是,您仍然可以使用以下离线 po 编辑器进行离线翻译。
- POEditor - POEditor 是一个基于 Web 的 gettext po 文件和其他流行的本地化格式的翻译工具
- KBabel - KBabel 是 kdesdk3-translate 包的一部分
- Lokalize - Lokalize 是 KDE4 的 KBabel 后继者
- Poedit - (适用于 Windows、MacOS 和 GNU/Linux);请参阅 SDB:Configuring_poedit
- poTranslator - 下载 poTranslator
处理翻译错误
如果您发现翻译错误(未翻译的字符串、翻译不正确的字符串、无法翻译的字符串),请遵循 处理翻译错误 手册。
链接