Правильним способом є перегляд заголовка мови прийому HTTP, що надсилається на сервер. Він містить упорядкований, зважений список мов, які користувач налаштував на свій веб-переглядач.
На жаль, цей заголовок недоступний для читання в JavaScript; все, що ви отримуєте navigator.language
, це говорить про те, яка локалізована версія веб-браузера була встановлена. Це не обов'язково те саме, що бажана мова (мови) користувача. На IE ви натомість отримуєте systemLanguage
(встановлена ОС мова), browserLanguage
(те саме, що language
) і userLanguage
(налаштована користувачем область ОС), які всі так само не корисні.
Якби мені довелося вибирати між цими властивостями, я б понюхав userLanguage
спочатку, повернувшись до нього language
і лише після цього (якщо вони не відповідали жодній доступній мові), дивлячись browserLanguage
і, нарешті systemLanguage
.
Якщо ви можете помістити сценарій на стороні сервера де-небудь ще в мережі, який просто зчитує заголовок Accept-Language і видаляє його назад як файл JavaScript зі значенням заголовка в рядку, наприклад:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
тоді ви можете включити <script src>, що вказує на цю зовнішню службу в HTML, і використовувати JavaScript для розбору заголовка мови. Я не знаю жодного існуючого бібліотечного коду для цього, оскільки розбір мови Accept майже завжди робиться на стороні сервера.
Що б ви в кінцевому підсумку не робили, вам, безумовно, потрібна переоцінка користувача, оскільки це завжди здогадується неправильно для деяких людей. Найчастіше найпростіше ввести мовну настройку в URL (наприклад, http: //www.example.com/uk/site vs http: //www.example.com/de/site), і дозволити користувачу натиснути зв’язки між ними. Іноді ви хочете отримати єдину URL-адресу для обох мовних версій; у цьому випадку вам потрібно зберегти налаштування у файлах cookie, але це може заплутати користувачів-агентів без підтримки файлів cookie та пошукових систем.