2009-10-07 3 views
1

Я создаю многоязычный веб-сайт. Можно ли проверить, установлен ли какой-либо конкретный язык на компьютере пользователя, используя PHP или Javascript? Я хочу обнаружить это и отобразить сообщение пользователю, если язык не поддерживается/не установлен.Как определить, поддерживает ли браузер язык?

Thanks, Mark.

+0

Вы имеете в виду говорящий язык, а не язык программирования, не так ли? –

+0

Правильно Маркрам. –

ответ

2

Браузеры обычно отправляют заголовок Accept-Language, который может дать вам небольшой намек на язык, который человек ожидает увидеть. В моем случае, мой браузер послал этот заголовок stackoverflow.com:

Accept-Language: en-us,en;q=0.5 

Предполагая, что вы используете PHP на стороне сервера, вы можете поиска этой информации в переменной $ _SERVER:

$_SERVER["HTTP_ACCEPT_LANGUAGE"] 
6

Определить, какие языки установлены , возможно, не совсем возможно ...

... Но вы можете определить, какие языки пользователь хочет получить с веб-сайтов - то есть, в общем, какие языки он может понять.

Большинство браузер отправить HTTP-заголовок под названием «Accept-Language», который может иметь значение, например, как «fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3» (это то, что мой текущий браузер отправить на веб-сайты я посещаю)

На стороне PHP, вы можете получить это в $_SERVER массиве:

var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']); 

Выведет:

string 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3' (length=35) 

Здесь он указывает, что я хочу, чтобы сайты отправляли мне контент на французском языке; но я также принимаю английский (желательно английский английский, но я в порядке с просто английским английским стандартом)


Вы можете найти довольно много примеров того, как разбирать это на PHP; например: Parse Accept-Language to detect a user's language.

Используя код, предоставленный в этой статье, я получаю этот массив языков:

array 
    'fr' => int 1 
    'fr-fr' => string '0.8' (length=3) 
    'en-us' => string '0.5' (length=3) 
    'en' => string '0.3' (length=3) 

т.е.

  • Я предпочитаю французский
  • если «пт» не представляется возможным, мне нравится «французский из Франции»
  • если это невозможно, я принимаю «английский из США»
  • и если это тоже невозможно, я в порядке с «английским»

И если веб-сайт не может обслуживать никого из этих ... Ну, я полагаю, у меня нет большого выбора, и я получу все он хочет отправить меня ...

+0

Когда сервер не сможет предоставить «fr», но сможет предоставить «fr-fr»? Разве это не имело бы смысла для них быть другим? – Alohci

+0

@Alohci: hu ... Я полагаю, вы правы ^^ (я не помню, как настроить текущий браузер, который я использую, - я полагаю, я сделал это слишком быстро) –

+0

Спасибо за подробный ответ Pascal - очень полезно. –

0

Можно изучить языковые настройки пользователя, изучив заголовок Accept.< selfpromotion type = "бесстыдный" > Я написал a paper on the subject еще несколько лет назад (2000, phew!), исследуя это и пару альтернативных механизмов. </selfpromotion >

С тех пор появилось немало интересных ресурсов; особенно мне нравится this article, который использует прагматичный подход для PHP.

Удачи вам!

+0

Спасибо за ссылки - нашел, что они хорошо читают :) –

0

Я занимаюсь многоязычным материалом в течение последних десяти лет, и у меня сложилось впечатление, что вы пытаетесь переусердствовать: вы смотрите на него неправильно. Вам не важно, какой язык (или для ОС или браузера) установлен на компьютере пользователя: язык ОС не имеет значения, а современные браузеры поддерживают практически все языки (и, начиная с кончины NN4, все записи системы/алфавиты, которые нашли место в стандарте Unicode). То, что вы должны преследовать, - это то, что предпочитает пользователь . Пользователь является узким местом в отношении количества поддерживаемых языков.

Заголовок Accept-Language может быть хорошим решением - если он сработает. По моему опыту, это не так уж часто. Средний пользователь сегодня все еще должен узнать, что URL-адрес попадает в адресную строку, а не в форму поиска на главной странице. Я бы не ожидал, что более 1-2% населения Сети узнают о HTTP-заголовках (да, м в оптимистическом настроении сегодня вечером). Пользователи с радостью придут на ваш сайт с любым языком, на котором их браузер был первоначально настроен. Это включает в себя туристов из киберкафе во всем мире, экспатриантов, работающих за границей для компаний с сильной политикой «не возиться с конфигурацией», пожилые люди, у которых внуки, способные работать с ИТ, имеют странное чувство юмора, общие машины и т. Д. Вы чаще будете ошибаться, если не ошибаетесь.

Концепция отображения сообщения для неподдерживаемых языков также сомнительна. Если пользователь с, скажем, пунджабским браузером, может перейти на ваш сайт, он, вероятно, сможет увидеть, что вы не предоставляете Пенджаби самостоятельно - не нужно прерывать его просмотр сообщениями.

Все, что сказано, иногда самое простое решение - лучшее: я предлагаю вам выбрать пользователя. Выложите список доступных языков, и пользователь будет более чем счастлив принять догадки из вашего кода. И он/она будет делать это правильно каждый раз.

+0

Как ни странно, я сделал такой же вывод из своего исследования со вчерашнего дня. Accept-Language не является надежным. Последнее, что я хочу, чтобы клиент увидел «ошибку» без причины. По этой причине я собираюсь отказаться от решения «автоматического обнаружения». Спасибо за ваш совет и за обмен вашей точкой зрения. –

Смежные вопросы