使用 xgettext 和 msginit 生成 .po 文件时出现 msgfmt 错误

Posted

技术标签:

【中文标题】使用 xgettext 和 msginit 生成 .po 文件时出现 msgfmt 错误【英文标题】:msgfmt error when generating .po file with xgettext and msginit 【发布时间】:2021-07-11 07:05:18 【问题描述】:

使用以下命令生成 .po 文件时:

xgettext test.js -o test.pot -L javascript --from-code=UTF-8

msginit -i test.pot -o de.po --locale=de

我得到以下标题:

# Copyright (C) 2021 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# test <test@test.com>, 2021.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-04-16 11:39+0300\n"
"PO-Revision-Date: 2021-04-16 11:40+0300\n"
"Last-Translator: test <test@test.com>\n"
"Language-Team: German\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

当检查这个文件时 msgfmt -cv /dev/null de.po 我收到以下错误

msgfmt: /dev/null: warning: PO file header missing or invalid
                   warning: charset conversion will not work
msgfmt: found 1 fatal error

我在文件de.po 中将charset=ASCII 更改为charset=UTF-8,但得到了同样的错误。我正在使用 Ubuntu Server 20.04 和 gettext-tools 版本 0.19.8.1

【问题讨论】:

【参考方案1】:

如果您调用msgfmt -cv /dev/null de.po,那么/dev/null 是第一个输入文件,这不是您想要的。但难怪/dev/null 不包含有效的 PO 标头。

您可能想要的是:msgfmt -cvo /dev/null de.po

-o 表示/dev/null 是输出文件。

【讨论】:

以上是关于使用 xgettext 和 msginit 生成 .po 文件时出现 msgfmt 错误的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 文件解析可翻译的消息

如何让 poedit 工作?

如何使用 prisma 2 或 3 和 nexus 模式生成同时生成生成的 crud 和“ondelete 级联”

如何使用openssl生成RSA公钥和私钥对 / 蓝讯

如何使用实体 bean 类名和属性名生成类和属性?

如何生成密钥,私钥,签名