12

私は.po会社の翻訳システムによって生成された一連のファイルを使用しています (関連する場合は Pootle を使用)。これらのファイルを (ファイルの形式をチェックする演算子を使用して)ユーティリティを使用して (ファイルに.mo相当するバイナリ)に変換する際に問題が発生しました。次のエラーが表示されます。.pomsgfmt-C

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

msgfmtこのエラーをスローする正確な原因に関する詳細情報を取得する方法について、かなり広範囲にグーグル検索しました。

また、ファイルの最初の数行 (カタログの一部ではなく、コメントまたは空の翻訳文字列) を削除しようとしました。

これはファイル エンコーディングの問題だと思いがちですが、私はこの種のことをあまり扱っていないので、これがユーザー エラーであることは認めます。

これらのファイルでエラーをより具体的に診断する方法を知っている人はいますか? また、特定の 1 つのファイルだけでなく、ローカライズされたすべてのファイルで同じ動作が見られます。

4

3 に答える 3

8

私の推測では、これはエンコーディングの問題でもあります。エラーはファイルの最初の数文字にすでに表示されているため、原因はおそらくバイト順マークであり、utf-8ではバイトシーケンス0xEF、0xBB、0xBFとしてエンコードされます。これを確認する最良の方法は、16進エディターでファイルを調べるか、ファイルにバイト順マークが含まれているかどうかを確認できるエディターを使用することです。

たとえば、vimで使用するset bomb?と、またはのいずれかがbomb表示されnobombます。

編集: これは、バイト順マークで始まるutf-8エンコードファイルによって引き起こされたまったく同じエラーメッセージを持っている人のブログエントリです

于 2012-04-03T15:21:05.530 に答える
8

ほぼ間違いなく BOM の問題のように思えますが、PO ファイルには BOM を含めるべきではありません。Pootleを既に使用しているため、翻訳ツールキットからpocompileを実行することもできます。pocompile はシステムにインストールされているはずです。

于 2012-09-13T08:15:03.347 に答える