问题描述
我已经配置了 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')
我已经调试过,传递的 language_code 与所选语言(例如 es 而不是 en)正确对应,但它没有被激活。浏览器语言仍为活动语言。
我会很感激任何想法。谢谢! 阿尔贝托
解决方法
经过一些研究,我发现语言环境中间件导致了这种情况,所以我只是将其注释掉了。它现在按预期工作。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware',#'django.middleware.locale.LocaleMiddleware',