Django I18n - проблемы с переводом в Python код - PullRequest
0 голосов
/ 24 апреля 2020

Я решил добавить перевод Engli sh на мой сайт на русском языке. Я решил начать с перевода строк в коде Python. Вот как я пытался это сделать:

(project name)/settings.py:

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

# ...

LANGUAGE_CODE = 'en'
TIME_ZONE = 'Europe/Moscow'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LOCALE_PATHS = [ os.path.join(BASE_DIR, 'locale'), ]
LANGUAGES = [ ('en', 'English'), ('ru', 'Русский'), ]

(app name)/views.py:

from django.contrib import messages
from django.utils.translation import gettext as _

# ...

# in a function based view
messages.success(request, _("Тема изменена успешно!"))

Затем я запускаю:

python3 manage.py makemessages --ignore="venv" --ignore="collectedstatic" -l en

Это создает файл в conf/locale/en/LC_MESSAGES с именем django.po. Когда я открываю его, он содержит следующее:

# 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: 2020-04-24 21:08+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: front/views.py:29
msgid "Тема изменена успешно!"
msgstr ""

Я изменяю последнюю строку msgstr на:

msgstr "Theme changed successfully!"

Затем я вносю изменения в мою Docker точку входа (я должен используйте Docker, потому что это требование моей школы. Да, я делаю локализацию Engli sh для своего школьного проекта, она почти готова, и у меня есть еще один месяц до крайнего срока), добавив эту строку:

python manage.py compilemessages -l en

После этого я запускаю Docker контейнеров через docker -компонент:

docker-compose up

Затем я проверяю, был ли создан файл django.mo (он был), открываю сайт, вызвать изменение темы, но сообщение на русском языке, а не на английском sh.

Как мне сделать, чтобы это сообщение использовало перевод на английский язык sh?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Оказывается, я использовал неправильный путь. Это должно быть conf/locale, а не просто locale.

0 голосов
/ 24 апреля 2020

Наиболее базовая c опция для переключения языка, чтобы использовать это в представлении:

from django.utils import translation

translation.activate(language) #eg. translation.activate('en')

Вы также можете использовать это решение для изменения языка в шаблоне: { ссылка }

...