Как определить, поддерживает ли браузер язык? - PullRequest
1 голос
/ 07 октября 2009

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

Спасибо, Марк.

Ответы [ 4 ]

6 голосов
/ 07 октября 2009

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

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

Большинство браузеров отправляют заголовок 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 для определения языка пользователя .

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

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

то есть:

  • Я предпочитаю французский
  • если "fr" невозможен, мне нравится "french from France"
  • если это тоже невозможно, я принимаю "английский из США"
  • и если это тоже невозможно, я в порядке с "english"

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

2 голосов
/ 07 октября 2009

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

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

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

$_SERVER["HTTP_ACCEPT_LANGUAGE"]
0 голосов
/ 08 октября 2009

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

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

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

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

0 голосов
/ 07 октября 2009

Можно узнать языковые предпочтения пользователя, изучив заголовок Accept. Я написал статью на эту тему несколько лет назад (2000, фу! ), исследуя этот и несколько альтернативных механизмов.

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

Удачи!

...