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:

F1

Le asignamos un nombre a nuestro proyecto.

F2

En la siguiente ventana pulsamos en Create sin cambiar ninguna opción

F3

El primer archivo que vamos a modificar será el llamado Program.cs. En él añadimos el siguiente servicio:

F4

A continuación vamos a indicar que idiomas va a soportar la página:

F5

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.

F6

Por último indicamos a la página que use este objeto que acabamos de crear:

F7

Para continuar creamos una carpeta llamada Resources donde crearemos los archivos necesarios para cada idioma.

F8

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.

F9
F10

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

F11
F12

Lo común es que la opción de Archivo de Recurso no aparezca y haya que buscarla.

F16

Vamos a introducir el mensaje de bienvenida en español bajo la clave Bienvenida.

F28

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:

F27
F29
F19

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.

F20

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.

F24

Mostramos la información recibida en la vista.

F22

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.

F23

A continuación le añadiremos funcionalidad mediante jQuery para que cambie de idioma.

F25

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.

F26

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:

https://github.com/jrgss/ProyectoIdiomas.git

LinkedIn: https://www.linkedin.com/in/jorgesalinerosanchez

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.