跳到主要内容
版本:1.5.4

2.3 字符转义和格式

在翻译过程中你会遇到不少特殊含义的字符。有些会被你的编辑器突出显示,但你还是得知道含义。

2.3.1 Gettext 字符转义

Gettext 本身的转义序列和C的类似,也就是 \t 为 TAB,\n 为 LF,\v 为竖直制表符,\\ 为单个反斜杠, \" 表示单个直双引号。例如 he\"\\tllo\" 这个片段就会得到 he" llo"。 当你在一个消息的首尾处看到 LF 的时候,你也该保证你的消息首尾有对应的 LF ,保证换行之类的不会 闯祸。除了这个就没有特别需要注意的了。

2.3.2 编程语言格式

PO 文件中常会标记出 xxx-format 的字符串,这说明这个字符串遵循 xxx 语言的格式化方式。基本上记住 glibc printf 的方式就够处理大部分内容了。如果你不巧翻译了一些奇怪的东西,例如 scheme-format,你可能需要换脑子看看格式化命令是不是有跳转功能(对于 Scheme 的确就是这么用的)。

Gettext 的 msgfmt 对于认为是 c-format 或类似的字符串有一个拓展,可以指派使用第几个参数,例如 $2%s 就是把字符串后第二个参数当作字符串填进来。这样做可以有效地修正语序,而不需要费劲调整副词顺序。

# 例如在 KDE 中某处的 qt-format:
msgid "%1 articles match rule %2"
msgstr "匹配规则 %2 的文章有 %1 个"
# GNOME 中 c-format 则是这样:
msgid "%d articles match rule %d"
msgstr "匹配规则 %2$d 的文章有 %1$d 个"

任何一个参数的顺序进行了调整,则在这一句译文中所有参数都必须注明原文位置,否则无法通过格式检查。

2.3.3 XML 实体转义

一些项目,例如 GConf,会涉及到裸露的 XML 部分。如果你要表达 & < > 这三个字符,需要分别使用 &amp; &lt; &gt; 指代。一般来说直接模仿 msgid 的样子就好了。

2.3.4 翻译中的保留字

Gtk+/GConf 中经常出现 TRUE 和 FALSE 这样的字符串,多见于以 .glade 为后缀名的文件中。不要翻译它们——程序找不到它们会出错。除此之外,各种 possible values 也不该翻译,顶多用括号指明中文意思。

2.3.5 快捷键

在 Qt 和 Gtk 中都存在快捷键定义,分别使用 &x_x 的格式指定快捷键 x。使用 msgfmt 的 --check-accelerators 可以检查这些字符(检查 Gtk 时加 =_)。 如果翻译出的文字中不含有原有的快捷键字符,那么在空格后跟一个括号包含那个字符的大写形式;否则使用翻译结果中的原快捷键字符。快捷键使用西文括号且不前置空格,此括号标记置于字串中省略号之前。

KDE/Qt 样例:

msgid "C&lear..."
msgstr "清除(&L)..."
# 不是 Glimmer 编辑器(&G) ——已经有一个G可以用了
msgid "&Glimmer Editor"
msgstr "&Glimmer 编辑器"'

GNOME/Gtk 样例:

#  顺便注意一下 GNOME HIG 要求的正确省略号。
msgid "_Setup…"
msgstr "设置(_S)…"
# 不是“现在读取 CDDB(_C)”
msgid "Get _CDDB Now"
msgstr "现在读取 _CDDB"
#. 以下情况的翻译有点特别。
#. 复制为“编辑”菜单的条目,只有这样写才能保证显示正确!
msgid "/_Edit"
msgstr "/编辑(_E)"
msgid "/Edit/C_opy"
msgstr "/编辑(E)/复制(_O)"