Domanda

completa C ++ i18n gettext () “ciao mondo” esempio ho cambiato il locale da "es_MX" a "pl_PL" e il testo da "ciao, mondo!" a "Input non valido. Inserire una stringa lunga almeno 20 caratteri.". La traduzione polacca contiene diversi personaggi che causano errori "non valido di sequenza multibyte" da msgfmt, "lazo". Il testo tradotto è stato copiato da una pagina web.

presumo utf8 è il problema. Se è così, che cosa dovrebbe essere usato al posto?

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
È stato utile?

Soluzione

Modifica plt_polish.po e cambiare il Content-Type linea a "Content-Type: text / plain; charset = UTF-8 \ n" (Modifica il set di caratteri da ASCII a UTF-8)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top