ASP.NET MVC - implementando globalizacion and localizacion

Post on 13-Apr-2017

151 views 1 download

Transcript of ASP.NET MVC - implementando globalizacion and localizacion

Globalización y Localización

Danae Aguilar Guzmán MCT, MS, MCTS, MCP

danaeaguilar@gmail.com

Globalización y Localización

• Internacionalización (i18n) – Hacer que la aplicación soporte un rango de lenguajes y locales

• Localización (L10n) – Hacer que la aplicación soporte un lenguaje/locale especifico.

• Globalización – La combinación de Internacionalización Localización

• Lenguaje – Por ejemplo Español. Su código ISO es "es"

• Locale - Por ejemplo Bolivia. No es lo mismo el español de Bolivia que de España, e.j. "es-BO" vs. "es-ES"

Globalización y Localización

1. Cultura de la aplicacion:

en indica el idioma inglés

es indica el idioma español

de indica el idioma alemán

2. Cultura específica:

en-CA indica el idioma inglés y la region de Canada

af-ZA indica el idioma africano y la region de Sud Africa

es-ES indica el idioma español y la region de España

Globalización y Localización

El navegador del usuario le especificará a nuestro servidor el lenguaje y locale del usuario.

Esto en las cabeceras del request:

Accept-Language: en-US,en;q=0.8

Globalización y Localización

Podemos habilitar el manejo de globalizaciónen el Web.config:

<system.web><globalization culture="auto"

uiCulture="auto"enableClientBasedCulture="true">

</globalization>

Manejo de recursos locales

Se puede estructurar las vistas para diferentesculturas:

/Views

/Globalization

/en-US

/Home /Index.aspx

/Shared /Navigation.aspx

/es-MX

/Home /Index.aspx

/Shared

Manejo de recursos locales

Podriamos sobreescribirController.OnActionExecuted y cambiar el pathdel controller basado en el UICulture:

• Thread.CurrentThread.CurrentUICulture

Para especificar la cultura:

Especificando la cultura por defecto, Agregamos en el archivoProperties/AssemblyInfo.cs:

System.Threading.Thread.CurrentThread.CurrentUICulture =

new System.Globalization.CultureInfo("es-ES");

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

Archivos de recursos

Los archivos de recursos sirven para tener versiones de las cadenas en diferentes idiomas

Archivos de recursos

Agregando Archivos de recursos

1. Crear un folder llamado Resources

2. Argegar un item de tipo resource file, (extension .resx) por ejemplo Cadenas.resx

3. En las propiedades del archivo, cambiarCustom Tool al valor PublicResXFileCodeGenerator, o fijar el recurso como public

Archivos de recursos

4. Agregar las variables con las cadenas que serán traducidas

5. Crear otro archivo de recursos con el mismonombre mas el nombre de otra cultura, porejemplo: Cadenas.es.resx

6. Agregar el contenido en otro idioma para lasmismas variables

Archivos de recursos

7. Usar las cadenas traducidas en lugar de texto en las vistas: @Cadenas.MiCadena

7.1. Agregar el namespace en cada vista:

@using EjemploLocalizazion.Resources

7.2. O en el namespace en el web.config:

<configuration> <system.web.webPages.razor> <pages> <namespaces> <add namespace="EjemploLoc.Resources"/> </namespaces> </pages> </system.web.webPages.razor>

Archivos de recursos

8. Agregar la etiqueta globalization al web.config dentro de system.web:

9. Podemos especificar la cultura de cadavista, Culture o UICulture:

<system.web> <globalization uiCulture="auto" culture="auto" />

@{ ViewBag.Title = "Index"; UICulture = "es-BO"; }

Localizando mensajes de error

1. Asignar ErrorMessageResourceType con el tipo que contiene los recursos

2. Asignar ErrorMessageResourceName con el nombre de la variable que contiene el mensaje de error.

public class Estudiante { [Required(ErrorMessageResourceName = "FaltaNombre", ErrorMessageResourceType = typeof(Cadenas))] public string Nombre { get; set; }

Archivos de recursos

Para un idioma diferente se tiene un archivo con mismo nombre pero la extensión incluye el idioma: Default.aspx.es.resx

Un archivo de recursos es un Xml quecontiene pares de key value

<data name="PageResource1.Titulo" xml:space="preserve"> <value>Búsqueda de items</value> </data>