如何将po(gettext)转换为json?

7

我已经安装了po2json,使用的命令是

npm install po2json

我遇到了以下错误:

C:\windows\system32>po2json --errorlevel traceback fr.po fr.json
processing 1 files...

po2json: warning: Couldn't handle input file fr.po: Traceback (most recent call
last):

File "translate\misc\optrecurse.pyc", line 513, in recursiveprocess

File "translate\misc\optrecurse.pyc", line 417, in getoutputoptions
ValueError: don't know what to do with input format .po, no template file

我的fr.po文件在哪里

msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-03-23 22:15+0530\n"
"PO-Revision-Date: 2015-03-23 22:21+0530\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Last-Translator: \n"
"Language-Team: \n"
"X-Generator: Poedit 1.7.4\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: fr\n"

\#: text.js:794

msgid "Search Files"

msgstr "Search Files FRENCH"
1个回答

5

有两个不同的命令行工具都被称为po2json第一个用Javascript编写的,可以从NPM安装。第二个用Python编写的,可以从PIP安装。Javascript po2json从gettext格式(PO文件)的未翻译和已翻译条目字典中生成JSON等效项。Python po2json从未翻译的JSON文档和PO文件生成已翻译的JSON文档。

你调用po2json似乎执行了Python程序。虽然你也安装了Javascript程序,但它显然没有被执行。可能你的路径中同时有这两个版本,但Python版本优先于Javascript版本。请检查你的PATH环境变量。或者尝试使用po2json --help命令,我认为Javascript文件不支持此选项。
Python的po2json是Translate Toolkit的一部分,其中一些转换器(如po2json)在没有模板的情况下无法工作。使用json2po,您可以解析未翻译的JSON对象并创建包含未翻译文本片段的POT文件。然后,在进行翻译后,您将获得一个包含已翻译和未翻译条目的PO文件。这只有与原始未翻译的JSON文档一起使用才有用,否则po2json不知道如何重新创建JSON。虽然manpage具有误导性,将模板标记为可选项,但documentation在这方面是正确的明确的。
指定未翻译的JSON文件作为模板:
po2json -t english.json en-fr.po french.json

如果您的原始文件 english.js 不是一个纯 JSON 文件,无法作为单个 JSON 对象解码,您可以尝试使用 po2txt。
po2txt -t english.js en-fr.po french.js

2
这太愚蠢了,至少对于php2po和po2php而言是如此。我已经尝试过po2php,结果与OP一样出现了错误,然后尝试了你的解决方案,我必须说,这个po2php完全失败了。它需要模板文件,但输出文件却像模板文件一样。说真的,如果我有.po文件并想要获取.php文件,那么如果你只有.po文件,怎么可能得到一个模板的.php文件呢? - user1651105
@hlg 这不是一个好的回答,虽然你可以将示例模板格式作为代码键入。 - Keso
@Keso 我已经更新了答案以便澄清。希望能有所帮助。 - hlg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接