none
Sitio Multilenguaje en MVC RRS feed

  • Pregunta


  • Bueno, pues aquí estoy de nuevo dando lata, a esta comunidad! :p

    En esta ocasión estoy desarrollando un sitio multilenguaje, esto lo quiero hacer en base de recursos de aplicación (.resx).

    Y colocando en mi global.asax de mi sitio el siguiente código;


     
     void Session_Start(object sender, EventArgs e) { 
        CultureInfo culture = new CultureInfo("es-mx");
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
    }

    Y tengo en mi carpeta App_GlobalResources dos archivos

    Resources.resx y Resources.es-mx.resx


    Según los manuales y el análisis que he realizado con esto:



    <%= Resources.Resource.tours %>


    Debería de mostrarme Bienvenido en mi sitio y sin el primer bloque de código debería mostrarme
    Welcome

    La primera vez que entro al sitio, todo bien, me lo muestra en español, posteriormente se ven en ingles y siempre queda así!

    Algún paso que este omitiendo?

    Alguien tiene experiencia con este tipo de situaciones?

    Agradezco mucho su ayuda de antemano! Gracias ^_^ !!!!


    Leandro Tec Can Desarrollador Web En Tecnologias .NET http://www.leandrotec.com http://www.yoprogramoen.net
    • Cambiado Rafael Fagundes viernes, 27 de noviembre de 2009 14:19 (De:ASP.NET)
    lunes, 16 de noviembre de 2009 19:26

Respuestas

  • Lo primero que necesitas hacer es tener la cultura que quieres usar... puedes coger la que tiene el usuario, puedes hacer que se cambie con links, y guardarla en sesion, cookies, o incluso en la url...

    Entiendo que esta parte la tienes solventada, ahora lo que necesitas es asignar la cultura elegida en cada request.

    Esto lo puedes hacer en la acción Execute del ControllerBase o usando ActionFilters por ejemplo.

    CultureInfo culture = new CultureInfo (cultureCode); 
    System.Threading.Thread.CurrentThread.CurrentCulture = culture; 
    System.Threading.Thread.CurrentThread.CurrentUICulture = culture;

    Aquí tienes un ejemplo usando ActionFilters

    Si usas los ActionFilters Recuerda que si le pones el atributo al controller, se ejecutara en todas las acciones, y si se lo pones a un ControllerBase personalizado, se ejecutara en todas las acciones de todos los controllers que hereden de esta clase.

    Espero que te sirva!

    Un saludo
    viernes, 27 de noviembre de 2009 16:50

Todas las respuestas

  • Hola. Si quieres localizar todo tu sitio (lo usual), sería bueno que pusieras una sección "globalization" en tu web.config. Algo como:

    <?xml version="1.0"?>
    <configuration>
    ...
        <system.web>
            ...
            <globalization culture="es-mx" uiCulture="es-mx" />
            ...
        </system.web>
    ...
    </configuration>

    Si quieres localizar una sola página en particular, lo puedes declarar con una directiva de página: 

    <%@ Page UICulture="es-mx" Culture="es-mx" %>

    Creo que te convendría más eso que intentar localizar desde el global.asax. Pienso que tu problema se debe a que en cada petición HTTP se genera un hilo con cultura propia, pero tú solo estableces la cultura cuando se hace la primera petición, por lo que con la segunda ya se perdió la cultura establecida. Pienso que te convendría más localizar desde el web.config (o en el aspx con la directiva de página, si solo es para unas cuántas). 

    Saludos. 


    Fernando Gómez
    www.fermasmas.com
    jueves, 19 de noviembre de 2009 18:57
  • Si, asi es Fernando, ese era el problema, pero ¿ tu sabras cual es el metodo correcto dentro del Global.asax en donde tengo que ponerlo???

    por que ponerlo en cada Action no siento que sea la mejor forma de hacerlo jejeje!!

    Gracias por tu respuesta ;)

    Leandro Tec Can Desarrollador Web En Tecnologias .NET http://www.leandrotec.com http://www.yoprogramoen.net
    viernes, 20 de noviembre de 2009 22:48
  • Lo primero que necesitas hacer es tener la cultura que quieres usar... puedes coger la que tiene el usuario, puedes hacer que se cambie con links, y guardarla en sesion, cookies, o incluso en la url...

    Entiendo que esta parte la tienes solventada, ahora lo que necesitas es asignar la cultura elegida en cada request.

    Esto lo puedes hacer en la acción Execute del ControllerBase o usando ActionFilters por ejemplo.

    CultureInfo culture = new CultureInfo (cultureCode); 
    System.Threading.Thread.CurrentThread.CurrentCulture = culture; 
    System.Threading.Thread.CurrentThread.CurrentUICulture = culture;

    Aquí tienes un ejemplo usando ActionFilters

    Si usas los ActionFilters Recuerda que si le pones el atributo al controller, se ejecutara en todas las acciones, y si se lo pones a un ControllerBase personalizado, se ejecutara en todas las acciones de todos los controllers que hereden de esta clase.

    Espero que te sirva!

    Un saludo
    viernes, 27 de noviembre de 2009 16:50
  • Hola Leandro,
    Tuve el mismo problema cuando quise utilizar localización y globalización, y me he guardado en los bookmarks éste link que te envío (http://www.c-sharpcorner.com/UploadFile/ankithakur/Globalization_Localization_in_DotNet_CSharp07032006023510AM/Globalization_Localization_in_DotNet_CSharp.aspx)

    Espero que te sea de utilidad, aunque el ejemplo dado no sea con MVC, seguramente podrás adaptarlo perfectamente.

    Saludos.

    -
    Esteban Murchio.

    Si éste post te ha ayudado, por favor, márcalo como respuesta para que pueda ayudar a otros.

    • Propuesto como respuesta VS2008Fans martes, 16 de marzo de 2010 22:45
    viernes, 4 de diciembre de 2009 17:10