Як перекласти Django-додаток

4 хв. читання

У цій статті я розскажу про локалізацію сайту на 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 через його графічний інтерфейс.

Як перекласти Django-додаток

Не забудьте зберегти файл.

Крок дев'ятий: скомпілюйте переклади

Щоб мати змогу використовувати ваші переклади в додатку, текстові файли .po потрібно скомпілювати в бінарні файли .mo. PoEdit вміє це з коробки, але ви також можете використати й django-admin. Ця команда скомпілює всі файли за раз:

django-admin compilemessages

Крок десятий: перевірте результат

Запустіть веб-сервер та відкрийте браузер. Якщо ви все зробили правильно, ваш додаток повинен бути перекладеним на вашу мову. Тепер, для додання нових перекладів вам потрібно:

  1. Переконайтеся, що тег i18n під'єднано до вашого шаблону.

  2. Використайте функцію trans та напишіть рядок (бажано, англійською).

  3. Використовуйте команду makemessages для оновлення .po-файлів.

  4. Відредагуйте ваші .po-файли.

  5. Скомпілюйте їх в .mo-файли.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 6.2K
Приєднався: 7 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація