Localización de una Aplicación Basada en PRISM

Es difícil localizar una aplicación WPF con las herramientas proporcionadas en el .Net Framework 3.5. El proceso para realizarlo sería el siguiente:

  • Generar un diccionario de recursos.

  • Enlazar el diccionario a la aplicación en el App.xaml.

  • Ejecutar el MSBuild script para generar un Id único para cada control localizable en la aplicación.

  • Ejecutar la herramienta LocBaml (incluida en el SDK) para extraer todos los Aid en un archivo separado por comas.

  • Copiar el archivo generado por LocBaml a una carpeta (una para cada lenguaje).

  • Volver a ejecutar la herramienta LocBaml para importas todas las entradas dentro del diccionario.

  • Compilar.

Esta forma de hacerlo tiene algunos problemas:

  • Sólo puedes tener un archivo de diccionario de recursos por aplicación. Cada módulo no podrá tener el suyo propio.

  • El proceso es difícil y propenso a los errores. Lo que hace que sea costoso de mantener.

  • No puedes cambiar el lenguaje de la aplicación en tiempo de ejecución. Es necesario reiniciar la aplicación para poder reflejar el cambio de idioma.

Para arquitecturas como PRISM (Composite Application Guidance for WPF), que se basan en módulos, es muy importante que cada módulo pueda tener sus propios archivos de recursos. Puede que estos módulos sean desarrollados por separado y equipos diferentes. Además es interesante que el proceso de localización sea sencillo y fácilmente mantenible. Normalmente los textos de las traducciones suelen cambiar bastante.

Para solucionar esto, y solventar todos los problemas existe WPFLocalizeExtension. Se trata de un framework open source. Este framework ha sido modificado para soportar localización de assemblies (plug-in) cargados dinámicamente.

Este framework se basa en archivos de recursos lo que hace que sea bastante sencillo mantener las traducciones de los diferentes idiomas. Así que cada módulo puede tener su propio archivo de recursos con sus traducciones. Además, permite cambios de idioma en caliente.

Ahora el proceso de localización es más sencillo:

  • Modificar el archivo de proyecto .csproj añadiendo <UICulture>en-US</UICulture> en el primer tag PropertyGroup. Este será el lenguaje neutral de la aplicación.

  • Crear un archivo de recursos para el Lenguaje Neutral (Shell.resx) y añadir una entrada por cada control que se necesite localizar:

    • Para añadir otro idioma copiar y pegar el archivo de recursos (Shell.resx) y renombrarlo a Shell.es-ES.resx. Traducir todas las etiquetas a español, en este caso.

    • Para localizar una vista (un archivo .xaml):

      • Añadir una referencia a la librería de WPFLocalizeExtension. xmlns:loc="clr-namespace:LocalizeExtension.Localization;assembly=LocalizeExtension".

      • Para la propiedad que haya que traducir utilizar: {loc:LocText loc:Key=CustomerLabel, loc:Dict=Shell, loc:Assembly=MyAssembly.Shell}.

      • Key: Es el nombre del texto a mostrar.

      • Dict: Es el nombre del archivo de recursos.

      • Assembly: Es la dll donde se encuentra el archivo de recursos.

  • Compilar.

Este proceso es mucho menos complejo que el estándar y facilita bastante las cosas como se puede ver.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *