Как заставить Django учитывать локаль при доступе к localflavor?

Я пытаюсь применить многоязычную поддержку к приложению Django, и у меня работает базовая конфигурация, поэтому я могу установить ключ языкового сеанса и автоматически получать правильные переводы для каждогоgettextобзвоните все мои метки полей.

Однако у меня есть несколько вызовов Ajax, которые заполняют поля для названий стран/штатов/провинций, извлекая данные из пакета django-localflavor , который включает полную поддержку перевода.

Однако, когда я вернусь, скажем,localflavor.jp.jp_prefectures.JP_PREFECTURESв моем ответе JSON, хотя для моего языкового сеансового ключа установлено значение «Японский», а значения в этом словаре заключены в gettext, возвращаемые значения отображаются на английском, а не на японском языке.

Мое представление Ajax выглядит примерно так:

      from localflavor.jp.jp_prefectures import JP_PREFECTURES

def get_country_states(request):
    lang = request.session.get('l', 'en')
    code = request.GET.get('code')
    if code == 'ja':
        states = {k: str(v) for k, v in JP_PREFECTURES}
    elif code == ...
        handle other cases
    return HttpResponse(json.dumps({'states': states}))

Как мне гарантироватьstr(v)отображает правильное переведенное значение на основе текущего языкаlнастройка сеанса? Я думал, это произошло автоматически?

Несмотря на то, что значения в JP_PREFECTURES являются экземплярами gettext, если я попытаюсь вернуть их непосредственно в ответе JSON, я получу ошибку:

      Object of type __proxy__ is not JSON serializable

Я попробовал это решение , выполнив:

      from django.utils import translation

def get_country_states(request):
    lang = request.session.get('l', 'en')
    code = request.GET.get('code')
    if code == 'ja':
        with translation.override('ja'):
            states = {k: translation.gettext(v) for k, v in JP_PREFECTURES}
    elif code == ...
        handle other cases
    return HttpResponse(json.dumps({'states': states}))

но это не имело никакого эффекта. Он по-прежнему отображает все на английском языке.

0 ответов

Другие вопросы по тегам