Interfaz de usuario multilingüe: un ejecutable, N idiomas (tercera y última parte)

En la última entrega dimos un paso más en el desarrollo de aplicaciones multilingües, separando nuestro ejecutable de los recursos a traducir.  Ahora veremos como una vez que el código de nuestra aplicación está separado de los recursos es posible traducirla a nuevos idiomas sin recompilar el código.

Este ejemplo es continuación de la segunda parte, así que agregamos un nuevo archivo al directorio de nuestra aplicación.  Antes de compilar estos archivos es necesario comprobar que la siguiente estructura de directorios exista:

  • out
  • out\en-us
  • out\es-es

Empezaremos por crear nuestro archivo de recursos en español (resource.es-es.rc):

    1: #include "winnt.h"
    2: #include "resource.h"
    3:  
    4: LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN
    5:  
    6: STRINGTABLE
    7: BEGIN
    8:     IDS_TITULO "Hola mundo!"
    9:     IDS_MENSAJE "Programa de ejemplo"
   10: END

Este archivo es simplemente una traducción de la versión en inglés.  De hecho se utiliza el mismo archivo “resource.h” para definir los identificadores de recurso y asegurarse de que coincidan con los valores esperados en el código.  Es muy importante indicar que el lenguaje y sub-lenguaje sea español y no inglés como en el original.

Los pasos para compilar este archivo en un dll de "sólo recursos" son muy sencillos:

 rc -fo out\resource.es-es.res -fm out\resource.es-es.loc.res -q resource.rcconfig resource.es-es.rc
link /dll /noentry /out:"out\es-es\Hello01.exe.mui" out\resource.es-es.loc.res

El archivo out\es-es\Hello01.exe.mui contiene los recursos que creamos en español.  Ahora sólo nos falta un paso para que el manejador de recursos pueda confirmar que nuestros archivos en inglés y en español son equivalentes.

 muirct -c out\Hello01.exe -e out\es-es\Hello01.exe.mui

Este comando toma el checksum del ejecutable original y lo copia al archivo de recursos en español.  Este paso es necesario para que el manejador de recursos pueda confirmar que los dos archivos pertenecen a la misma aplicación y versión.  De esta manera se evitan conflictos cuando se modifican los recursos originales y no se actualizan las traducciones.  En este caso el manejador de recursos tomaría los recursos en el idioma original e ignoraría la versión antigua de las traducciones.

Ahora podemos copiar nuestro ejecutable junto con los dos archivos de recurso al directorio de nuestra aplicación siguiendo la siguiente estructura:

  • Hello01.exe
  • en-us\Hello01.exe.mui
  • es-es\Hello01.exe.mui

Al ejecutar Hello01.exe el manejador de recursos pregunta al sistema operativo que idioma utilizar para cargar los recursos.  En un sistema en inglés se mostrarán los recursos originales y en español obtenemos lo siguiente:

 HelloEsEs

Sin compilar una línea de código hemos reconstruido los recursos para la aplicación de ejemplo, y ahora queda claro como podemos separar el trabajo de desarrollar una aplicación de traducirla a otros idiomas.