Django语言切换器不持久

1 投票
1 回答
8 浏览
提问于 2025-04-14 16:14

你好,我在语言切换器上遇到了一些问题。

这是我的设置文件 settings.py:

LANGUAGE_CODE = 'en'
LANGUAGES = [
    ('de','Deutsch'),
    ('en','English')
]

这是我的网址配置文件 urls.py:

path('setlang', views.setlang, name='setlang'),

这是我的首页模板 index.html:

<a href="{% url 'setlang' %}">{% trans "English" %}</a>

这是我的视图文件 views.py:

def setlang(request):
    logger.error(get_language())
    if get_language() == 'de':
        activate('en')
    else:
        activate('de')
    logger.error(get_language())
    return redirect('index')

从日志中看到的错误信息是:logger.error(get_language()) -> 'de' 而不是 'en'。

每次都是 'de'!即使我把 LANGUAGE_CODE 设置成 'en'!我完全不知道 'de' 是从哪里来的。

问题可能出在重载上,这个是因为我使用了 return redirect('index')?

总体来说,翻译功能是正常的。

有没有人知道我该如何保持选择的语言,而不是总是回到默认语言?

1 个回答

1

activate(…) [Django-doc] 这个功能并不是用来长期保持的。实际上,文档中提到:

它会获取一个特定语言的翻译对象,并将其激活为当前线程的翻译对象。

所以说,当这个线程结束后,它就“失效”了。

你可以设置一个名为 LANGUAGE_COOKIE_NAME 设置 [Django-doc] 的 cookie 来激活另一种语言:

from django.conf import settings


def setlang(request):
    logger.error(get_language())
    if get_language() == 'de':
        lang = 'en'
    else:
        lang = 'de'
    response = redirect('index')
    response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang)
    return response

撰写回答