Когда следует использовать language negotiation (согласование языка)

Вопрос

Когда нужно, а когда не нужно использовать согласование языка?

Language negotiation (согласование языка) - функция HTTP протокола, которая позволяет серверу выбирать между несколькими языковыми версиями страницы, основанная на URL и на информации о предпочтениях пользователей, отправленных браузером (в частности, в Accept-Language заголовке). Это отличается от выбора страницы, основанный на IP адресе браузера или от ручного выбора пользователем на странице выбора языка. Если предпочтения пользователей, которые выражаются браузером и языки, которые доступны на сервере отличаются, то показывается страница выбора языков или обслуживается язык установленный по умолчанию.

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

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

Ответ

Краткий ответ: всегда.

Чуть более подробный ответ: почти всегда, но не наедине.

Согласование языка не всегда работает по назначению; есть методы которые используются, чтобы компенсировать недостатки; следует также предусмотреть гибкость навигации.

Недостатки согласования языка

Очевидно, что согласование языка это полезная вещь, но до ее реализации во всех направлениях, важно понять ее границы. Чтобы проиллюстрировать это мы используем сайт www.example.be, который предлагает свой ​​контент на Фламандском, Французском и Немецком языках, здесь применяется согласование языка, и Фламандская язык устанавливается по умолчанию для всех страниц. Наш гость, Сильвия, разговаривает на Итальянском языке, но сможет иметь дело и с Немецким языком. Здесь могут возникнуть несколько ситуаций:

  1. Браузер Сильвии настроен верно и выражает предпочтения пользователей следующим образом: сначала Итальянский язык, а затем Немецкий язык. Когда Итальянский язык будет не доступен на сайте www.example.be, то страницы будут показываться на Немецком языке, посетители будут довольны, то есть все будет хорошо. Это то для чего требуется согласование языка!
  2. Сильвия не имеет технических навыков, она никогда не слышала о HTTP согласовании языка и никогда не нуждалась в изменении настроек своего браузера. Итальянская версия браузера настроена (правильно) на установление Итальянского языка в качестве предпочтения пользователей. Нажимая на www.example.be мы видим: Итальянский язык не доступен и поэтому отображается Фламандский язык, что на этом сайте является языком по умолчанию, пусть и доступен Немецкий язык. А это плохо.
  3. Сильвия не использует свой ​​собственный браузер, она сидит в интернет кафе в Москве. Браузер тут настроен на (или по умолчанию использует) Русский язык. Она снова получает Фламандская язык. А это плохо.

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

Кроме того, даже согласование языка не является важным тогда, когда страницы не являются равноценными, то есть по сути различный контент на разных языках. Статья Одноязычные или многоязычные Веб сайты немного проясняет эту ситуацию, в частности, смотрите подразделы "Многоязычный одинаковый контент" и "Многоязычный измененный контент" . Однако, заметим, что определенная культурная адаптация (например, изменение валюты) не обязательно сделает страницы неравноценными; ограничения неравноценности контента по поводу согласования языка действительно существует тогда, когда сайт адаптирован так, что страницы на разных языках больше не соответствуют друг другу.

Упорядочение недостатков

Несмотря на свою ограниченность, согласование языка является полезной функцией, и её желательно, реализовывать на многоязычных сайтах. Но нужно убрать недостатки. Короче говоря, важно обеспечить гостей значениями для того, чтобы переопределить автоматический выбор языка тогда, когда этот выбор неверный. Эти значения вставляют некоторые элементы интерфейса на страницу (тут мы их называем language controls (управляющие значения языка)), что ссылается на другие доступные языки. Конечно, эти управляющие значения, должны быть хорошо заметными и понятными для посетителя, который не знаком с языком, который в настоящее время отображается на странице.

Возникает один вопрос: согласование языка и ручные управляющие значения языка должны быть реализованы для всех страниц, или только для домашней страницы? Лучший ответ "для всех страниц", за исключением наборов страниц, не являющихся достаточно равноценными. Согласование языка хорошо, потому что, когда Яап отправляет Пьеру ссылку по электронной почте внутри сайта www.example.be, то Пьер будет рад получить Французский версию ссылки, пусть и Яап прочитал её на Фламандском языке. Language controls (управляющие значения языка) должны предоставляться независимо от того, реализовано было согласование языка или нет. Если согласование языка отсутствует, то Пьеру понадобятся управляющие значения для того, чтобы получить Французскую версию ссылки, переданной Яапом; даже если согласование языка присутствует, в вышеупомянутых ситуациях 2 и 3 Сильвие все равно нужно будет переключиться на Немецкий язык вручную.

Кстати, когда среди доступных языков нет тех, которым пользователь отдает предпочтение, некоторые сайты выбирают для отображения страницу специального назначения для выбора языка (сайт www.example.be мог бы сделать это вместо отображения страницы на Фламандском языке). Полезно прояснить ситуацию и не предоставлять приоритет одному языку над другими, это может иметь политический характер. К сожалению, некоторые сайты всегда отображают эту специальную страницу (для домашней страницы) вместо того чтобы реализовать согласование языка. Это заставляет всех гостей всегда попадать на эту страницу , которая не содержит никакой явной пользы для посетителя. Плохой дизайн - это чисто человеческий фактор.

Навигация

Предположим, что Сильвия посещает сайт www.example.be и видит страницы на Фламандском языке (ситуация 2 или 3). Затем она нажимает на переключатель и далее читает уже страницу на Немецком языке, то есть никакой реальной проблемы нет. Но потом она нажимает на ссылку, чтобы зайти на интересную страницу, которая находится на сайте. К сожалению она снова увидит страницу на Фламандском языке! К счастью там еще есть переключатель, чтобы включить Немецкий язык , но становится понятно, что после нескольких таких переходов она разочаруется. А разве сайт www.example.be не может запомнить, что она не может читать на Фламандском языке? Что же здесь необходимо - это некоторая гибкость очевидного выбора языка.

Есть несколько способов, которыми сайт www.example.be может обеспечить эту гибкость. Какой из них выбрать, зависит от основной доступной на сервере технологии и от усилий, которые могут быть применены.

Если сайт реализует механизм session (сессии) (например, с использованием cookies), то достаточно просто организовать то, чтобы язык был частью сессии. После того, как Сильвия нажмет на переключатель и включит Немецкий язык, это действие сохранится (или в cookie, либо на сервере, и прикрепляется к номеру сессии в cookie) и после того при просмотре страниц на сайте Сильвия будет видеть их на Немецком языке. Cookie даже может быть постоянным (хотя это обостряет вопрос личной неприкосновенности), так что Сильвия автоматически увидит страницы на Немецком языке в следующий раз, когда она вернется на сайт www.example.be. Сайты, которые обеспечивают механизм login (логин) могут сохранять языковые предпочтения в рамках профиля каждого пользователя, и соответственно этому обслуживать страницы. Тогда согласование языка используется только для пользователей, которые еще ​​не вошли в систему.

Еще один из способов уменьшить разочарование посетителей - сделать все внутренние ссылки внутри сайта language-specific (на соответствующих тексту страниц языках). На Немецкой домашней странице: ссылки на более глубокие страницы будут иметь вид: href="company/about.de.html" (вместо company/about.html, что было бы language-generic) (общей языковой ссылкой)*. Навигация тогда вынуждена будет оставаться на Немецком языке, пока не будет переопределена специальными управляющими значениями языка. Однако, это имеет несколько недостатков. Один из них - то, что все внутренние ссылки нужно будет переводить, что в свою очередь увеличивает стоимость перевода и вероятность появления ошибок. Другой недостаток - если Яап отправляет ссылку Пьеру, URL (взятый из адресной строки браузера) будет language-specific (на конкретном языке); Пьер тогда получит страницу на Фламандском языке. Ни один из этих недостатков не являются ужасным, однако, использование ссылок language-specific (на конкретном языке), вероятно, является путем которым нужно пойти, если гибкость нельзя обеспечить путем использования сессий или профильного механизма.

Обратите внимание, что здесь показаны особые формы language-specific (на конкретном языке) и language-generic URLs (общие языковые ссылки) (company/about.de.html или company/about.html), что зависит от технологии, используемой на сервере для того, чтобы реализовать согласование языка. Используя Apache MultiViews, один человек хотел бы видеть: company/about.html.de и company/about.html или полный отказ от .html расширения: company/about.de и company/about.

Кстати говоря

HTTP Accept-Language заголовок не является единственным доступным источником информации о языке. Все браузеры также направляют User-Agent заголовок при этом выявляя браузер, номер его версии, а в некоторых случаях еще и язык. Он может использоваться для того, чтобы угадать язык, которому пользователь отдает предпочтение в случае, когда отсутствует Accept-Language заголовок, но он менее надежный и более ограничен (только один язык) чем Accept-Language заголовок. Используйте его с максимальной осторожностью.

Согласование языка - только один из аспектов HTTP согласования контента. Другие аспекты, которые могут быть согласованы автоматически это: media type (медиа тип) (то есть формат: HTML, PDF или, например, простой текст), кодировка символов и передача кодировки (зашифрованная, сжатая, и т.д.). Согласование языка является наиболее полезным и наиболее часто используемым.