检测.po文件中的错误

问题描述 投票:10回答:3

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

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

我已经广泛搜索了一种获取更多信息的方法,这些信息确实导致msgfmt抛出此错误。

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

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

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

localization gettext pootle
3个回答
8
投票

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


7
投票

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

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

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


0
投票

在vim中打开文件并输入:set bomb?所有那些容易出错的行都是一个接一个地输入它。

© www.soinside.com 2019 - 2024. All rights reserved.