Localización en Aplicaciones Universales

A mediados de semana, buscando cómo localizar Windows Phone 8.1, me encontré con un ilustrativo artículo de Johan Olsson en el que se explican las diferencias, en cuanto a localización, entre Windows Phone 8 y Windows Phone 8.1.

Pero ¿es posible aplicar el mismo procedimiento en una aplicación universal, en el proyecto Shared?

La respuesta es, sí, y el procedimiento es exactamente el mismo.

Cómo localizar una aplicación universal

Modificamos, si procede el “Idioma predeterminado” en el manifest de ambas plataformas.

En mi caso lo he puesto en “es”, puesto que es genérico para cualquier español, si quisiera hacerlo más específico, debería poner es-ES.

Creamos la siguiente estructura de carpetas.

Básicamente, creamos una carpeta “Strings” en Shared y dentro de ella una carpeta por cada idioma que queramos que nuestra aplicación soporte, con un archivo Resources.resw en ella.

Ahora sólo nos falta llenar el archivo de Resources con los textos y llamarlo desde el XAML o código.

Un pequeño ejemplo de archivo de Resources sería el siguiente

En el primer caso, cuando carguemos la vista, nos cogerá, para el elemento con x:Uid=”lblSuccess” la propiedad Text que le indicamos aquí.

El segundo caso es el que llamaremos desde código, aunque bien podríamos utilizar el primero, pidiendo el recurso con nombre “lblSuccess/Text”.

Para llamarlo desde el XAML

<!-- recomiendo, aunque tengamos el texto localizado en resources, 
poner un texto igualmente, para poder visualizarlo desde el diseñador -->
<TextBlock x:Uid="lblSuccess" Text="TestSuccess" Style="{StaticResource HeaderTextBlockStyle}"
    VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="YellowGreen"
    Tapped="LblSuccess_Tapped"/>

El TextBlock con x:Uid “lblSuccess” se cargará con la propiedad “Text” directamente del archivo de Resources, sobreescribiendo la que le hayamos asignado en el diseñador.

Para llamarlo desde código (si queremos lanzar MessageBox, Toast Notifications o lo que sea)

var map = ResourceLoader.GetForCurrentView();
string text = map.GetString("txtTapped");

Éste método ha cambiado un poco y aunque es posible seguir usando el antiguo, se recomienda usar este en los proyectos Windows 8.1 y Windows Phone 8.1.

Por último, decir que podemos crear otros archivos Resources con otros nombres, como por ejemplo uno para mostrar Errores, al que podremos llamar desde código mediante una línea.

var errors = ResourceLoader.GetForCurrentView("Errors");
blog comments powered by Disqus