Cómo utilizar gradualmente el soporte de internacionalización y localización de qt
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"; p >
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