Язык мой — враг мой 👅
#backend #qa
Все мы привыкли к автоматическому определению геолокации пользователя на сайте. Иногда, помимо региона или города, требуется определять язык интерфейса и отображения контента.
Первое, что приходит в голову, — прибегнуть к определению страны по IP-адресу пользователя и на основании этого подобрать язык. Представим ситуацию, когда китайский турист приехал в Россию. Тогда ему будет присвоен местный IP-адрес, а наш сервис для него установит русский язык по умолчанию. Такого поведения гость страны никак не ожидает.
Для того чтобы более корректно определить предпочитаемый для пользователя язык, существует специальный заголовок, который отправляет практически каждый браузер вместе с http-запросом — Accept-Language. Значениями этого заголовка могут быть: код локали, язык или перечень языков клиента, выстроенных в порядке приоритета. Эти данные браузер определяет на основе региональных настроек ОС пользователя.
Сложность разбора этого заголовка заключается в том, что браузеры могут устанавливать его значение в различном формате или вовсе разрешать любой язык. Не исключено, что малоизвестные браузеры вообще не отправят такой заголовок на сервер.
А с помощью специального механизма в Chrome DevTools можно легко изменять значения заголовка Accept-Language, тем самым тестировать поведение алгоритма его разбора на стороне сервера.
Теперь можно усовершенствовать наш механизм автоопределения языка, например, вот так:
1. Попытка анализа заголовка Accept-Language. В случае успеха — устанавливать соответствующий язык интерфейса по его значению.
2. Анализ IP-адреса клиента. Если не удалось однозначно определить язык по пункту 1, то он устанавливается с учетом принадлежности IP-адреса к стране/региону.
Таким образом, внедряя анализ специализированного заголовка, мы снижаем вероятность ошибочного автоопределения языка клиента в серверной логике нашего приложения.
Post #137
1.66K