【问题标题】:django languange change takes effect only after reloaddjango语言更改仅在重新加载后生效
【发布时间】:2018-09-08 09:31:44
【问题描述】:

在我的应用中,我可以通过以下方式更改语言:

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-输出:

调试:current_language:en sessionvariable:de

所有{% trans ... } 语句都被处理为LANGUAGE_CODE 的(过时的)内容,这很烦人。更改语言后,使用预期会立即生效。如果我刷新页面或加载不同的视图,则新语言使用正确。

  1. 我理解错了吗?
  2. 如何在即时响应中正确设置 current_language。

【问题讨论】:

    标签: django django-templates django-i18n


    【解决方案1】:

    您在会话中设置了语言代码,但实际上并没有在视图中activate the new language

    from django.utils import translation
    ...
    translation.activate(my_lang)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-25
      • 2014-04-27
      • 2011-08-20
      • 1970-01-01
      • 2022-07-30
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      相关资源
      最近更新 更多