Question

Je commence tout juste à localiser une application ASP.NET MVC. La plupart des chaînes seront définies dans des fichiers de ressources et récupérées via Aide à la localisation de Matt . Les autres chaînes doivent être stockées dans une base de données.

Ma question: Devrais-je définir CurrentUICulture au début du pipeline de demandes et l'utiliser dans toute l'application, ou utiliser directement Request.UserLanguages ??[0] à la demande?

Pour le moment , je pense que je devrais définir CurrentUICulture dans Application_BeginRequest . La mise en œuvre ressemblerait à 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);
}

S'agit-il du meilleur endroit pour définir CurrentUICulture et Request.UserLanguages ??[0] est-il le meilleur endroit pour obtenir ces informations?

Mise à jour:

l'article d'Ariel montre que cela 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"/>
Était-ce utile?

La solution

Voici un exemple utilisant un HttpModule:

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

Autres options, créez une classe de contrôleur de base et implémentez la logique de localisation. Vous pouvez également utiliser un attribut de filtre d'action, mais vous devez vous rappeler de l'ajouter à chaque contrôleur ou de combiner cette approche avec la classe de contrôleur de base.

Autres conseils

Request.UserLanguages ??[0] ne peut être qu'un indice de la langue que les utilisateurs souhaitent voir. La plupart des utilisateurs ne savent pas où changer la langue du navigateur.

Autre point: ne vous assurez pas que Request.UserLanguages ??[0] est une langue valide. Cela peut même être nul. (Je ne sais pas ce que les robots ont là)

Vous avez généralement un sélecteur de langue sur la page. Une fois que l'utilisateur a sélectionné une langue, celle-ci est stockée dans un cookie, une session ou une URL. J'aime utiliser l'URL car je trouve que ça a l'air joli.

Si un utilisateur voit votre page sans avoir défini de langue sur votre page, vous devez vérifier si Request.UserLanguages ??[0] est une langue que vous prenez en charge et définissez Thread.CurrentThread.CurrentUICulture.

J'utilise un filtre pour définir Thread.CurrentThread.CurrentUICulture. C'est correct tant qu'aucun autre filtre n'utilise Thread.CurrentThread.CurrentUICulture. Sinon, vous devrez définir le bon ordre d'exécution pour les filtres.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top