Узнайте, как легко выполнять перевод и локализацию в Django, популярной веб-среде Python.
Мы должны сделать перевод вашего веб-приложения на разные языки и добавить правильную локализацию! Из этого туториала вы узнаете, как начать процесс локализации в Django. Часть этого может быть легко применена к общей локализации Python, и мы также покажем вам, как вы можете еще больше ускорить рабочий процесс i18n с помощью Phrase .
Мы предполагаем, что у вас есть работающее приложение Django и вы установили gettext (например, через pip install gettext
). Если вы раньше не пользовались Django, вы можете сначала взглянуть на официальный учебник и вернуться позже.
Основные настройки
Итак, давайте предположим, что у вас есть проект Django mysite
и приложение polls
. Структура вашего проекта должна выглядеть примерно так:
/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
polls/
migrations/
__init__.py
admin.py
models.py
tests.py
views.py
Первый шаг — убедиться, что вы активировали интернационализацию в своей конфигурации. Для этого необходимо внести следующие изменения в mysite/settings.py
:
# mysite/settings.py
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Интернационализировать шаблоны
Затем вы должны отметить все строки, которые должны быть переведены. Предположим, у вас есть следующий файл шаблонаpolls/templates/polls/index.html
<!-- polls/templates/polls/index.html -->
<h1>Welcome to our site!</h1>
<p>Here you find polls.</p>
Этот файл должен быть настроен так:
<!-- polls/templates/polls/index.html -->
{% load i18n %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>
Поэтому мы импортируем пакет локализации и заменяем все тексты на trans 'SomeTranslationKeyName'
. Кроме того, вы можете использовать текст перевода по умолчанию в качестве ключа перевода. Таким образом, у вас всегда будет хороший текст по умолчанию, если для определенного ключа нет перевода.
Интернационализация внутри кода Python
Если вы хотите локализовать строки в вашем коде Python (например, внутри polls/views.py
), вам необходимо импортировать ugettext
функцию. Псевдоним это нормально _
. Таким образом, простая функция локализованного вида будет выглядеть следующим образом
# polls/views.py
from django.http import HttpResponse
from django.utils.translation import ugettext as _
def index(request):
output = _('StatusMsg')
return HttpResponse(output)
Создать файлы перевода
Теперь нам нужно создать файлы перевода для каждой локали, которую мы хотим поддерживать. Для этого создайте каталог polls/locale
и внутри каталога polls
запустите:
$ django-admin makemessage -l de
Вы можете заменить de
языковой код языка, который хотите добавить. В нашем примере эта команда создаст файл gettext polls/locale/de/LC_MESSAGES/django.po
с содержимым:
# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr ""
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr ""
И вы можете заполнить переводы:
# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr "Willkommen auf unserer Seite!"
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr "Hier findet Ihr Umfragen."
Когда вы закончите перевод, вы должны скомпилировать все, выполнив следующее:
$ django-admin compilemessages
Опять же, это выполняется внутри каталога polls
.
Чтобы быстро проверить, что ваши переводы работают, вы должны изменить код языка внутри mysite/settings.py
так,
# mysite/settings.py
LANGUAGE_CODE = 'de'
Когда вы открываете приложение polls внутри браузера, оно должно быть переведено на немецкий язык.
Ускорьте свой процесс, используя фразу
Если вы используете фразу для управления своими переводами, вам на самом деле не нужно вручную создавать и редактировать *.po
файлы! Вам просто нужно создать и перевести ключи WelcomeHeading
и WelcomeMessage
внутри фразы и использовать функцию экспорта для загрузки ваших *.po
файлов.
Если вы установили наш инструмент командной строки, Phrase Client , ваш рабочий процесс станет еще проще. Просто создайте файл конфигурации .phraseapp.yml
в корневом каталоге вашего проекта со следующим содержимым:
# .phraseapp.yml
phraseapp:
access_token: <your access token>
project_id: <your project's id on PhraseApp>
file_format: po
pull:
targets:
file: "polls/locale/<locale_code>/LC_MESSAGES/django.po
Затем запустите следующее в корневой директории вашего проекта:
$ phraseapp pull && django-admin compilemessages
Это обновит все переводы в вашем проекте.
Кстати, использование нашего In-Context Editor в вашем приложении Django также очень просто! Вам нужно только установить django-phrase
с pip
:
$ pip install django-phrase
Затем просто измените все шаблоны, на которых вы хотите использовать In-Context-Editor, следующим образом:
<!-- polls/templates/polls/index.html -->
{% load i18n %}
{% load phrase_i18n %}
{% phrase_javascript %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>
Примечание : важно загрузить phrase_i18n
послеi18n
.
Наконец, добавьте следующие строки в вашу конфигурацию, и вы готовы к работе!
# mysite/settings.py
PHRASE_ENABLED = True
PHRASE_PROJECT_ID = 'YOUR_PROJECT_ID'
PHRASE_PREFIX = '{{__'
PHRASE_SUFFIX = '__}}'
Выберите локали
Обычно требуется выбрать локаль в соответствии с настройками браузера пользователя. Чтобы сделать это, вы должны изменить mysite/settings.py
файл следующим
# mysite/settings.py
from django.utils.translation import ugettext_lazy as _
...
MIDDLEWARE_CLASSES = (
...,
'django.middleware.locale.LocaleMiddleware',
...,
)
...
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
('en-us', _('English')),
('de', _('German')),
)
Таким образом, если у пользователя есть Германия в качестве локали, он увидит de
переводы. В противном случае языковой стандарт по умолчанию будет en-us
. Вы можете проверить, что это работает правильно с curl:
$ curl http://localhost:8000/polls -H "Accept-Language: de"
Это должно вернуть что-то вроде этого:
<h1>Willkommen auf unserer Seite!</h1>
<p>Hier findet Ihr Umfragen.</p>
Дальнейшее чтение
Если вы хотите узнать больше об интернационализации в Django, взгляните на официальную документацию . Есть еще одна хорошая статья .
Если вы хотите узнать больше о том, как вы можете настроить Phrase In-Context-Editor в вашем приложении Django, посмотрите документацию на Phrase . Вы также можете найти полные источники демонстрационного приложения, которое мы использовали в этом руководстве на GitHub.
Кроме того, если вы используете Flask , у нас есть еще одно сообщение в блоге, знакомящее вас с локализацией в этой среде.