检测.po文件中的错误

时间:2012-03-26 21:39:54

标签: localization gettext pootle

我正在使用公司翻译系统生成的一组.po文件(如果相关,则使用Pootle)。我无法使用.mo实用程序(使用.po运算符将这些文件转换为msgfmt-C文件的二进制文件),后者检查格式文件),我收到以下错误:

$ msgfmt -v -C default.po
default.po:1:2: syntax error
msgfmt: found 1 fatal error

我已经广泛搜索了一种方法来获取有关正确导致msgfmt引发此错误的更多信息的方法。

我也尝试删除文件的前几行(它们不是目录的一部分,只是注释或空翻译字符串)。

我倾向于认为这是一个文件编码问题,但我没有对这类事情做过多处理,所以我非常愿意承认这是用户错误。

有人知道如何使用这些文件更具体地诊断错误吗?此外,所有本地化文件都会出现相同的行为,而不仅仅是一个特定的文件。

3 个答案:

答案 0 :(得分:8)

听起来几乎肯定是BOM的问题,PO文件不应该包含它们。另一种方法是从Translate Toolkit运行pocompile,因为您已经在使用Pootle pocompile应该已经安装在您的系统上。

答案 1 :(得分:7)

我的猜测也是这是一个编码问题。由于错误已经出现在文件的前几个字符中,因此罪魁祸首可能是byte order mark,其在utf-8中被编码为字节序列0xEF,0xBB,0xBF。检查这个的最好方法是使用十六进制编辑器查看文件,或者使用一个编辑器来判断文件是否包含字节顺序标记。

例如,在vim中,您可以使用set bomb?,它会告诉您bombnobomb

编辑: Here是某人的博客条目,其中包含由字节顺序标记开头的utf-8编码文件引起的完全相同的错误消息。

答案 2 :(得分:0)

在vim中打开文件,然后键入:set bomb?,然后继续输入将容易出错的所有行一一对应。