28 votes

ASP.NET MVC: quand définir Thread.CurrentThread.CurrentUICulture?

Je suis seulement au début de localiser une ASP.Net application MVC. La plupart des chaînes seront définies dans les fichiers de ressources et récupéré via Matt Localisation Aides. D'autres chaînes doivent être stockées dans une base de données.

Ma Question: Dois-je configurer CurrentUICulture début dans le pipeline de demande et de l'utiliser tout au long de l'application, ou utiliser directement Request.UserLanguages[0] chaque fois que nécessaire?

Maintenant je pense que je devrais ensemble CurrentUICulture dans Application_BeginRequest. La mise en œuvre devrait ressembler à quelque chose comme ceci:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var cultureName = HttpContext.Current.Request.UserLanguages[0];
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
}

Est-ce le meilleur endroit pour mettre en CurrentUICulture et Request.UserLanguages[0] le meilleur endroit pour obtenir cette information?


Mise à jour:

Ariel du post m'a fait réaliser que ce qui peut être défini sans code, à l'aide de web.config

<system.web>
  <!--If enableClientBasedCulture is true, ASP.NET can set the UI culture and culture for a Web page automatically, based on the values that are sent by a browser.-->
  <globalization enableClientBasedCulture="true" culture="auto:en-US" uiCulture="auto:en"/>

13voto

Ariel Popovsky Points 3088

Voici un exemple utilisant un HttpModule:

http://weblogs.manas.com.ar/smedina/2008/12/17/internationalization-in-aspnet-mvc/

Autres options, créez une classe Controller de base et implémentez-y la logique de localisation. Ou utilisez un attribut de filtre d'action, mais vous devrez vous rappeler de l'ajouter sur chaque contrôleur ou de combiner cette approche avec la classe de contrôleur de base.

6voto

Malcolm Frexner Points 5393

Demande.UserLanguages[0] ne peut être un indicateur de ce que la langue les souhaits des utilisateurs à voir. La plupart des utilisateurs ne savent pas où changer la langue du navigateur.

Un autre point: Ne pas être sûr que la Demande.UserLanguages[0] est un langage valide. Il peut même être nulle. (Pas sûr de ce que les robots ont-il)

Vous avez généralement une Langue sélecteur sur la page. Une fois qu'un utilisateur a sélectionné une langue, il est stocké dans un cookie, session ou une url. J'aime utiliser l'url parce que je pense que c'est jolie.

Si un utilisateur voit votre page sans avoir mis une langue sur votre page, vous devez vérifier si la Demande de la.UserLanguages[0] est une langue prise en charge et de définir Fil.CurrentThread.CurrentUICulture.

J'utilise un filtre pour définir Fil.CurrentThread.CurrentUICulture. C'est ok aussi longtemps qu'aucun autre filtre est à l'aide de Fil.CurrentThread.CurrentUICulture. Sinon, vous devez définir le droit de l'exécution de la commande pour les filtres.

J'utilise aussi Matts helper et ça a très bien fonctionné jusqu'à présent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X