2009-07-05 10 views
6

Utilizando Complete C++ i18n gettext() “hello world” example Cambié la configuración regional de "es_MX" a "pl_PL" y el texto de "¡Hola, mundo!" a "Invalid input. Ingrese una cadena de al menos 20 caracteres de longitud". La traducción polaca contiene varios caracteres que provocan errores de "secuencia multibyte no válida" de msgfmt, "łąźó". El texto traducido fue copiado de una página web.msgfmt error de "secuencia multibyte no válida" en un texto polaco

Supongo que utf8 es el problema. Si es así, ¿qué debería usarse 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 

Respuesta

6

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)

+0

Agregar " sed --in-place plt.pot --expression = 's/CHARSET/UTF-8 /' "justo antes de msginit. –

+0

Sugiero aplicar la edición al archivo .po, en lugar del archivo pot. –

Cuestiones relacionadas