Implementación de varios idiomas en .NET
En esta entrada os quiero explicar como integrar varios idiomas en proyectos de c#.
Durante nuestro desarrollo como programadores llega un momento en el que necesitamos dar un salto de calidad y aportar pequeñas mejoras en nuestros proyectos que hacen que estos suban considerablemente el nivel, una de estas mejoras es que el usuario pueda elegir el idioma en el que desea trabajar. Para ello utilizaremos la interfaz IStringLocalizer. Comencemos!
En primer lugar crearemos un nuevo proyecto con el siguiente template:
Le asignamos un nombre a nuestro proyecto.
En la siguiente ventana pulsamos en Create sin cambiar ninguna opción
El primer archivo que vamos a modificar será el llamado Program.cs. En él añadimos el siguiente servicio:
A continuación vamos a indicar que idiomas va a soportar la página:
Creamos un objeto RequestLocalizationOptions que llevará la información de los idiomas soportados, el idioma por defecto y si queremos que se pueda cambiar el idioma desde la URL.
Por último indicamos a la página que use este objeto que acabamos de crear:
Para continuar creamos una carpeta llamada Resources donde crearemos los archivos necesarios para cada idioma.
Creamos una clase vacía dentro de esta carpeta Resources que llamaremos SharedResource. Es importante que recordemos este nombre porque lo mantendremos para cada idioma.
Antes de iniciar con la creación de ficheros para cada idioma voy a hacer un inciso para explicar cuál es el funcionamiento con un ejemplo.
Queremos personalizar el mensaje de bienvenida a la página para cada idioma. Para ello crearemos una clave para el mensaje de bienvenida que se repetirá para cada idioma, aunque para cada idioma el valor de esta clave será diferente. De modo que cuando cambie el idioma se buscará esa clave en el fichero del nuevo idioma y el mensaje cambiará automáticamente.
Para cada idioma crearemos un archivo de recurso sobre la carpeta Resource con el nombre SharedResource que hemos declarado antes acompañado un punto y la abreviatura del idioma. Ej: SharedResource.es-ES.resx
Lo común es que la opción de Archivo de Recurso no aparezca y haya que buscarla.
Vamos a introducir el mensaje de bienvenida en español bajo la clave Bienvenida.
Haremos lo mismo creando un archivo para dar la bienvenida en inglés y otro en francés. El resultado debe ser algo muy similar a esto:
Veamos como recuperar esa información y visualizarla en la página. En mi caso voy a trabajar en el controlador Home. Lo primero que necesitamos es crearnos un objeto de la interfaz IStringLocalizer y crearlo en el constructor.
En la vista donde queramos recuperar la información buscaremos la clave que hemos asignado a la información y la mandaremos esa información a la vista. En mi caso lo haré mediante ViewData.
Mostramos la información recibida en la vista.
Llegados a este punto tenemos casi todo lo que necesitamos. De hecho, si ejecutamos nos mostrará el mensaje que hemos asignado para el idioma que hemos establecido por defecto. Para completar la funcionalidad añadiremos la opción de cambiar el idioma dinamicamente.
En el archivo _Layout.cshtml añadiremos desplegable donde el usuario podrá seleccionar el idioma que desee.
A continuación le añadiremos funcionalidad mediante jQuery para que cambie de idioma.
Al añadir la sintaxis ‘?culture=abreviatura‘ la página ya es capaz de cambiar el idioma.
Lo siguiente que tenemos que hacer es recuperar el nuevo idioma que hemos seleccionado para actualizar el desplegable conforme el idioma actual de la aplicación.
Y hasta aquí el post sobre como implementar idiomas en vuestros proyectos de .Net.
Autor: Jorge Salinero Sánchez
Curso: Desarrollo Web Full Stack + MultiCloud con Azure y AWS
Centro: Tajamar
Año académico: 2022-2023
Otros datos de interés:
GitHub: