![](https://habrastorage.org/storage2/91e/c75/d5b/91ec75d5b9d595ba2a75a1c7efabd6a6.jpg)
Уже давно считается хорошим тоном отдавать контент сайта на языке, предпочитаемом пользователем. Некоторые сервера определяют язык по месту нахождения пользователя с помощью модулей геолокации, остальные берут настройки браузера. Языковые предпочтения пользователя часто сохраняются в cookie, и затем используются при повторном визите.
Какой метод определения языка пользователя подходит лучше – вопрос достаточно спорный. Мой личный ранг значимости языковой информации (в порядке убывания): cookie, настройки браузера, регион.
Для поисковых систем, социальных сетей и прочих агрегаторов информации важно знать, на каком языке должна быть проиндексирована или загружена страница, например в качестве миниатюры в хронику фейсбука. Это значит, что ссылка должна однозначно указывать на язык.
Распространенные варианты кодирования языковой информации о ресурсе следующие:
- каждая языковая версия на отдельном субдомене, например
en.example.com
,ru.example.com
- язык ресурса указывается в префиксе URI, например
example.com/en/
,example.com/ru
- язык ресурса указывается в GET параметре, например
example.com?lang=en
,example.com?lang=ru
Первый вариант наиболее радикальный, каждая языковая версия сайта рассматривается как отдельный ресурс. Могут возникнуть сложности с SSL сертификатом, необходимо заранее предусмотреть все возможные варианты в SAN DNS Host Name, или заказать сертификат с маской, например *.example.com.
Второй вариант наиболее практичный, выбор языка входит в URI, значит, не будет проблем с индексацией и копированием ссылки.
Третий вариант выглядит менее привычно, требует дополнительной логики при добавлении остальных GET параметров и может смутить пользователя при копировании ссылки. Не самый лучший вариант для публичных ссылок.
![image](https://habrastorage.org/getpro/habr/post_images/c50/d05/ab5/c50d05ab5874573ed41965a978dc7d0b.gif)
Я расскажу о реализации второго варианта на базе сервера NGINX. При минимальных изменениях можно применить описанные настройки и для первого варианта.