xgettext 不识别定义为 macroses 的字符串
xgettext does not recognize strings defined as macroses
我对xgettext工具如何解析C源文件有一些误解
并收集字符串以供进一步翻译。
我使用 xgettext 工具版本 0.10.35 和
事实证明它在解析过程中无法识别定义为 macroses 的字符串。
例如,我们有 test_xgettext.c 个文件,下一个内容为:
#include <stdio.h>
#define _(str) str
#define STRING_1 _("string 1")
int main(void)
{
printf(STRING_1);
printf(_("string 2"));
return 0;
}
如果我们运行
xgettext.exe test_xgettext.c -o test_xgettext.pot -k_
我们将有 test_xgettext.pot 个包含下一个内容的文件:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2016-09-01 12:39+0300\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
#: test_xgettext.c:10
msgid "string 2"
msgstr ""
这里POT文件只有"string 2",我的目标是
收集 "string 1" 和 "string 2".
提前感谢您的帮助。
事实证明,如果我们使用数组而不是宏,它适用于 xgettext 0.10.35。
修改后的源文件:
#include <stdio.h>
#define _(str) str
char STRING_1[] = _("string 1");
int main(void)
{
printf(STRING_1);
printf(_("string 2"));
return 0;
}
在这种情况下,我们在 POT 文件中有下一个输出(我遗漏了不重要的行):
#: test_xgettext.c:5
msgid "string 1"
msgstr ""
#: test_xgettext.c:10
msgid "string 2"
msgstr ""
事实证明,它的工作原理与 xgettext 版本 0.19.8.1(Windows 7 Professional)最初预期的一样。源文件:
#include <stdio.h>
#define _(str) str
#define STRING_1 _("string 1")
int main(void)
{
printf(STRING_1);
printf(_("string 2"));
return 0;
}
生成的 POT 文件:
#: test_xgettext.c:5
msgid "string 1"
msgstr ""
#: test_xgettext.c:10
#, c-format
msgid "string 2"
msgstr ""
我对xgettext工具如何解析C源文件有一些误解 并收集字符串以供进一步翻译。
我使用 xgettext 工具版本 0.10.35 和 事实证明它在解析过程中无法识别定义为 macroses 的字符串。
例如,我们有 test_xgettext.c 个文件,下一个内容为:
#include <stdio.h>
#define _(str) str
#define STRING_1 _("string 1")
int main(void)
{
printf(STRING_1);
printf(_("string 2"));
return 0;
}
如果我们运行
xgettext.exe test_xgettext.c -o test_xgettext.pot -k_
我们将有 test_xgettext.pot 个包含下一个内容的文件:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2016-09-01 12:39+0300\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
#: test_xgettext.c:10
msgid "string 2"
msgstr ""
这里POT文件只有"string 2",我的目标是 收集 "string 1" 和 "string 2".
提前感谢您的帮助。
事实证明,如果我们使用数组而不是宏,它适用于 xgettext 0.10.35。
修改后的源文件:
#include <stdio.h>
#define _(str) str
char STRING_1[] = _("string 1");
int main(void)
{
printf(STRING_1);
printf(_("string 2"));
return 0;
}
在这种情况下,我们在 POT 文件中有下一个输出(我遗漏了不重要的行):
#: test_xgettext.c:5
msgid "string 1"
msgstr ""
#: test_xgettext.c:10
msgid "string 2"
msgstr ""
事实证明,它的工作原理与 xgettext 版本 0.19.8.1(Windows 7 Professional)最初预期的一样。源文件:
#include <stdio.h>
#define _(str) str
#define STRING_1 _("string 1")
int main(void)
{
printf(STRING_1);
printf(_("string 2"));
return 0;
}
生成的 POT 文件:
#: test_xgettext.c:5
msgid "string 1"
msgstr ""
#: test_xgettext.c:10
#, c-format
msgid "string 2"
msgstr ""