Localizando aplicaciones

Una de las tareas más frecuentes en aplicaciones de línea de negocios es la de localizar aplicaciones, ya sea para mercados internacionales o para diferentes mercados locales.

En el mercado español es muy frecuente localizar aplicaciones en el gran abanico de idiomas o lenguas regionales que existe.

Silverlight es una tecnología fuertemente preparada para ello y nos permite realizar esta tarea de un modo muy similar al que estamos acostumbrados.

Para ilustrar las tareas de localización de aplicaciones en Silverlight haremos uso de una aplicación de ejemplo que ya hemos extendido anteriormente.

Partiremos de la base que ya tenemos implementada de XMLReaderMaps.zip.

Localizar nuestra aplicación

Nuestro primer paso será el de determinar los idiomas soportados.

  • Determinemos la referencia cultural predeterminada de la aplicación. Debe ser independiente de la región.
    Por ejemplo, "en" representa el idioma inglés independiente de la región y "es" representa el idioma español independiente de la región.
  • Acto seguido agregamos un recurso al proyecto de Visual Studio para mantener los recursos de la referencia cultural predeterminada siguiendo estos pasos:


Figura 1.- Añadir recursos

  1. En el Explorador de soluciones, hacemos clic en el nombre del proyecto con el botón secundario, seleccionamos Agregar y, a continuación hacemos clic en Nuevo elemento.
  2. En el cuadro de diálogo Agregar nuevo elemento, en Plantillas, hacemos clic en Archivo de recursos y asignamos al archivo de recursos un nombre descriptivo, como "StringResources" si éste contiene recursos de cadena.
  3.  Agregamos los recursos adecuados.


Figura 2.- Recursos de la aplicación

  • Agregamos un archivo de recursos al proyecto para cada referencia cultural independiente de la región o cada referencia cultural específica que la aplicación admita repitiendo el segundo paso para cada una de ellas.
    Asignamos un nombre a cada archivo de recursos utilizando el nombre raíz del archivo de recursos de la referencia cultural predeterminada, seguido por un punto y el nombre de la referencia cultural.
  • Definimos la referencia cultural predeterminada de nuestra aplicación:
  1. EEn el Explorador de soluciones, hacemos clic en el nombre del proyecto con el botón secundario, seleccionamos Aplicación y, a continuación hacemos clic en Información de ensamblado.
  2. En la lista Idioma neutro, seleccionamos la referencia cultural predeterminada, que debe ser un idioma independiente de la región, como "en", "r", "es" o "es".
  • EEn el Explorador de soluciones, hagcemos clic con el botón secundario en el nombre del proyecto y seleccionamos Descargar el proyecto para cerrarlo y dejar el icono de proyecto visible.
  • En el Explorador de soluciones, hacemos clic con el botón secundario en el nombre del proyecto y seleccionamos Editar.
    El archivo de proyecto se abrirá en el Editor XML de Visual Studio.
  • En el archivo de proyecto, agregamos a la etiqueta <SupportedCultures> los nombres de las referencias culturales independientes de la región y las referencias culturales específicas cuyos ensamblados satélite ha creado la aplicación.
    Si la aplicación admite varias referencias culturales, utilice un punto y coma (;) para separar sus nombres.
    Esta lista de referencias culturales no debería incluir la referencia cultural predeterminada de nuestra aplicación.
    Por ejemplo, una etiqueta <SupportedCultures> para una aplicación cuya referencia cultural predeterminada sea Inglés ("en") y que admita las referencias culturales de inglés de Estados Unidos ("en-US"), francés ("fr"), francés de Francia ("fr-FR"), ruso ("ru") y ruso de Rusia ("ru-RU") podría ser similar a la siguiente:
 <upportedCultures>
en-US;fr;fr-FR;ru;ru-RU;
</SupportedCultures>
  • EEn el Explorador de soluciones, hacemos clic con el botón secundario en el nombre del proyecto y seleccione Recargar el proyecto.

Una vez agregados los ficheros de recursos y agregados los dos idiomas soportados (Inglés y Español) crearemos las cadenas necesarias de nuestra aplicación.


Figura 3.- Cadenas de nuestra aplicación

Marcaremos el modificador de acceso de nuestros recursos como Públicos para poder acceder a ellos desde el marcado de nuestra aplicación.

Ya que para poder acceder a un recurso desde XAML, este debe tener una referencia estática, crearemos una clase pública con un miembro estático que exponga una instancia de los recursos a través de una propiedad pública de solo lectura.

 public class ResourceWrapper
{
public ResourceWrapper() { }
private static StringResources _strings =new StringResources();
public StringResources Strings
{
get { return _strings; }
}
}

Siguiendo con nuestros pasos, añadiremos el espacio de nombres de los nuevos recursos a nuestra página principal del siguiente modo:

 xmlns:resources="clr-namespace:
XMLReader.Resources"

Y crearemos un nuevo recurso en la página que exponga esta clase para poder acceder a los recursos.

 <UserControl.Resources>
<resources:ResourceWrapper x:Key="LocalizedStrings"/>
</UserControl.Resources>

Como último paso solo nos queda enlazar nuestros controles con los recursos usando sentencias Binding, cuyo Path sea NuestraPropiedad.NombreDelRecurso y cuyo Source sea nuestro recurso.

Estos pasos deben repetirse en todas las vistas o ventanas de diálogo de nuestra aplicación que sean sensibles de ser localizadas.

<StackPanel Grid.Column="1" Margin="8" Orientation="Vertical"
d:LayoutOverrides="Height" DataContext="{Binding SelectedItem,
ElementName=lbClientes}">
<TextBlock TextWrapping="Wrap" Text="{Binding Path=Strings.strNAME,
Source={StaticResource LocalizedStrings}}" Height="16"/>
<TextBlock TextWrapping="Wrap" Text="{Binding Nombre}" Height="16"/>
<TextBlock TextWrapping="Wrap" Text="{Binding Path=Strings.strCORPORATE,
Source={StaticResource LocalizedStrings}}" Height="16"/>
<TextBlock TextWrapping="Wrap" Text="{Binding Empresa}" Height="16"/>
<TextBlock TextWrapping="Wrap" Text="{Binding Path=Strings.strLEVEL,
Source={StaticResource LocalizedStrings}}" Height="16"/>
<TextBlock TextWrapping="Wrap" Text="{Binding Indicador}" Height="16"/>
</StackPanel>

Conclusión

Localizar aplicaciones en Silverlight es una tarea muy similar a hacerlo en otro tipo de aplicaciones, lo que nos permite adaptarnos rápidamente a nuevos mercados y alcanzar un número mayor de potenciales clientes y usuarios.

Puedes descargarte este ejemplo en: XMLReaderMapsLocalized.zip