Лучший способ определить локаль пользователя в браузере
У меня есть сайт (Flash), локализованный на дюжину языков, и я хочу автоматически определить значение по умолчанию в зависимости от настроек браузера пользователя, чтобы минимизировать количество шагов для доступа к контенту.
К вашему сведению, я не могу использовать серверные сценарии из-за ограничений прокси, поэтому я думаю, что для решения проблемы подойдет JavaScript или ActionScript.
Вопросы:
Какой лучший способ "угадать" локаль пользователя?
Существуют ли какие-либо простые классы / функции, которые могут мне помочь (без сложных пакетов локализации)? Специально, чтобы разбить все возможные языки на меньшее количество (у меня есть переводы) умным способом.
До какой степени я могу доверять такому решению?
Любые другие обходные пути или предложения?
11 ответов
Надлежащим способом является поиск HTTP - заголовка Accept-Language, отправленного на сервер. Он содержит упорядоченный, взвешенный список языков, которые пользователь настроил для своего браузера.
К сожалению, этот заголовок недоступен для чтения внутри 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';
тогда вы могли бы включить