gpt4 book ai didi

c - xgettext 无法识别定义为宏的字符串

转载 作者:行者123 更新时间:2023-11-30 16:57:50 25 4
gpt4 key购买 nike

我对xgettext工具如何解析C源文件有一些误解并收集字符串以供进一步翻译。

我使用 xgettext 工具版本 0.10.35 并且事实证明,它在解析过程中无法识别像宏一样定义的字符串。

例如,我们有 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 文件中只有“字符串 2”,我的目标是收集“字符串 1”和“字符串 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 ""

关于c - xgettext 无法识别定义为宏的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39268645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com