Właściwym sposobem jest sprawdzenie nagłówka HTTP Accept-Language przesłanego do serwera. Zawiera uporządkowaną, ważoną listę języków, które użytkownik skonfigurował w swojej przeglądarce.
Niestety ten nagłówek nie jest dostępny do odczytu w JavaScript; otrzymujesz tylko informację navigator.language
, która wersja zlokalizowanej przeglądarki została zainstalowana. Niekoniecznie jest to to samo, co preferowane języki użytkownika. W IE zamiast tego dostajesz systemLanguage
(język instalacji systemu operacyjnego), browserLanguage
(taki sam jak language
) i userLanguage
(region systemu operacyjnego skonfigurowany przez użytkownika), które są podobnie nieprzydatne.
Gdybym musiał wybierać między tymi właściwościami, najpierw wąchałem userLanguage
, wracając do language
i dopiero potem (jeśli te nie pasowały do żadnego dostępnego języka), patrząc w browserLanguage
końcu systemLanguage
.
Jeśli możesz umieścić skrypt po stronie serwera w innym miejscu w sieci, które po prostu odczytuje nagłówek Accept-Language i wyrzuca go z powrotem jako plik JavaScript z wartością nagłówka w ciągu, np .:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
wtedy możesz dołączyć <skrypt src> wskazujący na tę zewnętrzną usługę w HTML i użyć JavaScript do parsowania nagłówka języka. Nie znam jednak żadnego istniejącego kodu biblioteki, ponieważ parsowanie Accept-Language jest prawie zawsze wykonywane po stronie serwera.
Cokolwiek zrobisz, na pewno potrzebujesz zastąpienia przez użytkownika, ponieważ dla niektórych osób zawsze będzie to błędne odgadnięcie. Często najłatwiej jest umieścić ustawienie języka w adresie URL (np. Http: //www.example.com/en/site vs. http: //www.example.com/de/site) i pozwolić użytkownikowi kliknąć powiązania między nimi. Czasami potrzebujesz jednego adresu URL dla obu wersji językowych, w takim przypadku musisz zapisać to ustawienie w plikach cookie, ale może to dezorientować agentów użytkownika bez obsługi plików cookie i wyszukiwarek.