Переводы Django не работают

Я работаю в приложении Django 1.9 / python3.5 и пытаюсь использовать утилиту перевода Django. У меня есть каталог локали, в котором есть каталог "es" для переводов на испанском языке, в котором я создал файл.po. Я настроил его на пару переводов просто для проверки.

msgid "Sign In"
msgstr "Registrarse"

msgid "Create an Account"
msgstr "Crea una cuenta"

У меня правильно настроен файл настроек

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'webapp.middleware.LanguageSwitchMiddleware',
)

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'APP_DIRS': True,
        'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'webapp.context_processors.detail_context',
                'django.template.context_processors.i18n'
            ],
        },
    },
]

# Internationalization
# https://docs.djangoproject.com/en/dev/topics/i18n/
LOCALE_PATHS = (
    os.path.join(PROJECT_ROOT, 'locale/'),
)

from django.utils.translation import ugettext_lazy as _

LANGUAGES = (
    ('en', _('English')),  # first language is the default used by modeltranslations
    ('es', _('Spanish')),
)

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/Chicago'

USE_I18N = True

В моем шаблоне я использую шаблонный тег Django 'trans' для слов, которые используются для входа и создания учетной записи. Поле выбора отредактирует заголовок HTTP-ответа Content-Language из приложения, которое я протестировал, и успешно это делает. Однако заголовки регистрируются, а также создают и регистрируют, но не переводят на испанский. Есть ли какой-то шаг, который я пропускаю?

HTML

{% load i18n %}

<ul class="list-inline-xxs">

    {% if customer %}
        <li>
            Welcome,
            <a href='{% url "customer:dashboard" %}'>
                {{ customer.first_name }}
            </a>
        </li>
        <li>
            <a href='{% url "customer:logout" %}'>
                {% trans 'Logout' %}
            </a>
        </li>
    {% else %}
        <li>
            <a href='{% url "customer:login" %}'>
                {% trans 'Sign In' %}
            </a>
        </li>
        <li>
            <a href='{% url "subscription:customer-subscribe" %}'>
                {% trans 'Create an Account' %}
            </a>
        </li>
    {% endif %}

</ul>

1 ответ

Решение

У меня есть каталог локали, в котором есть каталог "es" для испанских переводов, в котором я создал.po файл.

Эта строка ^^^ предполагает, что вы создаете файлы перевода вручную. Позвольте Django создать файлы перевода для вас:

django-admin makemessages -a

Затем вставьте свои переводы, сохраните файл и скомпилируйте

django-admin compilemessages

Перезапустите приложение, и оно должно работать.

Я собрал простой пример, как сделать переводы с Джанго: https://github.com/DusanMadar/Django-multilang-demo

РЕДАКТИРОВАТЬ

Как джанго django-admin makemessages -h предполагает --ignore PATTERN, -i PATTERN это то, что вам нужно использовать, чтобы игнорировать сторонние каталоги. Так что-то вроде django-admin makemessages -a -i 3rdparty_dir

Другие вопросы по тегам