Django LANGUAGE_CODE = 'en' 但显示 'fr'?

Eri*_*ric 4 python django

我在里面使用 {% 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
Run Code Online (Sandbox Code Playgroud)

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

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

LANGUAGE_CODE = 'en'
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

PRM*_*reu 8

您需要'django.middleware.locale.LocaleMiddleware',在 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