Localization 检测.po文件中的错误

Localization 检测.po文件中的错误,localization,gettext,pootle,Localization,Gettext,Pootle,我使用的是一组由公司翻译系统生成的.po文件(如果相关的话,还有Pootle)。使用msgfmt实用程序(使用检查文件格式的-C运算符)将这些文件转换为.mo(与.po文件对应的二进制文件)时遇到问题,我得到以下错误: $ msgfmt -v -C default.po default.po:1:2: syntax error msgfmt: found 1 fatal error 我在谷歌上搜索了很多信息,想知道到底是什么导致了msgfmt抛出这个错误 我还尝试删除文件的前几行(它们不是目录

我使用的是一组由公司翻译系统生成的
.po
文件(如果相关的话,还有Pootle)。使用
msgfmt
实用程序(使用检查文件格式的
-C
运算符)将这些文件转换为
.mo
(与
.po
文件对应的二进制文件)时遇到问题,我得到以下错误:

$ msgfmt -v -C default.po
default.po:1:2: syntax error
msgfmt: found 1 fatal error
我在谷歌上搜索了很多信息,想知道到底是什么导致了
msgfmt
抛出这个错误

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

我倾向于认为这是一个文件编码问题,但我并没有处理太多此类问题,所以我非常愿意承认这是用户错误


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

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

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


编辑:是某人的博客条目,其错误消息与utf-8编码文件(以字节顺序标记开头)所导致的错误消息完全相同。

这听起来几乎肯定像是BOM的问题,PO文件不应包含这些错误消息。另一种方法是从Translate工具箱运行,因为您已经在使用pocompile,所以您的系统上应该已经安装了pocompile。

在vim中打开您的文件并键入:设置炸弹?,然后继续输入,所有这些容易出错的行都会一行接一行。

Windows用户:链接文章中的建议使用记事本++的菜单选项:编码>转换为UTF-8而不使用物料清单