当使用xgettext
生成.pot
文件时,在生成文件的顶部我得到这个:
# SOME DESCRIPTIVE TITLE.
...
#, fuzzy
...
是什么#, fuzzy
意思?
我知道如果翻译模糊(质量很差)是什么意思,但文件顶部的意思是.pot
什么?
xgettext
#, fuzzy
当它在消息文件中自动生成项目标头时,在顶部添加条目。该评论本身没有特殊含义:它只是指出人类需要出现并填补空白。
让我们深入挖掘一下源。
首次创建消息文件时,xgettext
将项目信息添加到生成的消息文件的顶部(除非您通过--omit-header
):
$ cat hello.c
int main() {
printf(gettext("Hello World\n"));
return 0;
}
$ xgettext -o- hello.c
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-08 11:51-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:3
#, c-format
msgid "Hello World\n"
msgstr ""
支持这一点的逻辑可在xgettext.c:construct_header()
. 在该函数的底部,新生成的标题信息被标记为模糊:
mp->is_fuzzy = true;
由于此文本已被标记为模糊,因此将#, fuzzy
注释标记添加到文本中。这里的目的是提高意识:计算机程序将文本添加到消息文件中,并且人类需要采取行动。特别是,需要一个人来填写空白:修订日期、翻译者姓名、语言等。
根据文档,在这种情况下使用“#,fuzzy”注释是有意义的:
【模糊词条】通常需要译者修改。
模糊条目,即使它们出于大多数其他目的考虑了翻译条目,通常也需要翻译人员进行修改。这些可以通过应用程序 msgmerge 来根据新的 PO 模板文件更新旧的翻译 PO 文件来生成,当此工具假设某些新的 msgid 仅略微修改了旧的 msgid 并选择配对它的想法时成为新修改条目的旧翻译。原始字符串(msgid 字符串)的细微变化往往会反映在翻译后的字符串中,这需要翻译人员的干预。因此,msgmerge 可能会将某些条目标记为模糊。
我#, fuzzy
在使用 Django 生成消息文件 (.po) 时看到出现,并且原始文本 ( msgid
) 已更改,在这种情况下,翻译人员应该知道翻译后的文本也应该更改。