Джанго, интернационализация таинственно не работает - PullRequest
0 голосов
/ 01 января 2012

В моем проекте django я представляю интернационализацию. Я следовал всем советам, в частности:

  • вставлено выражение trans в шаблон, вставлено {% load i18n %} поверх шаблона
  • я запустил django-admin.py makemessages -l it (из корня проекта)
  • я установил msgstr /locale/it/LC_MESSAGES/django.po
  • тогда я побежал django-admin.py compilemessages (from root of project)

Мой файл settings.py:

  • LANGUAGE_CODE = 'en-us'
  • USE_I18N = True USE_L10N = True
  • TEMPLATE_CONTEXT_PROCESSOR = ('django.core.context_processors.i18n',)
  • "django.middleware.locale.LocaleMiddleware", в MIDDLEWARE_CLASSES

Если я использую DjDT для отладки django в веб-браузере, я вижу, что:

  • Accept-Language - это 'it'

Но вместо того, чтобы видеть страницу на этом языке, я продолжаю видеть на английском языке. Я читал другие вопросы по этой теме на stackoverflow, но я не нашел решения. Что нужно моему приложению для интернационализации?

Edit-1

Структура моего проекта следующая:

SRC /

     myproj/

          app1/

          app2/

локаль /

    it/

        LC_MESSAGES/

                   django.mo

                   django.po

 it-IT/

        ...

шаблоны /

Ответы [ 3 ]

1 голос
/ 03 января 2012

Если я вставлю языковой стандарт папки (в корне проекта) в папку myproj, интернационализация будет работать, также без настройки LOCALE_PATHS settings.py.

1 голос
/ 02 января 2012

Вы пробовали установить LANGUAGE_CODE в итальянский режим и посмотреть, что происходит потом?

Вы пробовали установить LANGUAGES на английский и итальянский и посмотреть, что происходит?Для польского и английского у меня было что-то вроде этого: LANGUAGES = (('pl', 'Polski'), ('en', 'English')).

И последнее: ваши представления используют RequestContext?

def some_view(request):
    # ...
    return render_to_response('my_template.html',
                              my_data_dictionary,
                              context_instance=RequestContext(request))

Можете ли вы создать контекст запроса перед рендерингом шаблона и проверкойзначения LANGUAGES и LANGUAGE_CODE:

def some_view(request):
    # ...
    context = RequestContext(request)
    print context.LANGUAGE, context.LANGUAGE_CODE
    return render_to_response('my_template.html', my_data_dictionary, 
                              context_instance=context)

Таким образом, мы увидим, какое значение оно установило.

Я считаю, что RequestContext должен использоваться, чтобы язык мог быть обнаружен внутри шаблона.

Я помню боль от настройки этого, однажды я попытался включить это для приложения Facebook, работающего на Django.Может быть, я могу придумать что-то еще.

0 голосов
/ 08 октября 2012

Похоже, Django не находит вашу папку локали. Смотрите документы здесь: https://docs.djangoproject.com/en/1.3/howto/i18n/

По умолчанию django будет искать под каждым установленным приложением и в корне проекта (это папка, содержащая ваш файл settings.py - не обязательно корневой каталог ваших приложений)

...