Localizar mensajes de error en ASP .NET

Comentar
Compartir
Propiedades i18n

ASP.NET y en concreto MVC disponen de Helpers y ayudas muy útiles para localizar los textos de nuestra aplicación web y así poder internacionalizarla. Del mismo modo, ponen en nuestras manos herramientas para poder, de manera muy sencilla, generar y mostrar los mensajes de error apropiados en nuestros formularios web.

Sin embargo, estos mensajes de error se muestran en inglés por defecto, y a menudo me preguntan como integrar esto con las opciones de localización para que el idioma

en que se muestren sea el del navegador, o en cualquier otro idioma concreto. En este artículo vamos a ver como dar solución a esta problemática.

Paso 1 – Crear el fichero de idiomas

Cuando vamos a internacionalizar cualquier aplicación web .NET, lo primero es generar los ficheros de recursos de localización, tradicionalmente llamados i18n o l10n.

Curiosidad: el nombre que típicamente se da a este fichero, i18n, es una forma abreviada de referirse a la palabra internacionalization, es decir, la primera y última letra de la palabra, más 18 caracteres. Lo mismo ocurre con l10n y su equivalente localización.

Para crear el fichero de recursos de idiomas con el que traduciremos los mensajes de error, una de las formas más sencillas es, desde Visual Studio, hacer click derecho en el proyecto y  elegir Agregar / Agregar carpeta ASP.NET / App_GlobalResources. De este modo se creará una carpeta especial App_GlobalResources en nuestro proyecto.

Ahora haremos click derecho en la carpeta App_GlobalResources e iremos a Agregar / Nuevo Elemento. En la ventana que aparece elegimos Archivo de Recursos y le damos un nombre cualquiera, por ejemplo i18n.resx.

Este fichero contendrá los textos de nuestra aplicación en el idioma por defecto.

Importante: A veces, sobre todo en MVC, no tendremos acceso a las claves que vamos a crear dentro de este fichero. Para solucionar este problema, hay que hacer click derecho en cada fichero de recursos (el i18n.resx, por ejemplo) despues de crearlo, y elegir propiedades. En la ficha de propiedades, establecemos el atributo “Herramienta personalizada” con valor “PublicResXFileCodeGenerator” y la “Acción de compilación” como “Contenido”. En “Espacio de nombres..” ponemos uno para organizar nuestra clase, por ejemplo “i18n” y guardamos los cambios. De este modo tendremos acceso. Vemos como queda en la imagen a continuación.

Propiedades i18n

Propiedades i18n

Paso 2 – Crear los textos

Cada texto independiente que queramos mostrar al usuario tiene que tener una entrada correspondiente dentro del fichero de recursos. Para crear los textos, editamos el fichero de recursos i18n.resx haciendo doble click en él en Visual Studio.

En el editor que nos aparece, agregamos una clave, por ejemplo “GenericRequiredValidation” y le damos un valor, por ejemplo “El campo {0} es obligatorio.”

Paso 3 – Personalizar el mensaje de error

En ASP.NET MVC, tendremos que decorar con atributos de validación las propiedades del modelo que estamos recogiendo en el formulario.

Podemos encontrar la documentación relativa a este tipo de validación con DataAnnotations en la página de Microsoft: http://msdn.microsoft.com/es-es/library/ee256141(v=vs.98).aspx

Por lo tanto, lo unico que debemos hacer es indicar al framework qué clave de qué fichero de recurso es el que tiene que utilizar para mostrar el mensaje de error, por ejemplo:
[code lang=”csharp”]public class UserRecoveryPasswordChangeModel
{
[Required(ErrorMessageResourceName = "GenericRequiredValidation", ErrorMessageResourceType = typeof(i18n.i18n))]
public string Username { get; set; }[/code]
En este ejemplo estamos viendo que utilizamos el atributo Required porque la propiedad Username de nuestro modelo es obligatoria en el formulario. A este atributo además le estamos diciendo, que en caso de no cumplirse, obtenga el texto del mensaje desde la clase i18n.i18n, y utilice el texto que hay asociada a la clave GenericRequiredValidation.

De este modo se mostrará el mensaje que hemos escrito en lugar del mensaje por defecto. Además, en nuestro ejemplo, hemos utilizado el comodín “{0}” para que .NET lo sustituya por el nombre de nuestra propiedad, dando un mensaje aún más concreto.

Truco: si nuestro mensaje original fuese de tipo “The length of parameter ‘newPassword’ needs to be greater or equal to ‘7’”, en principio podríamos usar un mensaje en español de este modo “El tamaño de {0} debe ser al menos de {1} caracteres.” para que .NET sustituya los comodines por los valores específicos.

Hay muchos más atributos que puedes utilizar: PropertiesMustMatch, LocalizedDisplayName…

Ya que este post está centrado en como utilizar ficheros de recursos para localizar estos mensajes de error, queda fuera del alcance, pero si quereis saber más acerca de la validación de propiedades usando este tipo de anotaciones, ya existen estupendas publicaciones en la red, como por ejemplo: http://msdn.microsoft.com/en-us/magazine/ee336030.aspx

Paso 4 – Añadir más idiomas

Para añadir más idiomas, basta con copiar el fichero i18n.resx y duplicarlo en la misma carpeta en la que lo hemos creado, pero añadiendole el sufijo con el código del idioma asociado.

Podeis ver como queda en la captura anterior… tendremos un fichero i18n.resx con el idioma por defecto (por ejemplo ingles) y otro llamado i18n.es.resx que contiene los textos en español. Hay que notar que los textos pueden cambiar, pero las claves deben ser idénticas en ambos ficheros.

Importante: Cuando duplicamos los ficheros, hay que asegurarse de que las propiedades también son idénticas. Es decir, tendremos que establecer el Espacio de nombres, la Herramienta personalizada y la Acción de compilación, con los mismos valores que en el i18n original.

Y hasta aquí llega la guía. Ya que la plantilla de proyecto nuevo de Visual Studio de MVC viene preparada para mostrar mensajes de error en los formularios, probarlo y ponerlo en marcha debería ser cosa sencilla siguiendo estos pasos.

¡Os animo a localizar vuestras aplicaciones siempre que podais!

Acerca de findemor

Técnico de Innovación en solusoft.

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/30/d298707731/htdocs/porexpertos.es/wp-includes/class-wp-comment-query.php on line 405

Deja un comentario

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