Django i18n 使用 translation.activate

问题描述

我已经配置了 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',

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...