Подтвердить что ты не робот

Как поддерживать разные версии на одном языке в 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.

4b9b3361

Ответ 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 обнаруживает языковые предпочтения , на результат может быть так много всего.