Django语言改变不起作用

时间:2014-02-04 11:51:07

标签: python django cookies internationalization rosetta

我正在使用Django 1.6,我觉得我错过了一些东西,但是cookie被设置为当前选择的语言,但显示语言仍然是默认语言。

对应代码:

settings.py

LANGUAGES = (
    ('hu', 'Hungarian'),
    ('en', 'English'),
)

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
    "django.core.context_processors.request"
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    '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'
)
LANGUAGE_CODE = 'en-US'
TIME_ZONE = 'CET'
USE_I18N = True
USE_L10N = True
USE_TZ = True

urls.py

urlpatterns = patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
    ...
)

模板

{% extends 'base.html' %}
{% load i18n %}
...
<h4>{% trans "Modern Technologies" %}</h4>
...

我运行了 makemessages -a 来创建lang文件,安装了rosetta并编辑了语言。然后我跑了 compilemessages 。在Chrome中检查Cookie“django_language”是否已正确设置。但实际文本仍然是默认的“现代技术”。

3 个答案:

答案 0 :(得分:5)

您的中间件订单与recommended by the documentation不同:

  

要使用LocaleMiddleware,请将“django.middleware.locale.LocaleMiddleware”添加到MIDDLEWARE_CLASSES设置中。由于中间件订单很重要,您应该遵循以下准则:

     
      
  • 确保它是首批安装的中间件之一。
  •   
  • 它应该在SessionMiddleware之后,因为LocaleMiddleware使用会话数据。它也应该来之前   CommonMiddleware因为CommonMiddleware需要激活   语言以解析请求的URL。
  •   
  • 如果您使用CacheMiddleware,请将LocaleMiddleware放在其后。
  •   

因此,您的中间件配置应如下所示:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    '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',
)

您还需要记住在设置文件中包含LOCALE_PATHS设置:

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

答案 1 :(得分:1)

尝试在'django.middleware.locale.LocaleMiddleware',SessionMiddleware之间插入CommonMiddleware

正如它在docs中所做的那样。如果我没弄错的话,这很重要。

答案 2 :(得分:1)

好的,问题是,我已将我的语言环境文件夹放入root中,并且它希望它在已安装的应用程序中。

然而,即使您在应用程序外进行翻译,rosetta也会发现它。