2009-07-05 7 views
5

msgfmt “invalid multibyte sequence” error on a Polish textは、テンプレートファイルのMIMEコンテンツタイプの文字セットを手動で編集することにより修正されています。 MIMEタイプを設定するためのxgettext、msginit、msgfmtシーケンスのコマンドやオプションはありますか?MIMEタイプを設定するためのxgettext、msginit、msgfmtシーケンスのコマンドまたはオプション?

cat >plt.cxx <<EOF 
// plt.cxx 
#include <libintl.h> 
#include <locale.h> 
#include <iostream> 
int main(){ 
    setlocale(LC_ALL, ""); 
    bindtextdomain("plt", "."); 
    textdomain("plt"); 
    std::cout << gettext("Invalid input. Enter a string at least 20 characters long.") << std::endl; 
} 
EOF 
g++ -o plt plt.cxx 
xgettext --package-name plt --package-version 1.2 --default-domain plt --output plt.pot plt.cxx 
sed --in-place plt.pot --expression='s/CHARSET/UTF-8/' 
msginit --no-translator --locale pl_PL --output-file plt_polish.po --input plt.pot 
sed --in-place plt_polish.po --expression='/#: /,$ s/""/"Nieprawidłowo wprowadzone dane. Wprowadź ciąg przynajmniej 20 znaków."/' 
mkdir --parents ./pl_PL.utf8/LC_MESSAGES 
msgfmt --check --verbose --output-file ./pl_PL.utf8/LC_MESSAGES/plt.mo plt_polish.po 
LANGUAGE=pl_PL.utf8 ./plt 

答えて

6

あり、直接出力文字エンコーディングを設定するための引数はありませんが、POファイル(1保存するときに、あなたのPOエディタが自動的に適切な文字エンコーディングを使用するよう、これはpraticeで、問題にはなりません変換に使用されているすべての文字をサポートしています)、ファイル内のCHARSETをエンコードの名前に置き換えます。そうでない場合は、バグを報告してください。

POTファイルは非ASCII文字が含まれている場合、唯一の問題は次のようになりますが、xgettext入力ファイルのエンコーディングを指定します。このため--from-code引数を、持っていません。入力に非ASCII文字が含まれており、--from-codeが正しいエンコーディングに設定されている場合、出力POTファイルの文字エンコーディングはUTF-8に設定されます(これは入力文字エンコーディングと同じである必要はありません)。ただし、入力ファイルにASCII文字しか含まれていない場合、--from-code=UTF-8は残念ながら効果がありません。

msginit実際には、選択したターゲットロケールの文字エンコーディングが自動的に「適切」に設定されます。しかし、ロケールと文字のエンコードのペアのリストは古いようです。 UTF-8は実際にはすべての言語にとって最良の選択です。

msginitの代わりにpot2poを使用することもできます。これは常に自動的にUTF-8、AFAICSを使用します。しかし、msginitとは異なり、POファイルの複数形を自動的には記入しません。これは問題である場合としない場合があります(これを行うにはPOエディタの仕事と思う人もいます)。

9

ただ、完全なロケール名を与えるとmsginitは正しくそれは私のために働いていない

"Language: ru\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
+1

msginit --no-translator --input=xx.pot --locale=ru_RU.UTF-8 

結果を文字セットを設定します。 – Fabio

+0

+1、ここで美しく働いたpt_BR.UTF-8を使用 – MestreLion

関連する問題