22.19. Использование Content Negotiation для предоставления страниц на разных языках

Проблема
Посетители вашего веб-сайта говорят на разных языках. Требуется, чтобы Apache
автоматически распознавал язык каждого посетителя и выдавал страницы на со ответствующем языке.
Решение
В Apache имеется все необходимое для выполнения этой работы на стороне сер вера. Предоставьте страницы, переведенные на поддерживаемые языки, а затем
настройте файл карты типов со ссылками на разные страницы. Этот файл дол жен иметь расширение .var.
На стороне клиента посетитель должен настроить браузер на определенный язык.
Стандартная индексная страница Apache дает хорошее представление о рабо те этого механизма (см. рис. 22.1 в разделе 22.2). Найдите каталог htdocs — он со держит все разновидности стандартного файла index.html:
/var/www/index.html .ca
/var/www/index.html.cz.iso8859-2
/var/www/index.html.de
/var/www/index.html.dk
/var/www/index.html.ее
/var/www/index.html.el
/var/www/index.html.en
/var/www/index.html.es
/var/www/index.html .et
/var/www/i ndex.html.fr
Теперь откройте файл /var/www/index.html.var:
URI: index.html.ca
Content-language: ca
Content-type: text/html
URI: index.html.cz.iso8859-2
Content-language: cs
Content -type: text/html;charset=ISO-8859

•2
URI: index.html.de
Content-language: de
Content-type: text/html
Как видите, задается только путь к файлу, директива Content-Language с указа нием языка и директива Content-type:text/html для каждого файла.
Последняя запись файла используется по умолчанию, если механизм Content
Negotiation не сработал. Она должна указывать на страницу, которая содержит
ссылки на индексные страницы на разных языках:
URI:fall back.html
Content-type: text/html
Остается убедиться в том, что следующая строка httpd.conf раскомментирова на (как это должно быть по умолчанию):
AddHandler type-map .var
Комментарий
Хотя Content Negotiation официально является частью стандарта HTTP/1.1, этот
механизм еще не получил всеобщего признания. Не все браузеры поддерживают
его, и не все пользователи настраивают свои браузеры должным образом. Кроме
того, Content Negotiation замедляет обработку запросов.
На рис. 22.2 показана страница настройки языковых предпочтений в Mozilla.
Когда такой пользователь посещает многоязыковой веб-сайт, ему будут авто матически предоставлены страницы на французском языке. Apache видит в заго ловках HTTP следующую информацию:
Accept-Language: fr: q=1.0, en: q=0.5
Если французских страниц нет, Apache выдает второй вариант — английские
страницы. Если все попытки согласования контента оказываются неудачными,
посетитель получает ошибку 406:
Not Acceptable
An appropriate representation of the requested resource /foo/index.html could not be
found on this server.
Available variants:
index-en.html
index-fi.html