1

我正在尝试将en_SG翻译添加到 R 包中,但遇到了 gettext 错误,并且我没有看到任何有关问题的来源:

list.files('po')
# [1] "R-myPkg.pot"
# [2] "R-en_SG.po"
tools::update_pkg_po('.')

有输出:

  R-en_SG:. done.
msgfmt: po/R-en_SG.po: warning: PO file header missing or invalid
                       warning: charset conversion will not work
msgfmt: found 1 fatal error
Warning in tools::update_pkg_po(".") :
  running msgfmt on R-en_SG.po failed
  R-en@quot:
2 translated messages.

我到底错过了什么?

4

1 回答 1

1

PO 文件应该有一个“标题”,它实际上是一个带有空字符串翻译的条目。它看起来像这样:

# German translations for qgoda package.
# Copyright (C) 2018 Guido Flohr <http://www.guido-flohr.net>
# This file is distributed under the same license as the qgoda package.
# Guido Flohr <guido.flohr@dontspam.me>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: qgoda 0.1.1\n"
"Report-Msgid-Bugs-To: Guido Flohr <guido.flohr@dontspam.me>\n"
"POT-Creation-Date: 2018-05-16 20:36+0300\n"
"PO-Revision-Date: 2018-05-16 20:37+0300\n"
"Last-Translator: Guido Flohr <guido.flohr@donstspam.me>\n"
"Language-Team: German\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

此标头包含目录的元信息,例如Content-Type标头字段中 PO 文件的编码。您缺少此标头字段。

我不知道你是如何生成文件的po/R-en_SG.po,但你必须确保它至少包含一个最小的 PO 标头。有疑问,您必须手动添加它。

于 2020-05-20T17:17:44.373 回答