2008-11-01 10 views
21

Je crée une application Web ASP.NET et toutes mes chaînes sont stockées dans un fichier de ressources. Je voudrais ajouter une deuxième langue à mon application, et idéalement, je voudrais détecter automatiquement la langue du navigateur de l'utilisateur (ou le langage Windows) et la valeur par défaut, au lieu de leur faire choisir quelque chose en plus de l'anglais. Actuellement, je gère manuellement toute la population de ressources, donc l'ajout d'un deuxième fichier de ressources et d'un langage est trivial de mon point de vue, si j'avais un moyen facile de déterminer automatiquement la langue à afficher.Application Web multilingue - comment détecter la langue de l'utilisateur dans ASP.NET?

Est-ce que quelqu'un a fait cela, ou avez-vous des idées sur la façon dont je pourrais récupérer cette valeur? Comme ASP.NET est basé sur un serveur, je ne semble pas avoir accès à des paramètres de navigateur spécifiques.

RÉSOLUTION: Voici ce que j'ai fini par faire. J'ai utilisé un "For Each" pour passer par "HttpContext.Current.Request.UserLanguages" et en chercher un que je supporte. En fait, je ne fais que vérifier les deux caractères de gauche, car nous ne supportons pas encore les dialectes - seulement l'anglais et l'espagnol. Merci pour votre aide!

Répondre

6

Cette article (linked to archive.org as original link is now dead) peut être utile pour détecter automatiquement le paramètre de langue du navigateur.

[EDIT] Oui. L'article cité n'utilise pas ASP.NET. Ce article fait.

+0

c'est une solution ASP, ASP.NET pas un, non? –

+0

Bien que ce ne soit pas .NET, j'ai trouvé le premier article beaucoup plus instructif que le second, et cela m'a amené dans la bonne direction. – SqlRyan

2

Ceci est une bonne question, car la localisation dans ASP.NET est négligée par de nombreux développeurs.

ASP.NET devrait ramasser automatiquement sur les paramètres du navigateur de l'utilisateur et forcer le CultureInfo.CurrentCulture à la langue du navigateur de l'utilisateur. Vous pouvez forcer la question avec une ligne Page_OnInit() comme:

Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]); 

Comment pouvez-vous tester cela? Entrez dans le panneau des langues de notre navigateur et modifiez les paramètres.

21

Essayez ceci dans le web.config:

<globalization culture="auto" uiCulture="auto" /> 

Cela entraînera ASP.NET pour détecter automatiquement la culture du client de l'en-tête de demande. Vous pouvez également définir ce paramètre par page via l'attribut Page.

+0

maxam: J'ai enveloppé votre code dans un bloc de code formaté pour afficher les <> s. "éditez" la réponse pour voir à quoi cela ressemble, si vous êtes intéressé. –

+0

Merci beaucoup! – Maxam

+1

Cela a fonctionné pour moi (ps: je n'ai pas besoin d'utiliser le paramètre 'enableClientBasedCulture') – wdanda

2

Le client définit généralement Accept-Language dans l'en-tête de requête HTTP avec une liste quantifiée de langage préféré, classiquement (mais pas nécessairement) dans l'ordre du plus favorisé au moins favorisé. Vous pouvez l'analyser, mais comme l'a noté Maxam, ASP.NET a un mécanisme pour le faire en votre nom.

1
/// <summary> 
    /// Sets a user's Locale based on the browser's Locale setting. If no setting 
    /// is provided the default Locale is used. 
    /// </summary> 

public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture) 
{ 
    HttpRequest Request = HttpContext.Current.Request; 
    if (Request.UserLanguages == null) 
     return; 

    string Lang = Request.UserLanguages[0]; 
    if (Lang != null) 
    { 
     // *** Problems with Turkish Locale and upper/lower case 
     // *** DataRow/DataTable indexes 
     if (Lang.StartsWith("tr")) 
      return; 

     if (Lang.Length < 3) 
      Lang = Lang + "-" + Lang.ToUpper(); 
     try 
     { 
      System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang); 
      if (CurrencySymbol != null && CurrencySymbol != "") 
       Culture.NumberFormat.CurrencySymbol = CurrencySymbol; 

      System.Threading.Thread.CurrentThread.CurrentCulture = Culture; 

      if (SetUiCulture) 
       System.Threading.Thread.CurrentThread.CurrentUICulture = Culture; 
     } 
     catch 
     { ;} 
    } 
} 

La source de cet article est ici: How to detect browser language

Questions connexes