2012-03-26 34 views
8

我使用的是由公司翻譯系統生成的一組.po文件(使用Pootle時,如果相關的話)。我在使用msgfmt實用程序(與-C運營商,它檢查文件的格式)的麻煩,這些文件轉換爲.mo(二進制對口.po文件),我收到以下錯誤:檢測.po文件中的錯誤

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

我搜索了相當廣泛的一種方式,以獲取更多信息,確切地說,導致msgfmt拋出此錯誤。

我也嘗試刪除文件的第一行幾行(這不是目錄的一部分,但只是評論或空翻譯字符串)。

我傾向於認爲這是一個文件編碼問題,但我沒有涉及這種類型的東西,所以我更願意承認這是用戶錯誤。

有沒有人知道我可以更具體地診斷這些文件的錯誤?此外,所有本地化文件都會顯示相同的行爲,而不僅僅是一個特定的文件。

回答

7

這聽起來像是一個BOM問題,PO文件不應該包含它們。另一種方法是從Translate Toolkit運行pocompile,因爲您已經在使用Pootle pocompile應該已經安裝在您的系統上。

5

我的猜測也是這是一個編碼問題。由於錯誤已經出現在文件的前幾個字符中,罪魁禍首可能是byte order mark,它在utf-8中被編碼爲字節序列0xEF,0xBB,0xBF。檢查這種情況的最好方法是使用十六進制編輯器查看文件,或者使用能夠告訴您文件是否包含字節順序標記的編輯器。

例如在vim中,您可以使用set bomb?,它會告訴您要麼bomb要麼nobomb

編輯:Here是一個人的博客條目,具有由字節順序標記開始的utf-8編碼文件引起的完全相同的錯誤消息。

+1

Windows用戶:鏈接文章中的建議建議使用Notepad ++的菜單選項:編碼>轉換爲不帶BOM的UTF-8 – plusjeff 2013-01-23 21:06:55