2009-07-05 7 views
6

Mit Complete C++ i18n gettext() “hello world” example Ich änderte das Gebietsschema von "es_MX" zu "pl_PL" und den Text von "Hallo, Welt!" zu "Ungültige Eingabe. Geben Sie eine Zeichenfolge mit mindestens 20 Zeichen ein.". Die polnische Übersetzung enthält mehrere Zeichen, die von msgfmt, "łąźó", Fehler "ungültige Multibyte-Sequenz" verursachen. Der übersetzte Text wurde von einer Webseite kopiert.msgfmt "Ungültige Multibyte-Sequenz" Fehler auf einem polnischen Text

Ich nehme an, utf8 ist das Problem. Wenn ja, was sollte stattdessen verwendet werden?

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 
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 

Antwort

6

bearbeiten plt_polish.po und die Zeile Content-Type ändern zu "Content-Type: text/plain; charset = UTF-8 \ n" (die charset von ASCII nach UTF-8 ändern)

+0

Add " sed --in-place plt.pot --ausdruck = 's/CHARSET/UTF-8 /' "kurz vor msginit. –

+0

Ich würde vorschlagen, die Bearbeitung auf die .po-Datei und nicht auf die Pot-Datei anzuwenden. –