Internacionalización de aplicaciones QT
A la hora de desarrollar un programa es importante tener en cuenta si en un futuro querremos darle soporte para otras lenguas. QT nos permite el desarrollo de nuestras aplicaciones con soporte para la internacionalización de lenguajes sin requerir apenas un esfuerzo adicional. En esta entrada os indico los pasos básicos a tener en cuenta para desarrollar una aplicación en QT con soporte para inglés y español.
Introducción
Antes que nada hay que indicar las fuentes. La mayor parte de la información que encontraréis aquí podéis hallarla mucho más detallada en Qt Linguist Manual y en Internationalization with Qt. Para lograr nuestro objetivo de internacionalizar nuestra aplicación deberemos usar siempre que podamos la clase QString para mostrar el texto visible para el usuario. Además siempre que nuestro programa uso “texto entrecomillado” para un texto que será mostrado al usuario, hay que asegurarse de que sea procesado por la función QCoreApplication::translate(). Esencialmente para conseguir esto tan solo tendremos que usar el método estático QObject::tr(). Por ejemplo, si mostramos un cuadro de diálogo para solicitar un archivo, tendremos que hacerlo de la siguiente forma:
QString directory = QFileDialog::getExistingDirectory(this, tr("Selecciona el directorio de imágenes" <img src='http://plagatux.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , ".", options);
Cómo se puede apreciar, hay una cadena que encerramos entre la función tr(), y otra que no. En este caso he decidido no llamar a la cadena con el punto mediante el método tr() ya que un simple punto no requiere ser traducido.
Preparar nuestro proyecto
Una vez que usamos el método tr() a lo largo de nuestra aplicación, podemos empezar a producir las traducciones del texto visible de nuestro programa. Lo primero que tenemos que hacer es configurar nuestro archivo de proyecto (.pro) para que genere los archivos de traducción apropiados y configurar algunas opciones necesarias. Aquí muestro el archivo de configuración de mi proyecto:
TARGET = miprogrma TEMPLATE = app CONFIG += link_pkgconfig debug PKGCONFIG += milibreria opencv SOURCES += main.cpp mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui TRANSLATIONS = miprograma_es.ts miprograma_en.ts CODECFORTR = UTF-8 CODECFORSRC = UTF-8
Lo realmente importante respecto a la internacionalización en este archivo, serían las tres últimas líneas. Mediante la opción TRANSLATIONS especificamos los archivos de traducción que estarán disponibles en nuestro proyecto. Como podréis apreciar, normalmente se indican los nombres de los archivos de internacionalización mediante la sintaxis: nombreprograma_LOCALE, donde LOCALE hace referencia al código de dos carácteres correspondiente con nuestro lenguaje. La extensión de dichos archivos siempre será ts, para que el programa encargado de generar dichos archivos (lupdate) los reconozca satisfactoriamente. Las dos últimas líneas hacen referencia a la codificación utilizada por las fuentes. En caso de que uséis codificación latin-1 no será necesario utilizar estas dos últimas líneas.
Generar los ficheros de traducción
Una vez que hemos configurado adecuadamente nuestro proyecto el resto de pasos son muy sencillos. Utilizaremos básicamente tres aplicaciones Qt Linguist, lupdate y lrelease (para más información ver Qt Linguist manual). La traducción de una aplicación Qt normalmente costa de tres pasos:
- Ejecutar lupdate para extraer el texto traducible del código fuente C++ de la aplicación Qt, en los ficheros resultantes para traducción (ficheros .ts). Esta utilidad reconoce todas las llamadas al método tr() y otras macros, y produce un fichero .ts por cada idioma especificado en el fichero de configuración. El único parámetro que hay que pasar al programa es el nombre del fichero del proyecto.
- Proporcionar traducciones usando el programa Qt Linguist. No daré más detalles aquí, ya que viene perfectamente explicado en el manual de Qt, y a pesar de estar en inglés, hay muchísimas ilustraciones que hablan por si solas.
- Ejecutar lrelease para obtener los ficheros binarios .qm a partir de los ficheros .ts. El único parámetro que hay que pasar al programa es el nombre del fichero del proyecto.
Aplicar traducciones en el código
Realmente el esfuerzo que tenemos que hacer para elegir un idioma u otro es mínimo. Tan solo tendremos que añadir el siguiente código a nuestro fichero principal (main.cpp):
QString locale = QLocale::system().name(); QTranslator translator; translator.load(QString("miprograma_" <img src='http://plagatux.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> + locale); a.installTranslator(&translator);
Básicamente examina que idioma tiene el sistema establecido y lo añade a “nombreprograma_” para buscar el fichero de traducción adecuado. Si nuestro sistema está en español y queremos probar si la traducción en inglés se mostrará correctamente si distribuimos el programa solo nos bastará con ejecutar el programa por consola de la siguiente forma:
LANG=en_US ./miprograma
loading...


Últimos comentarios