覆盖 xgettext 的输出文件名

Overwrite output filename of xgettext

我正在使用 xgettext 和标准输入,因为输入在文件中不可用。但是,我希望它输出我指定的文件名作为每个字符串上方的注释。

当前行为

#: Standardinput:13
msgid "User"
msgstr ""

#: Standardinput:13
msgid "Invite"
msgstr ""

#: Standardinput:14
msgid "Group"
msgstr ""

预期行为

如果我可以将文件名设置为 path/to/file.txt,它应该输出为:

#: path/to/file.txt:13
msgid "User"
msgstr ""

#: path/to/file.txt:13
msgid "Invite"
msgstr ""

#: path/to/file.txt:14
msgid "Group"
msgstr ""

我阅读了 docs 中可以设置的每个选项,但一无所获。

#: path/to/file.txt:14 文本称为 "location",您对此的最大控制是 --no-location--add-location 标志。请参阅 xgettext.c:xgettext_open() 了解源代码原因。

与此同时,显而易见的事情是从标准输入中获取输入,将输出通过管道传输到标准输出,手动替换,然后存储在目标 PO 文件中。示例:

xgettext -k_ -Lc -o- - < hello.c \
    | sed 's@#: standard input:@#: path/to/file.c:@g' \
    > messages.po

显然更改 sed 调用中的模式以匹配您的 xgettext 格式和您要表示的文件。

不太明显的是将标准符号链接到看起来像您的目标的文件名。示例:

$ ln -s /dev/stdin file.c
$ echo 'int main() { printf(gettext("Hello World\n")); return 0; }' \
      | xgettext --omit-header -o- file.c
#: file.c:1
#, c-format
msgid "Hello World\n"
msgstr ""

能够为输出目的命名文件,当输入是标准输入时,这似乎是一个合理的功能。我建议在 GNU 打开一个请求。