Как заставить 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}))
но это не имело никакого эффекта. Он по-прежнему отображает все на английском языке.