Hola a todos!
En un artículo anterior aprendimos como de una manera sencilla podíamos localizar los textos de nuestra aplicación para adaptarlos al idioma seleccionado por el usuario en su dispositivo, pero… ¿Qué ocurre con el título? En los casos en que sea una palabra inventada, o si lo escribimos directamente en inglés, no será necesario traducirlo, pero si lo escribimos en español puede no ser descriptivo para alguien que no hable la lengua de cervantes…
Para arreglar esto podemos localizar este título al igual que lo hacemos con el resto de la aplicación, solo necesitaremos seguir unos pasos concretos por cada idioma que deseemos soportar. Esta localización tenemos que hacerla mediante una DLL nativa en C++, pero tranquilos, no tendremos que escribir código nativo complicado de ningún tipo.
Creando nuestros proyectos.
Para comenzar solo necesitamos una aplicación Windows Phone normal, en mi caso la he llamado wp75TitleLocalization. A continuación, tenemos que añadir un nuevo proyecto. Para ello pulsamos sobre el nombre de la solución en el Explorador de soluciones con el botón derecho y seleccionamos la opción Add –> New Project… :
En la ventana de selección de proyecto vamos a Visual C++ y seleccionamos Win32 Project. El proyecto debe llamarse AppResLib como podemos ver en la siguiente captura:
Solo tenemos que presionar OK y aparecerá el asistente de configuración del proyecto Win32. En el panel de la izquierda de este asistente debemos presionar sobre “Application Settings” y marcar en tipo de aplicación (Application Type) DLL y en opciones adicionales (Additional options) Empty Project y presionar el botón Finish (Terminar):
Ahora tendremos dos proyectos en nuestra solución: Nuestra aplicación Windows Phone y nuestro proyecto AppResLib:
A continuación tenemos que configurar nuestra nueva DLL, para ello hacemos click derecho sobre el nombre del proyecto (AppResLib) y seleccionamos Properties (Propiedades) del menú emergente, que nos mostrará la ventana de propiedades del proyecto:
En el panel de la derecha, bajo Configuration Properties (Propiedades de configuración) expandimos la opción Linker y seleccionamos la sección Advanced, donde tendremos que editar la opción No Entry Point, estableciéndola a “Yes (/NOENTRY)”, de esta forma podremos crear una DLL sin código fuente, solo con archivos de recursos:
Solo tenemos que presionar OK y nuestro proyecto ya estará listo para introducir nuestras cadenas de texto que serán usadas con el idioma correspondiente del dispositivo. Lo primero que necesitamos es crear las cadenas a usar por defecto. Esto significa que si nuestra aplicación por defecto está en inglés, deberemos introducir el título en inglés. Para esto, tenemos que presionar con el botón derecho sobre el proyecto AppResLib, seleccionar la opción Add y Resource, con lo que se nos pedirá el tipo de recurso a añadir, donde debemos escoger String Table y presionar el botón “New”:
Esto nos creará un archivo AppResLib.rc donde podremos introducir nuestras cadenas con 3 valores: ID, un nombre que identifique nuestra cadena, VALUE, un valor numérico que identifique nuestra cadena y CAPTION, nuestra cadena:
Añadiendo los nuevos títulos a nuestra aplicación
Simplemente hemos introducido una cadena para el título de nuestra aplicación y otro para el título del Tile principal cuando la anclamos al inicio. Guardamos y compilamos nuestro proyecto AppResLib. Una vez compilado debemos ir al directorio de salida del proyecto y copiar el archivo AppResLib.Dll al directorio de nuestro proyecto (donde está el app.xaml) a continuación debemos incluir este archivo en nuestro proyecto Windows Phone. Para ello simplemente presionaremos con el botón derecho sobre el nombre de nuestro proyecto y seleccionamos Add –> Existing Item:
Y en el cuadro de selección de archivos elegimos nuestra librería AppResLib.dll y a continuación establecemos en sus propiedades el Build Action a Content.
Lo siguiente será indicar a nuestra aplicación que debe usar la información de esta librería para mostrar los textos de título, esto lo haremos editando el archivo WMAppManifest.xml dentro de la carpeta Properties del proyecto.
Modificaremos dos secciones de este archivo: App:
<App xmlns="" ProductID="{55973013-456c-4b42-816e-1123faa4cf63}" Title="@AppResLib.dll,-100" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="wp75TitleLocalization author" Description="Sample description" Publisher="wp75TitleLocalization">
La única modificación en esta sección está en el atributo Title, donde le indicamos el nombre de la libraría a usar y el número (con un guión delante) de recurso que deseamos que muestre. Haremos lo mismo en la sección PrimaryToken:
<PrimaryToken TokenID="wp75TitleLocalizationToken" TaskName="_default"> <TemplateType5> <BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI> <Count>0</Count> <Title>@AppResLib.dll,-101</Title> </TemplateType5> </PrimaryToken>
En este caso modificamos también el elemento Title, indicando la librería y el número de recurso de nuestra cadena. Si guardamos y ejecutamos la aplicación en el emulador obtendremos el siguiente resultado:
Como podemos ver, tanto en la lista de aplicaciones como en el tile principal se han usado los títulos que hemos definido en nuestra librería.
Añadiendo Idiomas extras
Ahora que ya tenemos sacados a recursos nuestros títulos, ¿Como podemos añadir más idiomas? Pues es extremadamente simple, solo tenemos que ir a nuestro proyecto AppResLib, editar el archivo de recursos AppResLib.rc y modificar las cadenas, por ejemplo en español:
A continuación compilamos la librería de nuevo y vamos al directorio donde se guarde. Solo tenemos que renombrar AppResLib.dll, añadiendo el código de idioma que deseemos que represente y terminado el archivo en mui: AppResLib.dll.[ID].mui, en el caso de Español sería: AppResLib.dll.0c0a.mui, cada idioma soportado por Windows Phone tiene una correspondencia en el nombre de esta librería:
Nombre de cultura |
Código de cultura |
Nombre de archivo |
---|---|---|
Chinese Simplified (PRC) |
zh-CN |
AppResLib.dll.0804.mui |
Chinese Traditional (Taiwan) |
zh-TW |
AppResLib.dll.0404.mui |
Czech (Czech Republic) |
cs-CZ |
AppResLib.dll.0405.mui |
Danish (Denmark) |
da-DK |
AppResLib.dll.0406.mui |
Dutch (Netherlands) |
nl-NL |
AppResLib.dll.0413.mui |
English (United Kingdom) |
en-GB |
AppResLib.dll.0809.mui |
English (United States) |
en-US |
AppResLib.dll.0409.mui |
Finnish (Finland) |
fi-FI |
AppResLib.dll.040b.mui |
French (France) |
fr-FR |
AppResLib.dll.040c.mui |
German (Germany) |
de-DE |
AppResLib.dll.0407.mui |
Greek (Greece) |
el-GR |
AppResLib.dll.0408.mui |
Hungarian (Hungary) |
hu-HU |
AppResLib.dll.040e.mui |
Italian (Italy) |
it-IT |
AppResLib.dll.0410.mui |
Japanese (Japan) |
ja-JP |
AppResLib.dll.0411.mui |
Korean (Korea) |
ko-KR |
AppResLib.dll.0412.mui |
Norwegian (Norway) |
nb-NO |
AppResLib.dll.0414.mui |
Polish (Poland) |
pl-PL |
AppResLib.dll.0415.mui |
Portuguese (Brazil) |
pt-BR |
AppResLib.dll.0416.mui |
Portuguese (Portugal) |
pt-PT |
AppResLib.dll.0816.mui |
Russian (Russia) |
ru-RU |
AppResLib.dll.0419.mui |
Spanish (Spain) |
es-ES |
AppResLib.dll.0c0a.mui |
Swedish (Sweden) |
sv-SE |
AppResLib.dll.041d.mui |
Ahora solo tenemos que copiar este nuevo archivo AppResLib.dll.0c0a.mui al directorio de nuestra aplicación Windows Phone (junto con el que copiamos anteriormente AppResLib.dll) e incluirlo en el proyecto de la misma forma que el AppResLib.dll y con la propiedad Build Action a Content:
Si establecemos el idioma del emulador en Español y ejecutamos nuestra aplicación, veremos como los títulos aparecen en el idioma del dispositivo:
Conclusión
Con esta sencilla práctica podremos personalizar un poco más nuestra aplicación para que se adapte al usuario y a su idioma. Aquí tenéis el código de este ejemplo, con el título en Ingles y Español (Inglés por defecto) para que podáis jugar con ellos.
Un saludo y Happy Coding!
Vamos con una segunda retahíla de enlaces relacionados con Windows Phone 7.5 (Mango). En este caso y