W dzisiejszym, artykule z cyklu Szybkie Triki, spróbujemy wykryć język przeglądarki użytkownika za pomocą JavaScriptu – zadanie które byłem zmuszony wykonać, przy okazji dowiadując się kilku interesujących faktów.
Javascript podejście pierwsze
Pierwszą metodą, która przychodzi na myśl, chcąc pozyskać język przeglądarki jest:
-
navigator.language;
Metoda ta jest wspierana przez przeglądarki wykorzystujące webkit. Specjalnie (oczywiście) dla Internet Explorera mamy metodę:
-
navigator.userLanguage;
I problem byłby rozwiązany gdyby nie fakt, że obie te metody nie koniecznie poprawnie zwracają kod języka na którym nam zależy.
Pierwsza metoda zwraca jedynie domyślny język przeglądarki. Co to dla nas znaczy? Znaczy tyle, że jeżeli użytkownik zmieni język przeglądarki, na przykład na język angielski (domyślnie przeglądarka była w języku polskim) to metoda ta zwróci kod języka polskiego.
Druga metoda natomiast – ta dla IE – zwraca język systemu operacyjnego. Efekt – nadal nie mamy informacji o tym jaki język ma przeglądarka użytkownika, a podana informacja ma się nijak dla zamierzonego celu.
Javascript i przyjaciele
Zatem w jaki sposób możemy dowiedzieć się jakim językiem posługuje się przeglądarka użytkownika? Wystarczy zapytać przyjaciela
A że przyjaciół mamy wielu, to tym razem zapytamy dla przykładu PHP-a, Perla i Java Servlets:
PHP
-
$language = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
Perl
-
$language = $ENV{"HTTP_ACCEPT_LANGUAGE"};
Java Servlets / JSP
-
String language = request.getHeader("accept-language");
Bez względu na to który wariant wybierzemy, musimy napisać prosty skrypt który będzie zwracał nam informacje zawarte w tej zmiennej.
Skoro mamy już skrypt zwracający nam informacje dotyczace języka, pobrane z nagłówka, wystarczy jedno małe żądanie AJAX-owe:
-
var browserLang;
-
jQuery.ajax({
-
url: "ADRES_SKRYPTU_Z_DANYMI",
-
dataType: 'jsonp',
-
success: function(data) {
-
browserLang = normaliseLang(data);
-
//już wiesz jaki jest język, więc idziesz dalej
-
}
-
});
by dowiedzieć się via Javascript jaki język ma ustawiony użytkownik.
Co prawda rozwiązanie nie jest w pełni JavaScriptowe
ale z pewnością jest bardziej niezawodne od natywnych metod w JS-ie.



