1

I am using xgettext with standard input because the input is not available in a file. However, I'd like it to output a filename I specify as a comment above each string.

Current behaviour

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

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

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

Expected behaviour

If I could set a filename to path/to/file.txt, it should output this instead:

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

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

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

I read every option that I can set in the docs and found nothing about it.

4

1 回答 1

1

#: path/to/file.txt:14文本称为“位置”,您对此拥有的最大控制权是--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 提出请求。

于 2017-06-08T15:35:14.307 回答