Globalización y localización
Introducción
Los sitios web modernos ofrecen a menudo la posibilidad de cambiar de idioma, para que el usuario pueda visitar el sitio en las mejores condiciones posibles. Por tanto, crear un sitio multilingüe permitirá, llegar a un público más amplio y la tecnología ASP.NET Core debería facilitar a los desarrolladores la codificación de este tipo de funcionalidades y su integración en el sitio web.
La internacionalización conduce inevitablemente a la globalización y la localización. La globalización consiste simplemente en dar cabida a varias culturas en el sitio web. El sitio debe utilizar un sistema genérico para que podamos cambiar fácilmente el idioma del usuario. La localización es la acción de adaptar el contenido del sitio en función de la región geográfica del usuario. Utiliza la globalización para especificar una cultura concreta, adaptando el sitio y su contenido a esa cultura (idioma de los textos, formato de las fechas, etc.).
ASP.NET Core ofrece a los desarrolladores toda una serie de herramientas que les permiten gestionar la globalización y la localización de sus aplicaciones, de la forma más eficaz posible. En primer lugar, las siguientes secciones tratarán de las API utilizadas para gestionar la localización de aplicaciones. A continuación, el capítulo examinará...
Gestión de la localización
Existen varios niveles de API para gestionar la localización con ASP.NET Core. Las interfaces más importantes son IStringLocalizer e IStringLocalizer<T>. Se trata de indexadores que facilitan la búsqueda de una cadena específica en función de la cultura, a través de los siguientes métodos:
-
this[string name]: recupera la cadena de la clave encerrada entre corchetes.
-
this[string name, params objet [] arguments]: recupera la cadena de la clave formateada con los argumentos que se pasan como parámetros.
-
GetAllStrings: recupera todas las claves de una o varias culturas específicas.
-
WithCulture: recupera un subconjunto de IStringLocalizer que representa las traducciones realizadas con la cultura especificada en el parámetro.
La implementación predeterminada utilizada por ASP.NET Core es el StringLocalizer proporcionado por la inyección de dependencia que, a su vez, utiliza un ResourceManagerStringLocalizer predeterminado. Este último utiliza la clase ResourceManager para proporcionar al tiempo de ejecución un conjunto de recursos específicos de la cultura. El ResourceManager es la clase más baja en la pila tecnológica del API y tiene los métodos:
-
Get* donde * es un tipo: recupera el recurso según el tipo indicado por el método. Otros métodos son GetString, GetStream, GetObject: libera todos los recursos.
-
ReleaseAllResources: libera todos los recursos.
El código siguiente propone un controlador que inyecta un servicio de localización que permite suministrar el valor en función de la clave proporcionada. La clave corresponde aquí al valor por defecto, lo que significa que el desarrollador no tiene que crear directamente un diccionario para cada idioma: el servicio de localización devuelve automáticamente la clave como valor por defecto si no se encuentra ningún otro valor.
private readonly IStringLocalizer<MyController> _localizer;
pubic MyController(IStringLocalizer<MyController> localizer)
{
_localizer = localizer;
}
[HttpGet]
public string Get()
{
return _localizer["Mi Título"];
}...
Middleware de gestión de cultura
La cultura es un concepto importante en ASP.NET Core porque el framework trabaja expresamente con la cultura para determinar qué idioma es el más adecuado para el usuario que envía la petición HTTP. De este modo, cada petición se localiza a través del middleware proporcionado por el framework. Para empezar, todo lo que tiene que hacer es añadir los servicios al Startup a través del método ConfigureServices.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath =
"Resources");
services.AddMvc()
.AddViewLocalization()
.AddDataAnnotationsLocalization();
Los tres métodos importantes son:
-
AddLocalization: añade servicios de localización al contenedor de servicios, especificando dónde se encuentran los recursos de traducción.
-
AddViewLocalisation: añade servicios de localización específicos para las vistas. Es posible especificar varias estrategias diferentes para localizar las vistas. La primera, LanguageViewLocationExpanderFormat.Suffix , permite especificar varios archivos para diferentes culturas. Por ejemplo, el archivo Index.es.html se localizará como si fuera de la cultura española. La segunda opción es LanguageViewLocationExpanderFormat.SubFolder y se utiliza para agrupar vistas MVC en carpetas de cultura.
-
AddDataAnnotationsLocalization: añade servicios de localización para las anotaciones utilizadas en los modelos con el fin de definir los mensajes de validación.
A continuación, en el método Configure, necesita añadir el middleware de localización para que cada petición sepa en qué cultura debe funcionar. Este middleware se configura fácilmente a través de las opciones de RequestLocalizationOptions. El siguiente código añade...