Автоопределение языковых файлов на основе браузера и сочетаний URL с PHP - PullRequest
2 голосов
/ 12 ноября 2009

У меня есть сайт со многими людьми со всего мира. Все дело в UTF-8, поэтому люди могут свободно представлять контент и говорить на любом языке, который пожелают - от греческого до английского.

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

Так что теперь мне нужно знать, как я могу создать систему, которая будет пытаться автоматически определять предпочитаемый пользователем язык, но при этом разрешать его изменение.

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

Проблема в том, что пользователи интернет-кафе могут захотеть изменить эти настройки, но не смогут или пользователи могут быть недостаточно компетентны в Интернете, чтобы даже знать о них. Представьте себе тупого американского туриста на каком-то компьютере в другой стране. (Я могу смеяться над ними, потому что я один).

Таким образом, эти люди нуждаются в лучшем способе изменить язык, если они не могут переопределить браузер. Чтобы ответить на это, я подумал, что мог бы реализовать систему на основе URL, такую ​​как site.com/en_us/... или site.com/fr_ca/....

Хорошо, вот как я могу представить, как это работает.

  • Новый пользователь A появляется.
  • Мой сайт не находит набор файлов cookie для локали
  • просматривает и анализирует заголовок языка подтверждения
  • проверяет наличие lang dir (чтобы убедиться, что я поддерживаю fr_ca!)
  • устанавливает cookie с языком fr_ca
  • перенаправляет пользователя на site.com/fr_ca

  • Пользователь A теперь загружает site.com/fr_ca

  • Мой сайт находит локальный файл cookie
  • Файл cookie локали соответствует языку локали URL
  • Пользователь должен хотеть эту локаль
  • продолжить загрузку страницы

  • Пользователь B получает ссылку от пользователя A, указывающую на site.com/fr_ca

  • Пользователь B загружает страницу, и мой сайт не находит локальный файл cookie

Здесь я как бы потерялся, что делать дальше

  • Мой сайт находит, что браузер UserB говорит en_us, поэтому он перенаправляет их или
  • Мой сайт создает локальный файл cookie с помощью fr_ca, и пользователь должен посетить en_US, чтобы это изменить.

Похоже, это довольно надежный способ определения языка, так что я знаю, стоит ли ему регистрироваться или регистрироваться?

Ответы [ 4 ]

2 голосов
/ 12 ноября 2009

Я бы сказал: «Мой сайт находит, что браузер UserB сообщает en_us, поэтому он перенаправляет их», так как это ожидаемое поведение для нового посетителя - , если , у вас нет переключателей языка.

С другой стороны, если вы делаете предоставляете где-то хорошо видимый блок переключателей языка - тогда я бы использовал «Мой сайт создает файл cookie локали с FR, и пользователь должен будет посетить EN изменить это ", потому что" неправильный язык "может быть легко переключен.

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

Тогда эти роли могут быть назначены каждому уровню согласования языка:

  1. (самый низкий приоритет) cookie сообщает о предпочтениях посетителя
  2. когда нет cookie, accept-language сообщает, какой язык использовать
  3. когда нет языка принятия (или вы его не поддерживаете), используйте язык по умолчанию
  4. (наивысший приоритет), когда в URL есть спецификатор языка - используйте его, независимо от значений cookie / accept-language
1 голос
/ 12 ноября 2009

Я бы сделал индикатор языка максимально прозрачным. Это означает, что я поместил бы это в URL, как вы предложили, а не в cookie. Находясь в URL-адресе, пользователь может легко изменить его при необходимости.

Теперь, если индикатор языка отсутствует, вы можете выполнить согласование языка на Accept-Language или других критериях и перенаправить пользователя к этому языку для представления запрошенного ресурса.

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

1 голос
/ 12 ноября 2009

Вот как я это делаю ...

Всегда есть место на сайте, где пользователь может переключать языки. Языковые кнопки должны загрузить ту же страницу, на которой они находятся в данный момент, и установить cookie для этого языка.

Чтобы проверить, на каком языке загружаться ...

// cookie exists, they know what language they want
if cookie exists load that language

// cookie doesn't exist - its expired or this is their first visit
elseif accept-language is set, load that language; set cookie

// no accept-language present
else load some default language; set cookie

Скажите, что на ваш сайт заходит англоязычный во Франции.

  • cookie отсутствует, но язык принятия - французский.

  • загружен французский, установлен cookie.

  • пользователь видит переключатель языка и выбирает английский. английский загружается, и на оставшееся время на сайте устанавливается cookie.

Если куки не принимаются в браузере, вы передаете lang = [lang] в строке запроса и проверяете это после проверки на наличие куки.

0 голосов
/ 12 ноября 2009

Имейте в виду, что с арабскими языками возникает небольшая проблема, поскольку они пишут справа налево, поэтому вы должны определить направление записи в большинстве тегов. Также я бы сделал языковой параметр строгим, вместо использования en_US или en__GB используйте параметр en, так как между ними нет большой разницы.

...