django 语言更改仅在重新加载后生效
django languange change takes effect only after reload
在我的应用程序中,我可以通过以下方式更改语言:
from django.utils.translation import LANGUAGE_SESSION_KEY
# LANGUAGE_SESSION_KEY is "_language"
...
def my_view(request, my_lang=en):
request.session[LANGUAGE_SESSION_KEY] = my_lang
...
context = {"mysession": session}
return render(request, "mytemplate.html", context)
这基本上符合预期。但是,尽管会话变量设置正确,但此视图的直接响应仍以以前的语言呈现。换句话说,以下模板给出了恕我直言的矛盾输出:
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
<b>Debug:</b>
current_language: {{ LANGUAGE_CODE }}
session_variable: {{mysession|get:"_language"}}
请注意,要访问以下划线开头的属性 _language
,我必须使用自定义过滤器,请参阅 this answer。
Django 输出:
Debug: current_language: en sessionvariable: de
所有 {% trans ... }
语句都处理到 LANGUAGE_CODE
的(过时的)内容,这很烦人。更改语言后,用户期望立即生效。如果我刷新页面或加载不同的视图,则会正确使用新语言。
- 我是不是理解错了什么?
- 如何在即时响应中正确设置 current_language。
您在会话中设置了语言代码,但实际上并没有在视图中activate the new language。
from django.utils import translation
...
translation.activate(my_lang)
在我的应用程序中,我可以通过以下方式更改语言:
from django.utils.translation import LANGUAGE_SESSION_KEY
# LANGUAGE_SESSION_KEY is "_language"
...
def my_view(request, my_lang=en):
request.session[LANGUAGE_SESSION_KEY] = my_lang
...
context = {"mysession": session}
return render(request, "mytemplate.html", context)
这基本上符合预期。但是,尽管会话变量设置正确,但此视图的直接响应仍以以前的语言呈现。换句话说,以下模板给出了恕我直言的矛盾输出:
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
<b>Debug:</b>
current_language: {{ LANGUAGE_CODE }}
session_variable: {{mysession|get:"_language"}}
请注意,要访问以下划线开头的属性 _language
,我必须使用自定义过滤器,请参阅 this answer。
Django 输出:
Debug: current_language: en sessionvariable: de
所有 {% trans ... }
语句都处理到 LANGUAGE_CODE
的(过时的)内容,这很烦人。更改语言后,用户期望立即生效。如果我刷新页面或加载不同的视图,则会正确使用新语言。
- 我是不是理解错了什么?
- 如何在即时响应中正确设置 current_language。
您在会话中设置了语言代码,但实际上并没有在视图中activate the new language。
from django.utils import translation
...
translation.activate(my_lang)