Doğru yol, sunucuya gönderilen HTTP Accept-Language üstbilgisine bakmaktır . Bu, kullanıcının tarayıcılarını tercih edecek şekilde yapılandırdığı sıralı, ağırlıklı dil listesini içerir.
Ne yazık ki bu başlık JavaScript içinde okunamıyor; elde navigator.language
ettiğiniz tek şey, web tarayıcısının hangi yerelleştirilmiş sürümünün yüklü olduğunu söyler. Bu, kullanıcının tercih ettiği dil (ler) ile aynı şey değildir. Bunun yerine IE'de systemLanguage
(işletim sistemi yüklü dili), browserLanguage
(ile aynı language
) ve userLanguage
(kullanıcı tarafından yapılandırılmış işletim sistemi bölgesi) elde edersiniz .
Bu özellikler arasında seçim yapmak zorunda kalsaydım, userLanguage
ilk önce kokladım language
ve geriye ve sadece bundan sonra (mevcut herhangi bir dille eşleşmediyse) browserLanguage
ve sonunda baktım systemLanguage
.
Net üzerinde Accept-Language üstbilgisini okuyan ve üstbilgi değeri dizede olan bir JavaScript dosyası olarak dağıtan başka bir yere sunucu tarafı komut dosyası koyabilirseniz, örn .:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
HTML'deki harici hizmeti işaret eden bir <script src> ekleyebilir ve dil başlığını ayrıştırmak için JavaScript kullanabilirsiniz. Accept-Language ayrıştırma hemen hemen her zaman sunucu tarafında yapıldığından, bunu yapmak için herhangi bir kütüphane kodu bilmiyorum.
Sonunda ne yaparsanız yapın, kesinlikle bir kullanıcı geçersiz kılmanız gerekir, çünkü bazı insanlar için her zaman yanlış tahmin eder. Genellikle dil ayarını URL'ye koymak (örneğin, http: //www.example.com/tr/site vs http: //www.example.com/de/site) ve kullanıcının tıklamasına izin vermek en kolay yoldur. ikisi arasındaki bağlantılar. Bazen her iki dil sürümü için tek bir URL istersiniz, bu durumda ayarı çerezlerde saklamanız gerekir, ancak bu kullanıcı aracılarını çerezler ve arama motorları desteği olmadan karıştırabilir.