Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
lunes, 12 de noviembre de 2012
Algunos mensajes que genera ASP.NET MVC utilizan el idioma en el que hayamos instalado el framework. Por ejemplo, si hemos descargado la versión en inglés de MVC 4 y estamos usando en sistema operativo en español, podemos encontrarnos con textos de error como los mostrados en la siguiente captura de pantalla:



Los textos en español son generados por las restricciones impuestas por los tipos de datos y las anotaciones (data annotations) que tengamos definidas para ellos. Dado que éstas pertenecen al framework .NET, normalmente tendremos instalados los recursos de nuestro idioma, y serán mostrados en el mismo debido a que es lo que estará indicado en las opciones culturales del hilo que procesa la petición.

Sin embargo, los textos que vemos en inglés son generados desde el propio ASP.NET MVC, por lo que aparecerán en el idioma en el que tengamos instalado el framework. Lo mismo ocurre con los mensajes de error que aparecen en la YSOD (“Pantalla amarilla de la muerte”), que normalmente nos los encontraremos en inglés.

Para solucionarlo de forma rápida, simplemente tenemos que descargar a través de Nuget  el paquete de idioma que nos interese, lo cual introducirá el ensamblado satélite con los recursos localizados en la carpeta de binarios.

La instalación, como siempre que utilizamos Nuget (¿recordáis cómo era la vida sin él? ;-)), es inmediata:

PM> Install-Package microsoft.aspnet.mvc.es
Attempting to resolve dependency 'Microsoft.AspNet.Mvc (= 4.0.20710.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebPages (≥ 2.0.20710.0 && < 2.1)'.
Attempting to resolve dependency 'Microsoft.Web.Infrastructure (≥ 1.0.0.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.Razor (≥ 2.0.20710.0 && < 2.1)'.
You are downloading Microsoft.AspNet.Mvc.es from Microsoft, the license agreement to which 
is available at http://www.microsoft.com/web/webpi/eula/MVC_4_eula_ESN.htm. 
Check the package for additional dependencies, which may come with their own license agreement(s). 
Your use of the package and dependencies constitutes your acceptance of their license agreements. 
If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.AspNet.Mvc.es 4.0.20710.0'.
Successfully added 'Microsoft.AspNet.Mvc.es 4.0.20710.0' to MvcApplication8.

De esta forma, ya los mensajes aparecerán traducidos al idioma especificado por la cultura del hilo de ejecución:

Culture: es-ES Culture: en-US


image
Obviamente, podemos instalar en el proyecto tantos paquetes de idioma como necesitemos :-)

En fin, un pequeño truquillo que espero que os sea útil.

Publicado en: Variable not found.

17 Comentarios:

andres descalzo vazquez dijo...

Hola, ¿es aplicable para proyectos con MVC3?

andres descalzo vazquez dijo...

Veo que dice "Attempting to resolve dependency 'Microsoft.AspNet.Mvc (= 4.0.20710.0)'.", mi pregunta es si existe lo mismo para MVC3

josé M. Aguilar dijo...

Hola, Andrés!

Que yo haya encontrado, no existe nada así de sencillo para MVC3.

A lo sumo, podías descargar las versiones localizadas del framework.

Lo que no he probado es si estos mismos ensamblados los puedes descargar sobre un proyecto MVC 4 (para que Nuget no se queje), y desde ahí copiar&pegar sobre un proyecto MVC3. Si tengo un ratillo, hago el experimento a ver qué tal.

Saludos!

andres descalzo vazquez dijo...

Gracias

Unknown dijo...

Hola a todos, he probado esta solución y en local funciona correctamente, sin embargo cuando publico el proyecto en un servidor, el error persiste.

Alguna idea?

josé M. Aguilar dijo...

Hola, Raúl!

Pues en principio, debería funcionarte. Simplemente, asegúrate de que en la publicación se están incluyendo los ensamblados satélite de la carpeta /bin (/es, /fr, etc...), y que estás estableciendo la cultura de forma correcta en el hilo.

No se me ocurre nada más que pueda estar ocasionándote el problema...

Suerte & un saludo!

Anónimo dijo...

Hola! Muchas gracias por la información. Qué código tengo que tocar para que esto me empiece a andar? Ya que nada me cambió y los archivos en la carpeta BIN de español los veo bien.

Muchas gracias!!! :)

josé M. Aguilar dijo...

Hola!

Pues el simple hecho de instalar los paquetes debería ser suficiente.

Eso sí, siempre que la cultura del hilo sea la del idioma en el que quieres que te aparezcan los mensajes, claro. Esto se puede establecer en el web.config, o bien desde código estableciendo Thread.CurrentThread.CurrentCulture y CurrentUICulture en un punto inicial del proceso de la petición (p.e., en la inicialización del controlador, o en un filtro).

Saludos.

Anónimo dijo...

Te hice la última pregunta y te agradezco la dedicación. Saludos, Fernando.-

Arturo dijo...

Hola José,

Muchas gracias por el artículo.

¿hay alguna librería que permita cambiar el idioma de los mensajes que dependan del idioma del framework, sin cambiar o reinstalar el framework?

josé M. Aguilar dijo...

Hola, Arturo.

Supongo que podrías conseguirlo añadiendo todos los paquetes de idiomas que necesites.

http://www.microsoft.com/en-us/download/details.aspx?id=30667

Es decir, no es necesario reinstalar el framework, sólo añadirle los recursos localizados que necesites.

Saludos.

Leopoldo dijo...

Hola José,

Coloqué un breakpoint en el archivo Global.asax.cs para leer qué idioma está usando el hilo. Efectivamente toma el valor que le asigne yo en web.config, pero tengo dos preguntas:

1) El valor debe ser "es-ES" o simplemente "es", ya que la carpeta que se creó en bin se llama "es"

2) Cuál es la lógica que sigue la aplicación para buscar en la carpeta "bin\es" ya que sólo veo System.Web.Mvc.resources.dll y el paquete de instalación trae también un XML.. Siento que me hace falta conocer la teoría detrás para poder hacerlo funcionar

Gracias y saludos desde México

josé M. Aguilar dijo...

Hola!

Depende de lo que se quiera afinar en la localización, pero normalmente da igual.

Si en tu sistema está activa la cultura "es-ES" (español-España), el sistema buscará recursos asociados a "es-ES", y si no los encuentra buscará los asociados a "es".

En cuanto al contenido de bin/es, lo importante es el archivo de recursos (.dll). El XML no recuerdo lo que lleva, pero probablemente no sea importante.

Saludos.

Unknown dijo...

hola disculpen pero soy nuevo en estoy y quisiera saber como instalar el package de idioma en español
en la ventana Package Manager Console agrego esta linea y presiono Enter
Install-Package microsoft.aspnet.mvc.es

tengo instalado MVC 4 y me aparece error

Anónimo dijo...

Hola, Maroczy!

Qué error te aparece?

Unknown dijo...

Hola Buenos días,

Estoy trabajando en un proyecto MVC 4 desplegado en azure e instale el paquete v4.0.30319 y estoy agregando la cultura al hilo pero no funciona, debo incluir algun archivo de recursos adicional para que funcione o algo?

si tiene un ejemplo que le funcione en la nube se lo agradeceria

att

John Paul

josé M. Aguilar dijo...

Hola, John!

Efectivamente, tienes que instalar los paquetes de idioma (ensamblados satélite) que se correspondan con las culturas que vayas a establecer.

Mediante Nuget, un Install-Package microsoft.aspnet.mvc.es (ojo a las versiones!) debería instalarte el paquete de localización al español, por ejemplo.

Saludos.