Из того, что я прочитал в Django документации, это то, что делает LocaleMiddleware:Джанго Интернационализация с геолокации
LocaleMiddleware пытается определить языковые предпочтения пользователя, следуя этому алгоритму:
Во-первых, он ищет языковой префикс в запрошенном URL. Это выполняется только в том случае, если вы используете функцию i18n_patterns в корневом URL-адресе . См. Интернационализация: в шаблонах URL для более информация о префиксе для языка и о том, как интернационализировать URL-адрес шаблонов.
В противном случае он ищет ключ django_language в сеансе текущего пользователя.
В противном случае он ищет печенье.
Имя используемого файла cookie устанавливается установкой LANGUAGE_COOKIE_NAME . (Имя по умолчанию - django_language.)
В противном случае он рассматривает HTTP-заголовок Accept-Language. Этот заголовок отправлен вашим браузером и сообщает серверу, какой язык (а) вы предпочитаете, в порядке приоритета. Django пробует каждый язык в заголовке , пока не найдет его с доступными переводами.
В противном случае используется глобальный параметр LANGUAGE_CODE.
Я хочу, чтобы мой проект django обнаружил страну-пользователя и использовал ее при выборе языка по умолчанию?
Как это сделать:
У меня есть две идей в виде:
Написать новую промежуточный программное обеспечение, которое запускаемые перед LocaleMiddleware и в этом промежуточном слое, если нет печенья LANGUAGE_COOKIE_NAME установить его с помощью Джанго GeoLocation
Заменить LocaleMiddleware и вместо того, чтобы искать заголовок HTTP Accept-Language использовать Джанго GeoLocation
Что вы думаете?
Может быть, есть еще один простой способ?
Редактировать: у меня будет возможность изменить язык, проблема возникает только при первом открытии веб-сайта (любой страницы, а не только первой страницы). Я рассматриваю сейчас, чтобы установить django_language для языка сайта по умолчанию/bg/(если таких параметров нет), а также использовать международные urls/en /,/bg /. Также должен быть вариант переключения языка. Таким образом, не будет проблем с поисковыми системами, и я вообще не буду использовать геолокацию.
Edit: Кроме того, есть такая проблема, что здесь (в Болгарии) большинство браузеров заголовков устанавливаются предпочитают английский язык, который не является хорошим вариантом :(
У меня будет возможность изменить язык, проблема возникает только при первом открытии веб-сайта. Я рассматриваю сейчас, чтобы установить django_language для языка сайта по умолчанию/bg/(если таких параметров нет), а также использовать международные urls/en /,/bg /. Также должен быть вариант переключения языка. Таким образом, не будет проблем с поисковыми системами, и я вообще не буду использовать геолокацию. –
Также есть эта проблема, что здесь (в Болгарии) большинство заголовков браузеров предпочитают английский язык, который не является хорошим вариантом :( –