2. 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"
3. 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
4. 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
5. Globalización y Localización
Podemos habilitar el manejo de globalización
en el Web.config:
<system.web>
<globalization culture="auto"
uiCulture="auto"
enableClientBasedCulture="true">
</globalization>
6. Manejo de recursos locales
Se puede estructurar las vistas para diferentes
culturas:
/Views
/Globalization
/en-US
/Home /Index.aspx
/Shared /Navigation.aspx
/es-MX
/Home /Index.aspx
/Shared
7. Manejo de recursos locales
Podriamos sobreescribir
Controller.OnActionExecuted y cambiar el path
del controller basado en el UICulture:
• Thread.CurrentThread.CurrentUICulture
Para especificar la cultura:
Especificando la cultura por defecto,
Agregamos en el archivo
Properties/AssemblyInfo.cs:
System.Threading.Thread.CurrentThread.CurrentUICulture =
new System.Globalization.CultureInfo("es-ES");
[assembly: NeutralResourcesLanguage("en-US",
UltimateResourceFallbackLocation.Satellite)]
8. Archivos de recursos
Los archivos de recursos sirven para tener
versiones de las cadenas en diferentes
idiomas
9. 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, cambiar
Custom Tool al valor
PublicResXFileCodeGenerator, o fijar el
recurso como public
10. Archivos de recursos
4. Agregar las variables con las cadenas que
serán traducidas
5. Crear otro archivo de recursos con el mismo
nombre mas el nombre de otra cultura, por
ejemplo: Cadenas.es.resx
6. Agregar el contenido en otro idioma para las
mismas variables
11. 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>
12. Archivos de recursos
8. Agregar la etiqueta globalization al
web.config dentro de system.web:
9. Podemos especificar la cultura de cada
vista, Culture o UICulture:
<system.web>
<globalization uiCulture="auto" culture="auto" />
@{
ViewBag.Title = "Index";
UICulture = "es-BO";
}
13. 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; }
14. 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 que
contiene pares de key value
<data name="PageResource1.Titulo"
xml:space="preserve">
<value>Búsqueda de items</value>
</data>