第9章. PO 翻译

9.1. 简介

GNU gettext 系统为翻译人员提供了一种简单的方法来创建和维护文档的翻译。可翻译的字符串从原始文档中提取到 PO(可移植对象)文件中。翻译后的字符串版本使用单独的编辑器输入。这些字符串可以直接使用,也可以构建到原始文档的完整翻译版本中。

9.2. 快速入门

假设已经执行了 快速入门 中所示的过程。TRANSLATOR 选项是必需的,并且在 textproc/docproj 端口中默认已启用。

此示例显示了创建简短的 闰秒 文章的西班牙语翻译。

步骤:安装 PO 编辑器
  1. 需要 PO 编辑器来编辑翻译文件。此示例使用 editors/poedit

    # pkg install poedit
步骤:初始设置

首次创建新翻译时,必须创建或从英文原文复制目录结构

  1. 为新翻译创建一个目录。英文文章源代码位于 ~/doc/documentation/content/en/articles/leap-seconds/。西班牙语翻译将位于 ~/doc/documentation/content/es/articles/leap-seconds/。路径相同,除了语言目录的名称。英文文章源代码位于 ~/doc/en/articles/leap-seconds/。西班牙语翻译将位于 ~/doc/es/articles/leap-seconds/。路径相同,除了语言目录的名称。

    % mkdir ~/doc/documentation/content/es/articles/leap-seconds
  2. 将原始文档中的 _index.po 复制到翻译目录

    % cp ~/doc/documentation/content/en/articles/leap-seconds/_index.po \
      ~/doc/documentation/content/es/articles/leap-seconds/

假设文档或语言也正在通过 Weblate 进行翻译。在这种情况下,最好从那里获取 .po 文件并将翻译后的文档上传回平台,通过 Weblate 集中翻译工作以避免重复工作。

请参阅 Weblate 上的离线翻译 一章中如何下载 .po 文件。

步骤:翻译

使用 PO 编辑器在 PO 文件中输入翻译。有几个不同的编辑器可用。此处显示了来自 editors/poeditpoedit,因为它简单且需求最少。其他 PO 编辑器提供了使翻译工作更容易的功能。Ports 集合提供了其中几个编辑器,包括 devel/gtranslator

% poedit documentation/content/es/articles/leap-seconds/_index.po
保存 PO 文件非常重要。它包含翻译人员完成的所有工作。
  1. 步骤:生成翻译后的文档

    % cd ~/doc
    % ./tools/translate.sh documentation es articles/leap-seconds

    生成翻译后的文档

  2. 生成的文档的名称与英文原文的名称匹配,通常为 _index.adoc

    % cd ~/doc/documentation
    % make

通过将其渲染为 HTML 并使用 Web 浏览器查看来检查生成的文件

9.3. 创建新的翻译

创建新翻译文档的第一步是找到或创建一个目录来保存它。FreeBSD 将翻译后的文档放在一个以其语言和区域命名的子目录中,格式为 langlang 是一个由两个小写字母组成的代码。
表 1. 语言名称语言地区

翻译后的目录名称

英语

美国

en

孟加拉语

孟加拉国

bn-bd

丹麦语

丹麦

da

德语

德国

de

希腊语

希腊

el

西班牙语

西班牙

es

法语

法国

fr

匈牙利语

匈牙利

hu

意大利语

意大利

it

日语

日本

ja

韩语

韩国

ko

蒙古语

蒙古

mn

荷兰语

荷兰

nl

波兰语

波兰

pl

葡萄牙语

巴西

pt-br

俄语

俄罗斯

ru

土耳其语

土耳其

tr

中文

中国

tr

zh-cn

台湾

zh-tw

翻译位于主文档目录的子目录中,此处假设为 ~/doc/documentation/,如 快速入门 中所示。例如,德语翻译位于 ~/doc/documentation/content/de/,法语翻译位于 ~/doc/documentation/content/fr/

每个语言目录包含以文档类型命名的单独子目录,通常为 articles/books/

组合这些目录名称可以得到文章或书籍的完整路径。例如,NanoBSD 文章的法语翻译位于 ~/doc/documentation/content/fr/articles/nanobsd/,手册的蒙古语翻译位于 ~/doc/documentation/content/mn/books/handbook/

将文档翻译成新语言时,必须创建一个新的语言目录。如果语言目录已存在,则只需要在 articles/books/ 目录中创建一个子目录。

示例 1. 创建移植者手册的西班牙语翻译

  1. 创建 移植者手册 的新西班牙语翻译。原文是一本书,位于 ~/doc/documentation/content/en/books/porters-handbook/

    % cd ~/doc/documentation/content/es/books
    % mkdir porters-handbook
  2. 西班牙语书籍目录 ~/doc/documentation/content/es/books/ 已经存在,因此只需要为移植者手册创建一个新的子目录

    % cd porters-handbook
    % cp -R ~/doc/documentation/content/en/books/porters-handbook/* .

    复制原始书籍的内容

现在,文档结构已准备好供翻译人员使用 po4a 命令开始翻译。

9.4. 翻译

gettext 系统极大地减少了翻译人员必须跟踪的事物数量。要翻译的字符串从原始文档中提取到 PO 文件中。然后,使用 PO 编辑器输入每个字符串的翻译版本。

FreeBSD PO 翻译系统不会覆盖 PO 文件,因此可以随时运行提取步骤以更新 PO 文件。

使用 PO 编辑器编辑文件。在这些示例中显示了 editors/poedit,因为它简单且需求最少。其他 PO 编辑器提供了使翻译工作更容易的功能。Ports 集合提供了其中几个编辑器,包括 devel/gtranslator

在线翻译文档被证明是 FreeBSD 上最简单的文档翻译方法,因为它允许多个用户协作处理同一个文件,有效地分担工作量。有关更多详细信息,请参阅下一章,Weblate 翻译

9.5. 翻译技巧

9.5.1. 保留 AsciiDoc 宏

保留英文原文中显示的 AsciiDoc 宏。

示例 2. 保留 AsciiDoc 宏

英文原文

msgid ""
"This example shows the creation of a Spanish translation of the short "
"extref:{leap-seconds}[Leap Seconds] article."

西班牙语翻译

msgid ""
"Este ejemplo muestra la creación de un artículo con poco contenido como el artículo "
"extref:{leap-seconds}[Leap Seconds]."

9.5.2. 保留空格

保留要翻译的字符串开头和结尾处的现有空格。翻译版本也必须包含这些空格。

9.5.3. 原样标签

某些标签的内容应逐字复制,不进行翻译

  • man(1)

  • 链接

  • 图片

  • 包含

  • 警告

  • ID

  • 标题标签

  • 源代码

9.6. 构建翻译后的文档

可以随时创建原始文档的翻译版本。原始文档中任何未翻译的部分都将以英文包含在生成的文档中。大多数 PO 编辑器都包含一个指示器,显示翻译的完成程度。这使得翻译人员可以轻松地了解何时翻译的字符串足够多,可以构建最终文档。

Weblate 章节提供了如何构建翻译后的文档的完整示例。

9.7. 提交新的翻译

准备要提交的新翻译文件。这包括将文件添加到版本控制系统,设置其他属性,然后创建要提交的差异。

这些示例创建的差异文件可以附加到文档错误报告代码审查中。

示例 3. NanoBSD 文章的西班牙语翻译
  1. ~/doc/基本目录创建新文件的差异,以便显示完整路径和文件名。这有助于提交者识别目标语言目录。

    % cd ~/doc
    % git diff documentation/content/es/articles/nanobsd/ > /tmp/es_nanobsd.diff

Weblate 章节提供了如何提交新的翻译的完整示例。


上次修改时间:2024 年 3 月 9 日,作者:Danilo G. Baio