Skip to main content
 首页 » 编程设计

python之Django LANGUAGE_CODE = 'en' 但显示 'fr'

2024年08月19日30xxx_UU

我在里面使用 {% trans %} 用英文写了我的模板。

我决定把它翻译成法语,所以我把它放在设置里:

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'debug_toolbar.middleware.DebugToolbarMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 
 
LANGUAGES = ( 
    ('en', _('English')), 
    ('fr', _('French')), 
) 
 
LANGUAGE_CODE = 'fr' 
 
LOCALE_PATHS = ( 
    os.path.join(BASE_DIR, 'locale'), 
) 
 
TIME_ZONE = 'UTC' 
 
USE_I18N = True 
 
USE_L10N = True 
 
USE_TZ = True 

然后我使用 makemessages 和 compilemessages 来生成翻译后的字符串。这很好用!我的网站是法语的。

但现在我想恢复我的网站为英文版, 所以我只是将 LANGUAGE_CODE 更改为:

LANGUAGE_CODE = 'en' 

但我的网站仍然是法语的!甚至 django-debug-bar 仍然是法语的。

我发现的唯一解决方法是在 LANGUAGES 中注释掉法语:

LANGUAGES = ( 
    ('en', _('English')), 
    # ('fr', _('French')), 
) 
  • 我尝试移动列表中的 localMiddleware:没有成功,
  • 我尝试清除 cookie:没有成功。
  • 我生成了英文 .mo 和 .po 文件:没有成功
  • 我试过 LANGUAGE_CODE = 'en-us' :没有成功

为什么 LANGUAGE_CODE = 'en' 不起作用?

请您参考如下方法:

您需要评论或禁用 'django.middleware.locale.LocaleMiddleware', in settings.py.

此中间件处理请求参数中的语言选择。


翻译文档:

https://docs.djangoproject.com/en/1.11/topics/i18n/translation/#how-django-discovers-language-preference

中间件文档:

https://docs.djangoproject.com/en/1.11/ref/middleware/#module-django.middleware.locale