Django неправильно переводит сайт
Потратив на это слишком много часов, Stackru поможет вам.
Я настроил мои settings.py как показано ниже:
...
TIME_ZONE = 'Europe/Berlin'
LANGUAGE_CODE = 'de'
LANGUAGES = (
('en', u'English'),
('de', u'German'),
('fr', u'French'),
)
USE_I18N = True
USE_L10N = True
MIDDLEWARE_CLASSES = (
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.request',
'django.core.context_processors.static',
'django.contrib.messages.context_processors.messages',
)
...
В моем base.html
файл, у меня есть форма, как показано ниже:
<form action="/i18n/setlang/" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="/" />
<select name="language">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}">{{ language.name_local }} ({{ language.code }})</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>
мой urls.py
:
urlpatterns = patterns('',
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^$', 'MainApp.views.index'), #root
)
В то же самое base.html
файл у меня сверху {% load i18n %}
а в теле у меня есть образец {% trans "This is the title." %}
, Перед запуском сервера я сделал:
django-admin.py makemessages -l de
django-admin.py makemessages -l fr
Пример текста выше был подобран makemessages
и я предоставил соответствующие переводы для msgstr
, После этого я сделал django-admin.py compilemessages.
Команда хорошо запустилась и сгенерировала файлы .mo в соответствующих папках локали.
Я запускаю сервер, и форма не работает. Из другого поста Stackru мне подсказали удалить #, fuzzy lines
что я и сделал. Что я делаю неправильно?
Спасибо!
1 ответ
Вы должны поставить LocaleMiddleware
после SessionMiddleware
в вашем MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
....
)
Порядок классов промежуточного программного обеспечения важен. LocaleMiddleware
использует данные сеанса для определения языка пользователя, поэтому он должен следовать после SessionMiddleware
, Это также упоминается в документации здесь https://docs.djangoproject.com/en/1.3/topics/i18n/deployment/
Будем надеяться, что это работает для вас!