Почему локализованные строки шаблона Django не работают? - PullRequest
0 голосов
/ 30 июня 2011

У меня настроен стандартный локализованный проект. У меня есть пара языков, определенных в моем settings.py. Я использую LocaleMiddleware. В моем файле шаблона есть несколько строк {%blocktrans%}, которые помещаются в мой файл django.po. Я запустил django-admin.py compilemessages и убедился, что файл .mo создан.

  • В .po нет «нечетких» записей.
  • В шаблоне {% get_current_language as LANGUAGE_CODE %}{{LANGUAGE_CODE}} дает правильный язык (в данном случае zh-cn)
  • Я перезапустил [сервер разработки]
  • У меня ENABLE_I18N = True и USE_L10N = True
  • Я установил LANGUAGE_CODE и LANGUAGES в settings.py

Когда я отображаю представление, я знаю, что выбран правильный языковой стандарт, потому что код вида, который его использует (request.session.get('django_language', settings.LANGUAGE_CODE)), получает правильный код. Но переводы в строках в шаблоне просто не отображаются.

Как мне решить эту проблему?

Ответы [ 3 ]

1 голос
/ 27 июля 2011

Оказывается, я пропустил то, что было одновременно очевидным и неочевидным. Есть два разных стандарта на работе. Теперь я исправил это, мой файл настроек:

LANGUAGES = (
    ('en', "English"),
    ('zh-CN', "中文")
)

Но мой каталог локалей - locale/zh_CN. Я глупо предполагал, что один и тот же стандарт локали будет использоваться во всей локализации Django. Я был не прав.

Дальнейшее чтение:

Файл, в котором используется тип дефиса: https://code.djangoproject.com/browser/django/trunk/django/conf/global_settings.py

Документы, в которых используется подчеркивание. Самый последний абзац в конце этой страницы: https://docs.djangoproject.com/en/dev/topics/i18n/deployment/

0 голосов
/ 30 июня 2011

Учитывая все это, единственное, что остается: 1) фактический код перевода вообще не вызывается (по какой-то причине), или 2) он спасается до того, как завершит свою работу.* Я держу в руках личную копию Django (то есть, не системную копию), чтобы я мог глубоко вникнуть в что-то.Попробуйте ввести print s в django/templatetags/i18n.py и посмотреть, действительно ли вы прибыли в нужное место.

0 голосов
/ 30 июня 2011

Я не хочу спрашивать это, но вы установили USE_I18N = True в settings.py?

Также вы написали {%blocktranslate%} в своем вопросе, тогда как оно должно быть {% blocktrans %}

...