-
Notifications
You must be signed in to change notification settings - Fork 3
5. Интернационализация и локализация
Чтобы перевести страницу в django, прежде всего необходимо задать языки и путь к переводам (локализации) в настройках (heritage_corpus/settings.py). Вот так это выглядит:
# основной язык нашего сайта
LANGUAGE_CODE = 'en-us'
# все языки, которые мы используем и их коды
LANGUAGES = (
('ru', _('Russian')),
('en', _('English')),
)
# мы хотим использовать инструменты для интернационализации из джанго
USE_I18N = True
# мы хотим использовать инструменты для локализации из джанго
USE_L10N = True
# путь к директории, в которой мы хотим хранить все переводы
LOCALE_PATHS = (
'...',
)
Для того, чтобы Джанго знал, какие именно строки нужно переводить, эти строки нужно специальным образом отметить:
В коде Python используется функция ugettext_lazy()
, которую обычно сокращают как _()
:
from django.utils.translation import ugettext_lazy as _
GenderChoices = ((u'ж', _(u'female')), (u'м', _(u'male')))
Тут мы говорим, что строки 'female' и 'male' в питоновском коде должны на сайте автоматически переводиться.
В шаблонах html используется специальный тэг trans
:
{% load i18n %}
<div class="checkbox">{% trans "Dagestanian" %}</div>
Тут мы говорим, что строка 'Dagestanian' из шаблона должна на сайте автоматически переводиться.
После того, как все нужные строки отмечены для перевода, их нужно собрать в один большой файл. У нас этот файл находится в locale\ru\LC_MESSAGES под названием django.po. Чтобы Джанго сам нашел все новые строки в коде сайта и добавил их в наш файл с переводами, нужно пойти в директорию с проектом и написать команду
python manage.py makemessages -l ru
-l ru
указывает на то, что мы хотим апдейтнуть перевод на русский язык.
Файл с переводами выглядит следующим образом:
#: annotator/models.py:28
msgid "genre"
msgstr "жанр"
- msgid - это сама строка из исходного кода, ее менять нельзя.
- msgstr - это место, куда нужно написать перевод, сначала там будут пустые кавычки, а тебе нужно туда что-то вписать, при переводе кавычки нужно сохранить.
- Перед каждым фрагментом для перевода стоит комментарий с #, именем файла, из которого взят данный фрагмент и номером строчки, из которой этот фрагмент вытащили.
После того, как мы добавили все нужные переводы, нам необходимо его скомпилировать в более эффективный формат (рядом создастся файл с расширением .mo - как раз он то и используется джангой для переводов). Для этого нужно выполнить команду:
python manage.py compilemessages
После этого, скорее всего, придется перезапустить сервер.
У нас на сайте есть страницы, которые берут свое содержимое не из кода сайта, а из базы данных, которую наполняют пользователи (например, страница с новостями).
Для перевода такой страницы, в html-шаблоне мы проверяем текущий код языка у страницы и в соответствии с ним выдаем нужный текст. Вот так, например, это сделано в коде страницы новостей:
{% if LANGUAGE_CODE == 'ru' %}
<p>{{ article.text_rus | safe}} </p>
{% endif %}
{% if LANGUAGE_CODE == 'en' %}
<p>{{ article.text_eng | safe}} </p>
{% endif %}
- Обернуть все строки для перевода в
_()
в питоне илиtrans
в html; python manage.py makemessages -l ru
- В файле django.po найти непереведённые строки и добавить им перевод.
python manage.py compilemessages
-
runserver
- Запускаем и убеждаемся, что всё в порядке. git push
-
git pull
на сервере -
python manage.py compilemessages
на сервере - Скорее всего - перезапускаем сервер.