2008-11-01 23 views
21

Buduję aplikację internetową ASP.NET, a wszystkie moje ciągi są przechowywane w pliku zasobów. Chciałbym dodać drugi język do mojej aplikacji, a najlepiej chciałbym automatycznie wykryć język przeglądarki użytkownika (lub język systemu Windows) i domyślnie to zrobić, zamiast dokonywania wyboru poza angielskim. Obecnie obsługuję wszystkie zasoby ręcznie, więc dodanie drugiego pliku zasobów i języka jest banalne z mojego punktu widzenia, gdybym miał łatwy sposób automatycznie dowiedzieć się, jaki język do wyświetlenia.Wielojęzyczna aplikacja internetowa - jak wykryć język użytkownika w ASP.NET?

Czy ktoś to zrobił, czy też myślisz o tym, jak mogę odzyskać tę wartość? Ponieważ ASP.NET jest oparty na serwerze, nie mam żadnego dostępu do określonych ustawień przeglądarki.

ROZDZIELCZOŚĆ: Oto, co zrobiłem. Użyłem słowa "For Each", aby przejść przez "HttpContext.Current.Request.UserLanguages" i wyszukać jedną, którą obsługuję. Właśnie sprawdzam dwa pozostałe znaki, ponieważ nie obsługujemy jeszcze żadnych dialektów - po prostu angielski i hiszpański. Dzięki za pomoc!

Odpowiedz

6

Ten article (linked to archive.org as original link is now dead) może być pomocny przy automatycznym wykrywaniu ustawień językowych przeglądarki.

[EDYCJA] Tak. Cytowany artykuł nie korzysta z ASP.NET. To robi article.

+0

jest to rozwiązanie ASP, ASP.NET nie jest jeden, prawda? –

+0

Chociaż nie jest .NET, pierwszy artykuł był dużo bardziej pouczający niż drugi i przesunął mnie we właściwym kierunku. – SqlRyan

2

To jest świetne pytanie, ponieważ wielu programistów przeoczyło lokalizację w numerze ASP.NET.

ASP.NET powinny automatycznie odebrać od ustawień przeglądarki użytkownika i zmusić CultureInfo.CurrentCulture na język przeglądarki użytkownika. można wymusić problem z linią w Page_OnInit() jak:

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

Jak można to sprawdzić? Wejdź do panelu języków w przeglądarce i zmień ustawienia.

21

Spróbuj w pliku web.config:

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

Spowoduje ASP.NET do automatycznego wykrywania kulturę klienta z nagłówka żądania. Możesz też ustawić to dla każdej strony za pomocą atrybutu Strona.

+0

maxam: Zawijam twój kod w sformatowany blok kodu, aby wyświetlić <> s. "edytuj" odpowiedź, aby zobaczyć, jak to wygląda, jeśli jesteś zainteresowany. –

+0

Dzięki, bardzo docenione! – Maxam

+1

To działało dla mnie (ps: Nie musiałem używać ustawienia 'enableClientBasedCulture') – wdanda

2

Klient zazwyczaj ustawia Accept-Language w nagłówku żądania HTTP z listą ocenionych ilościowo preferowanego języka, tradycyjnie (ale niekoniecznie) w kolejności najbardziej uprzywilejowanych do najmniej uprzywilejowanych. Możesz to przeanalizować, ale jak zauważył Maxam, ASP.NET ma mechanizm do robienia tego w Twoim imieniu.

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 
     { ;} 
    } 
} 

Źródłem tego artykułu jest tutaj: How to detect browser language

Powiązane problemy