Pregunta

C ++ completo gettext i18n () “hola mundo” ejemplo he cambiado la configuración regional de "es_MX" a "pl_PL" y el texto de "Hola, mundo!" a "Entrada no válida. Introduzca una cadena de al menos 20 caracteres de longitud.". La traducción polaca contiene varios caracteres que causen errores "secuencia multibyte inválida" de msgfmt, "Lazo". El texto traducido se ha copiado de una página web.

presumo UTF-8 es el problema. Si es así, lo que se debe utilizar en su lugar?

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
¿Fue útil?

Solución

Editar plt_polish.po y cambiar la línea Content-Type "Content-Type: text / plain; charset = UTF-8 \ n" (Cambiar el juego de caracteres de ASCII a UTF-8)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top