Команда Django makemessage не обрабатывает приложение

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

./manage.py makemessages --all

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

Это моя файловая структура:

myproject
  |- myproject
      |- course
          |- templates
          |- static
          |- ...
          |- apps.py
          |- models.py
          |- views.py
          |- ...
      |- locale
      |- myproject
          |- settings.py
          |- ...
      |- manage.py

Мой файл настроек выглядит так:

from django.utils.translation import ugettext_lazy as _

...

INSTALLED_APPS = [
     ...
     'course.apps.CourseConfig',
]

MIDDLEWARE_CLASSES = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': False,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'CET'
USE_I18N = True
USE_L10N = True
USE_TZ = True


LANGUAGES = [
    ('en', _('English')),
    ('kr', _('Korean')),
    ('cn', _('Chinese')),
    ('pt', _('Portuguese')),
]

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

Мои шаблоны содержат тексты перевода:

{% extends "course/base.html" %}

{% load i18n %}    
{% trans "Back to modules" %}
...

Если я запускаю команду makemessages, единственное, что включается в файл .po, — это названия языков в файле settings.py, но не переменные шаблона или все, что я перевел с помощью ugettext в представлении.

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-01-30 20:25+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: myproject/settings.py:146
msgid "English"
msgstr ""

#: myproject/settings.py:147
msgid "Korean"
msgstr ""

#: myproject/settings.py:148
msgid "Chinese"
msgstr ""

#: myproject/settings.py:149
msgid "Portuguese"
msgstr ""

Кто-нибудь может сказать, что мне не хватает? Приложение работает нормально, все шаблоны находятся во время выполнения. Большое спасибо.


person Chris    schedule 30.01.2016    source источник
comment
Как называются файлы шаблонов? makemessages ищет *.py, *.html и *.txt. Он должен искать во всех подкаталогах текущего рабочего каталога.   -  person Håken Lid    schedule 31.01.2016
comment
Если файлы отображаются с ls ./**/*.{html,txt,py} (при условии, что ваша оболочка bash), все должно быть в порядке.   -  person Håken Lid    schedule 31.01.2016
comment
И чтобы убедиться, что gettext установлен, вы можете попробовать gettext -h.   -  person Håken Lid    schedule 31.01.2016
comment
@HåkenLid: спасибо. Геттекст установлен. Расширения файлов шаблонов *.html Однако файлы шаблонов не отображаются с ls ./**/*.{html,txt,py}. Я запустил его на уровне manage.py. В нем перечислены файлы внутри папок myproject/myproject/course и myproject/myproject/myproject. Поскольку шаблоны находятся в myproject/myproject/course/templates/course, они не отображаются. Также у меня есть переводы в myproject/myproject/course/views.py, которые не учитываются при запуске makemessages. А идеи? Моя структура папок неверна? Тем не менее, я следовал руководствам по django.   -  person Chris    schedule 31.01.2016


Ответы (1)


Наконец-то я нашел "проблему". Мне пришлось зайти в каталог моего приложения django course, а затем снова запустить ../manage.py makemessages -l en и т. д. оттуда. Затем файлы были созданы, и все заработало нормально. В документах Django не было четкого указания на то, что мне нужно cd в каждое приложение.

person Chris    schedule 31.01.2016
comment
Вы также можете запустить django-admin makemessages ... вместо обращения к manage.py в корневой папке. - person Don; 09.11.2016
comment
@ Крис, ты мой герой сегодня, спасибо. работал как шарм - person philo; 11.11.2020