При переносе сайта Django с 1.2 на 1.5 на Python 2.6 я столкнулся с проблемами интернационализации.
Странно то, что на всем сайте переводится только одна строка (ну, почти, фильтр даты мог переводить длинные названия месяцев, когда я тестировал). Другие строки, расположенные в том же шаблоне, не переводятся, и все переводы находятся в одном файле po / mo. Все переводы есть, проверены с помощью Poedit и скомпилированы с помощью manage.py compilemessages
.
Изменить. Причина для единственной переведенной строки заключалась в том, что она совпадала со строкой на сайте администратора.
Пытаясь заставить его работать, я очистил LOCALE_PATH
, перезапустил сервер разработки (manage.py runserver), очистил любой кеш браузера (хотя метаданные для сайта отключают кеширование), и вот, элемент все еще переведен. Я проверил это, снова добавив тот же текст после, и он по-прежнему переводится, поэтому кэширование на стороне клиента не выполняется.
Переключение языка работает должным образом, и единственный переведенный элемент изменяется на язык по умолчанию, {{ LANGUAGE_CODE }}
подтверждает это. Я пробовал очистить данные сеанса и кеш django (который, похоже, не используется сервером разработки).
Кто-нибудь может догадаться, что здесь происходит? Нет ли каких-либо отладочных флагов, чтобы получить более обширное ведение журнала или что-то в этом роде?
Минимальный вид:
def locale_test(request):
locale = request.GET.get('l', None)
if locale:
translation.activate(locale)
di = {"foobar": _("foobar")}
return render_to_response('locale_test.html',di, context_instance=RequestContext(request))
И соответствующий шаблон (locale_test.html
):
{% load i18n %}
<p>Language: {{ LANGUAGE_CODE }}</p>
<p>Matching string from admin site that gets translated correctly: {% trans "Log out" %}</p>
<p>Translated in template: {% trans "Foobar" %}</p>
<p>Translated in view: {{ foobar }}</p>
Соответствующие настройки:
USE_I18N = True
USE_L10N = True
LANGUAGES = (
('en', 'English'),
('foo', 'Fooo'),
)
LANGUAGE_CODE = 'en'
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.i18n',
'django.core.context_processors.request',
)
LOCALE_PATHS = ('/path/to/my/locale',)
Для справки, эти вопросы мне не помогли:
LOCALE_PATHS
, указав абсолютный путь файловой системы для такого каталога локали в значении параметра. Вы это изменили? - person Adrián   schedule 15.08.2013