【发布时间】:2025-12-09 20:40:01
【问题描述】:
我已经配置了 Django i18n,如果您使用浏览器配置 UI 更改浏览器语言,它就可以正常工作。我已经测试了英语和西班牙语。但是,当我尝试让用户从导航栏中选择语言并根据用户所做的选择设置新的 LANGUAGE_SESSION_KEY 时,它将不起作用。浏览器语言将继续作为所选语言。
下面是我的代码:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
...
LANGUAGE_CODE = 'en'
LANGUAGE_SESSION_KEY = 'en'
TIME_ZONE = 'America/Sao_Paulo'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
LANGUAGES = (
('en', _('English')),
('es', _('Spanish')),
('pt', _('Portuguese'))
)
导航栏触发的视图:
def setLanguage(request, language_code):
language = get_language()
try:
request.session[LANGUAGE_SESSION_KEY] = language_code
translation.activate(language_code)
request.LANGUAGE_CODE = translation.get_language()
request.session[translation.LANGUAGE_SESSION_KEY] = language_code
request.session.save()
except Exception as e:
print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Oops!", e.__class__, "occurred.")
translation.activate(language)
return redirect('home_index')
我已经调试过,传递的语言代码正确对应于所选语言(例如 es 而不是 en),但它没有被激活。浏览器语言仍然是活动语言。
我会很感激任何想法。谢谢! 阿尔贝托
【问题讨论】:
标签: django internationalization language-translation