检测.po文件中的错误

ink*_*dmn 10 localization gettext pootle

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

$ msgfmt -v -C default.po
default.po:1:2: syntax error
msgfmt: found 1 fatal error
Run Code Online (Sandbox Code Playgroud)

我已经广泛搜索了一种获取更多信息的方法,这些信息正是导致msgfmt抛出此错误的原因.

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

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

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

Dwa*_*yne 8

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


Jör*_*ann 7

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

例如在vim中你可以使用set bomb?,它会告诉你bomb或者nobomb.

编辑: 是一个博客条目,其中有一个完全相同的错误消息,由一个以字节顺序标记开头的utf-8编码文件引起.