【问题标题】:Django i18n using translation.activateDjango i18n 使用 translation.activate
【发布时间】: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


    【解决方案1】:

    经过一番研究,我发现是语言环境中间件造成的,所以我只是将其注释掉。它现在按预期工作。

    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        #'django.middleware.locale.LocaleMiddleware',
    

    【讨论】: