domingo, 8 de enero de 2017

Traducción de aplicaciones en Qt

Qt proporciona un conjunto de herramientas que nos facilitan la traducción -localización- de nuestra aplicación, permitiendo así que esté en diferentes idiomas.
El problema es que las herramientas de traducción no están integradas en el entorno de desarrollo Qt Creator por lo que el proceso a realizar es manual.



Estos son los diferentes pasos que deberemos hacer:

Identificar los textos a traducir

Para que las herramientas de traducción sepan qué textos deben ser traducidos, debemos usar tr() -o QObject::tr()- cada vez que deseemos utilizar una cadena de texto.
Así, por ejemplo, en lugar de escribir
QString s = "hola"; 
deberemos teclear
QString s = tr("hola");

No debemos preocuparnos por los textos contenidos en los widgets que utilicemos desde el editor de ventanas ya que estos automáticamente son reconocidos por las herramientas de traducción.

Generar archivo de traducción .ts


En este paso deberemos generar los archivos de traducción en el idioma de destino.
En mi caso la aplicación que he generado contiene los textos en inglés y quiero añadir el español.
Este proceso deberá hacerse desde la línea de comandos -cmd en Windows o terminal en Linux-
Abrimos una ventana de comandos en la carpeta donde tengamos el proyecto y tecleamos lo siguiente:

lupdate -pro nombre.pro -ts idioma.ts

Donde:

  • nombre: es el nombre del proyecto -tiene extensión .pro-
  • idioma: es el nombre del fichero resultante para el idioma deseado. En este caso podría ser spanish.ts
Notas:
  • Si lupdate no está en el path y estás en Linux, puedes ver este tutorial donde explico cómo establecer el path para añadir Qt: http://imahgin.blogspot.com.es/2016/12/instalar-qt-en-linux.html -apartado Actualizar el path-. Para Windows, el path está en la carpeta bin donde tengamos instalado Qt - por ejemplo C:\Qt\5.7\mingw53_32\bin-
  • Si los archivos fuentes están en subcarpetas, el comando a utilizar será:
lupdate -locations relative -pro test.pro -ts spanish.ts

Este paso nos generará un archivo con extensión .ts que internamente está en formato xml. Su aspecto será similares a este:

    <message>
        <location filename="window.cpp" line="328"/>
        <source>&amp;Quit</source>
        <translation>unfinished</translation>
    </message>

Como puede verse, tenemos la localización de la frase en el código fuente, el texto fuente y la traducción -undefined si todavía no ha sido traducido-


Traducción de textos

Podemos editar el archivo antes generado manualmente, pero es preferible utilizar la herramienta específica que Qt nos proporciona: Linguist.
Para ello nos vamos a la carpeta bin donde está Qt -en mi caso: Qt/5.7/gcc_64/bin/- y ejecutamos la aplicación Linguist:


Desde el menú superior abrimos el archivo .ts recién creado. y seleccionamos idioma origen y destino. En mi caso los textos contenidos en la aplicación están en inglés y quiero traducirlos a español por lo que deberé dejarlo así:


En la siguiente pantalla nos aparecerá una ventana formada por diferentes paneles:


En la izquierda tenemos el contexto, clasificado según ha detectado objetos, ventanas o clases.
Si expandimos un poco la ventana Source text veremos el texto original y una caja de texto denominada Spanish Translation. Aquí es donde deberemos poner la traducción adecuada, conservando puntuaciones y otros símbolos e indicando en el apartado comments, comentarios que ayuden a establecer el contexto de la frase por si tiene que volverse a traducir o revisar.

Una vez tengamos la traducción de ese texto deberemos validarla antes de pasar al siguiente


Esto nos moverá al siguiente texto a traducir. Cuando hayamos acabado deberemos guardar el archivo.

Creación e importación del recurso
El siguiente paso es generar el archivo de recurso .qm. Para ello deberemos volver al terminal y teclear:
lrelease spanish.ts

Esto nos generará un archivo binario spanish.qm el cual deberemos importar a nuestro proyecto. Para ello nos vamos a Qt Creator y lo añadimos a nuestros resources en la carpeta que deseemos con Add existing files...




seleccionando el archivo .qm generado previamente:


Carga del idioma en nuestra aplicación

Una vez tengamos los diferentes idiomas, deberemos decirle a nuestra aplicación que utilice el deseado.
Para seleccionar la traducción deseada, buscaremos dónde está nuestro objeto instanciado de QApplication -normalmente en main.c,

    QApplication app(argc, argv);

Justo debajo escribiremos lo siguiente:

    QTranslator translator;
    translator.load(":/translations/spanish.qm");
    app.installTranslator(&translator);

Deberemos añadir el include correspondiente en la cabecera:

    #include <QTranslator>

Mantenimiento de las traducciones

Cada vez que modifiquemos nuestro código añadiendo nuevos textos, deberemos repetir el proceso. La herramienta lupdate tiene en cuenta las modificaciones por lo que al utilizar linguist, veremos los textos nuevos o modificados.
Comentarios
0 comentarios
Para Comentar Elige el Sistema de Comentario de tu Agrado:
Comentarios Comentarios Comentarios