Как поддерживать разные версии на одном языке в Django?
Я хотел бы иметь несколько разных версий одного и того же языка в Django, настроенных для разных стран (например, locale/en
, locale/en_CA
, locale/en_US
и т.д.). Если для конкретной страны нет языка, я бы ожидал использовать версию языка по умолчанию (locale/en
)).
Затем в файле настроек для каждого сайта указывается LANGUAGE_CODE
и LANGUAGES
.
По какой-то причине, даже если я укажу следующие настройки, используются переводы locale/en_US
:
LANGUAGE_CODE = 'en'
LANGUAGES = (
('en', ugettext('English')),
)
Хотя я четко указываю, что код языка должен быть en
(не en-us
).
Я что-то упустил? Уже пытался найти ответ в нескольких местах, включая документацию Django.
Ответы
Ответ 1
Обходной путь к проблеме заключается в добавлении следующего фрагмента в ваш файл settings.py
.
import locale
locale.locale_alias.pop('en', None)
Специальный кредит Venelin Stoykov, который смог исследовать поведение модуля Python locale
.
Ответ 2
Это причуда Python (а не Django) и модуль gettext.
Ticket 8626 был поднят на трекер Django во время выпуска 1.0, а после некоторых предложений и дебатов разработчики Django считал, что это "не исправит".
В потоке билета есть предложения использовать 'en-en' в качестве значения по умолчанию. Моя память немного грубая, но если я правильно помню, этот подход не очень хорошо отразился на других частях моего инструмента i18n (например, в библиотеке оспы). Я отказался и решил использовать en-US в качестве дефолта для проекта и перечислять другие варианты (например, en-au) в качестве альтернатив.
Ответ 3
Могу ли я предложить вам установить точку останова в класс LocaleMiddleware?
Таким образом, вы могли бы найти ключ, который на самом деле получал ваш путь от правильного языка.
Becaue в соответствии с исходным кодом класса LocaleMiddleware и Как Django обнаруживает языковые предпочтения
, на результат может быть так много всего.