У цій статті я розскажу про локалізацію сайту на Django. Найпрекраснішим є те, що фреймворк сам завантажить потрібні файли локалізації, базуючись на мові браузера. До цього я багато працював з Yii та Laravel, але такого ще не бачив. Давайте покроково розберемо як це робиться.
Крок перший: ввімкніть інтернаціоналізацію
Відкрийте файл settings.py
і пошукайте опцію USE_I18N
, якщо її немає — допишіть:
USE_I18N = True
I18N – загальноприйнята абревіатура для інтернаціоналізації.
Крок другий: зробіть функцію перекладу доступною в settings.py
Перш за все, потрібно перекласти рядки в налаштуваннях. Наприклад, повідомлення про помилку. Для цього додайте на початку settings.py
:
from django.utils.translation import ugettext_lazy as _
Тепер ви можете використовувати функцію _()
для перекладу рядків у вашому settings.py
, наприклад, так:
DEFAULT_ERROR_MESSAGE = _("An error has occurred")
Крок третій: вкажіть мову за замовчуванням
Django використовує коди ISO 639 в нижньому регістрі для позначення мов. Наприклад, англійська мова має код en. Якщо ви хочете розділити локалізації для британської та американської англійської, то використовуйте два окремих коди: en-gb та en-us відповідно. Встановимо мову за умовчуванням в settings.py
:
LANGUAGE_CODE = 'en'
Якщо ваш додаток перекладено лише на англійську та німецьку, а його відкриє користувач з Франції, він побачить англійську версію.
Крок четвертий: оголосіть мови, які ви підтримуєте
Якщо ви плануєте розповсюджувати ваш додаток серед користувачів, що розмовляють англійською та голландською, то ось що вам потрібно додати до settings.py
:
LANGUAGES = (
('en', _('English')),
('nl', _('Dutch')),
)
Завдяки тому, що ми імпортували функцію перекладу, назви мов теж будуть перекладені правильно.
Крок п'ятий: використовуйте функцію перекладу в ваших шаблонах
Щоб мати змогу використовувати функцію перекладу в ваших шаблонах, вам потрібно імпортувати тег i18n
у всіх шаблонах. Він містить функцію trans
, що й перекладає текст. Наприклад, ось так буде виглядати форма логіну з кнопкою входу через Facebook:
{% extends 'frontend/base.html' %}
{% load i18n %}
{% block content %}
<form>
<button class="button-facebook">{% trans "Login with Facebook" %}</button>
</form>
{% endblock %}
trans
приймає рядок та намагається його перекласти. Якщо переклад не знайдеться, рядок буде відображено як є. Оскільки ми ще не створили перекладів, ми побачимо надпис «Login with Facebook».
Крок шостий: створіть теку для перекладів
Створюють теку locale
в головній директорії Django-проекту, не додатку. Після створення потрібно розказати про це Django. Додайте в ваш settings.py
:
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
Крок сьомий: дайте Django згенерувати всі потрібні файли та директорії
Для збереження перекладів Django використовує формат GNU GetText. GetText зберігає всі рядки у файлі і конвертує його в бінарний файл. GetText також використовується і WordPress'ом. Ви можете редагувати файли з перекладами (.po) будь-якою програмою, але я надаю перевагу PoEdit.
Для створення po-файлів можна використати команду django-admin
.
django-admin.py makemessages -a
Django згенерує .po-файли в директорії з перекладами для всіх мов, вказаних в LANGUAGES
(крок четвертий).
Крок восьмий: перекладіть додаток
Коли ви відкриєте .po-файл в редакторі, ви побачите щось таке:
#: sample/settings.py:128
msgid "English"
msgstr ""
#: sample/settings.py:129
msgid "Dutch"
msgstr ""
#: templates/frontend/main/index.html:11 templates/frontend/main/login.html:5
msgid "Login with Facebook"
msgstr ""
Це той самий формат GetText. Django автоматично знаходить всі використання функцій _()
та trans
та виносить рядки, які потрібно перекласти, в файл. В поле msgstr
вам потрібно вписати переклад. Як я вже казав, я надаю перевагу PoEdit через його графічний інтерфейс.
Не забудьте зберегти файл.
Крок дев'ятий: скомпілюйте переклади
Щоб мати змогу використовувати ваші переклади в додатку, текстові файли .po потрібно скомпілювати в бінарні файли .mo. PoEdit вміє це з коробки, але ви також можете використати й django-admin
. Ця команда скомпілює всі файли за раз:
django-admin compilemessages
Крок десятий: перевірте результат
Запустіть веб-сервер та відкрийте браузер. Якщо ви все зробили правильно, ваш додаток повинен бути перекладеним на вашу мову. Тепер, для додання нових перекладів вам потрібно:
-
Переконайтеся, що тег
i18n
під'єднано до вашого шаблону. -
Використайте функцію
trans
та напишіть рядок (бажано, англійською). -
Використовуйте команду
makemessages
для оновлення .po-файлів. -
Відредагуйте ваші .po-файли.
-
Скомпілюйте їх в .mo-файли.
Ще немає коментарів