Red de conocimiento informático - Material del sitio web - Cómo utilizar gradualmente el soporte de internacionalización y localización de qt

Cómo utilizar gradualmente el soporte de internacionalización y localización de qt

La internacionalización se refiere al diseño de código para que tenga una funcionalidad que sea fácilmente portátil a otros países y regiones. La localización es el proceso de traducir el código que respalda la internacionalización al idioma de un país o región para facilitar su uso a los usuarios locales. I18n es la abreviatura de internacionalización y l10n es la abreviatura de localización.

Crear código internacionalizable en Qt

La forma más común es agregar una declaración tr a la cadena a traducir. La sintaxis estándar de la sentencia tr es:

Context::tr(sourceText, comentario), por ejemplo, QString str2 = QTextEdit::'''tr'' '("Carta", "tamaño del papel ");

El contexto y el comentario se pueden omitir, su significado es Contexto: se utiliza para especificar el contexto en el que se encuentra el texto traducido. Porque la misma cadena de palabras se traduce de manera diferente en diferentes circunstancias. Por ejemplo, si todos mueren, el emperador colapsará y la gente común morirá. Comentario: Un comentario que especifica el texto a traducir. Esto se debe a que es posible que la persona que realiza la traducción no sea la persona que escribe el código. Por ejemplo, primavera significa tanto primavera como primavera. Cuando se selecciona el grupo en el diseñador, se usa un resorte azul para agregar Stretch(). Si no se agrega ninguna descripción, se puede traducir a un resorte azul.

Al escribir código, es posible que deseemos colocar todas las cadenas en un solo lugar para que los cambios puedan centralizarse. Cuando realmente trabajamos con cadenas, accedemos a la cadena mediante un puntero constante de caracteres. Por lo tanto, podemos considerar escribir el código de esta manera

//Error, Qt no reconoce esta implementación y no puede traducirla

const char *appName="OpenDrawer 2D";

QString traducido=tr(appName);

//ok, debes usar la cadena QT_TR_NOOP para recordarle a Qt que preste atención a la cadena traducida

const char *appName=QT_TR_NOOP ("OpenDrawer 2D ");

QString traducido=tr(appName);

La sintaxis de QT_TR_NOOP es QT_TR_NOOP(sourceText). La sintaxis es la siguiente

QT_TRANSLATE_NOOP (contexto, texto fuente)

QT_TRANSLATE_NOOP3 (contexto, texto fuente.NOOP3), comentario)

Corresponde a la introducción del contexto. y comentario, su significado no debería ser difícil de entender

Existe otra situación en la que la parte A de la cadena se deriva de una variable. Por lo tanto, echemos un vistazo a las formas correctas e incorrectas de escribir

//La forma incorrecta de escribir no se puede reconocer correctamente

statusBar()-gt;showMessage('''tr ' ''("Host " hostName " encontrado"))." encontrado");

//ok Utilice la función arg() de QString.

Al traducir, debe mantener 1

statusBar()-gt; showMessage('''tr'''("Host 1 encontrado").arg(hostName)

cuando escribiendo Después de tener un programa que contiene declaraciones traducibles, veamos cómo generar un archivo de traducción

Generar un archivo de traducción

Primero, debe modificar el archivo del proyecto .pro. Por ejemplo, agregue

p>

TRANSLACIONES =app_en.ts app_zh_CN.ts app_zh_TW.ts # seguido de la versión a traducir

CONFIGURACIONES =app_en.ts app_zh_CN.ts app_zh_TW.ts # seguido de la versión a traducir

CONFIGURACIONES =app_en.ts app_zh_CN.ts app_zh_TW.ts # seguido de la versión a traducir

p>

Esta es la primera vez que modificamos el Archivo de proyecto .pro /p>

CONFIG = localize_deployment

SYMBIAN_SUPPORTED_LANGUAGES = zh_CN

SYMBIAN_LANG.zh_CN = 31

Nota: SYMBIAN_SUPPORTED_LANGUAGES, SYMBIAN_LANGUAGES, _LANGUAGES, _LANGUAGES y SYMBIAN_LANG_TW.ts _LANGUAGES y SYMBIAN_LANG.zh_CN son las dos líneas que faltan en localize_deployment.prf. Los archivos qs en chino simplificado solo usan códigos de idioma zh y el formato de región "language_region" analizado por el sistema no coincide. primero.

Luego ejecute la siguiente instrucción en el shell (en Qt SDK, abra la línea de comando de Qt para escritorio, actualmente el comando lupdate no genera una versión de Qt para Symbian)

$ lupdate app .pro

$ linguist app_zh_CN .ts

$ linguist app_zh_TW.ts

$ lrelease *.ts

$ lupdate app.pro #App_zh_CN.ts y app_zh_TW.ts se generarán de acuerdo con las instrucciones en .pro $ linguist app_zh _CN.ts traduce uno de los archivos, linguist es una herramienta gráfica, $ linguist app_zh_TW..ts convierte el .ts archivo de texto en un archivo binario .qm, genere app_zh_CN.qm y app_zh_TW.qm para facilitar la carga de la aplicación

traductor.{

addFiles.sources = helloworld_en.ts helloworld_zh_CN.qm helloworld_zh_TW. qm helloworld_zh_HK.qm

addFiles.path = .

DEPLOYMENT = addFiles

}

La configuración regional no es exactamente la misma que la anterior parte de nuestro .qm, hay un .qm. Durante el proceso de consulta, si el nombre de la configuración regional es fr_CA.ISO8859-15, el cargador se cargará en el orden de trollprint_fr_CA..ISO8859-15.qm, trollprint_fr_CA.qm y trollprint_fr. .qm. Si no se cumple ninguna de las condiciones anteriores, se utilizará el idioma predeterminado

Un ejemplo extremadamente simple //main.cpp

int main(int argc, char * argv). [])

{

Aplicación QApplication( argc, argv);

Traductor QTranslator;

translator.load("hellotr_zh" );

app.installTranslator(amp; traductor);

QPushButton hola(QPushButton::tr("¡Hola mundo!"));

hola. resize(100, 30);

hello.show();

return app.exec();

}

Localizado Rutina china: Archivo: HelloWorld.zip, el código de idioma se puede encontrar en el código ISO 639-1 (código de idioma ISO 639 de doble letra).

Compilación remota

La compilación remota debe declarar el siguiente ts qm en el archivo pro; de lo contrario, el compilador remoto no podrá encontrar los archivos ts y qm

OTHER_FILES = helloworld_en.ts helloworld_zh_CN.ts helloworld_en.qm helloworld_zh_CN.qm

Ver solución de problemas del compilador remoto

Documentación relacionada

Internacionalización con Qt