【问题标题】:Detecting Errors in .po files检测 .po 文件中的错误
【发布时间】:2012-04-10 10:28:49
【问题描述】:

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

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

我已经在 Google 上进行了相当广泛的搜索,以获取更多关于究竟是什么导致 msgfmt 抛出此错误的信息。

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

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

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

【问题讨论】:

    标签: localization gettext pootle


    【解决方案1】:

    在 vim 中打开你的文件并输入 :set bomb? 并继续输入它,所有那些容易出错的行都会一一对应。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • Windows 用户:链接文章中的建议建议使用 Notepad++ 的菜单选项:编码 > 无 BOM 转换为 UTF-8
        猜你喜欢
        • 1970-01-01
        • 2013-09-29
        • 2016-12-21
        • 2020-11-21
        • 2014-11-14
        • 1970-01-01
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多