Как локализовать ваше приложение Django

Никогда не задумывались ли вы, как веб-сайты могут предлагать свой контент на нескольких языках, идеально подходящих для разных культур и регионов? Все дело в локализации, это настоящее волшебство для веб-разработки - особенно при использовании Django, чрезвычайно универсального фреймворка Python. Это не только о переводах.

Вы когда-нибудь задавались вопросом, как веб-сайты могут предлагать свой контент на нескольких языках, идеально подходящий разным культурам и регионам?

Вот, эта магия называется локализацией, и она меняет игру для разработки веб-приложений – особенно при использовании Django, универсального фреймворка Python.

Это не только о переводе текста – это также о настройке вашего приложения под разные культуры со своими уникальными обычаями и предпочтениями. Так что сегодня я расскажу вам о локализации приложений Django. Погрузимся!

Предварительные требования

Прежде всего, убедитесь, что у вас установлен Python на вашем компьютере. В этом руководстве я предполагаю, что у вас уже есть базовые знания Django – мы быстро пройдем некоторые части.

Если вы пока не знакомы с основами Django, вам может понадобиться освежить свои знания. Не беспокойтесь, Hyperskill, где я работаю как эксперт, поддерживает вас с некоторыми потрясающими обучающими треками.

Вот что мы рассмотрим:

  1. Как установить Django
  2. Как создать новый проект и приложение Django
  3. Как создать переключатель местоположения
  4. Как локализовать ваше приложение
  5. Как отметить строки в шаблонах с помощью {% trans %}
  6. Множественное число
  7. Заключение

Как установить Django

Шаг 1: Создать виртуальную среду

Обычно мы создаем виртуальную среду для проектов Django. Это помогает изолировать проект от других проектов Python на вашем компьютере и обеспечить уникальные зависимости проекта. Запустите команду python -m venv myenv для создания виртуальной среды.

Шаг 2: Активация виртуальной среды

Запустите source myenv/bin/activate на Unix/macOS или myenv\\Scripts\\activate на Windows для активации виртуальной среды.

Шаг 3: Установка Django

Для активной виртуальной среды установите Django, используя менеджер пакетов Python pip, выполнив команду pip install django.

Шаг 4: Проверка установки Django

После установки убедитесь, что Django установлен правильно, запустив команду django-admin --version. Она должна выводить номер версии без ошибок.

Up1Ue0QkBKQkvZp6YggoT-2RkQSPOZ_h8EN46rl8Z_ZqZvM5EmRANoBURpN6oU8SP6OrObUHnHJ5HXnYeZEK5DyPADhfNHb4PNu98xcdIbui8gP18wHtmzTTshLQtEz1uXFk0j1l51c94wv5wCDLVcw

django-admin – это командный скрипт, который идет в комплекте с Django. Он выполняет административные задачи, такие как создание нового проекта и обработка миграций базы данных.

Как создать новый проект и приложение Django

Шаг 1: Создайте проект Django

Создадим новый проект с именем localization_project, используя команду django-admin startproject localization_project.

Эта команда создаст новый каталог с именем localization_project, содержащий все необходимые файлы для нашего проекта Django, как показано ниже.

lasC5Lapd9onrbUJPL_kd51iMMV-n4e31amdbqUl8-452gqE9LPKvw4Tj5S5yGix44fhYAReSF5erlyip6FK4_vUil8pF7zE4hvgt0OZ_emW4QnZYNVUB3MCRse50PoFVeb1QkYgkHUF8grUbTGVc24
Новый каталог с именем localization_project

Чтобы начать работу над этим новым проектом, перейдите в только что созданную папку, выполнив команду cd localization_project.

Шаг 2: Создание Django-приложения

Вам понадобится приложение с некоторым контентом, чтобы показать, как переводить содержимое. Я использовать команду python manage.py startapp homepage для создания простого приложения. Снова, manage.py – это еще одна утилита командной строки, которая является тонкой оберткой вокруг django-admin и позволяет вам взаимодействовать с вашим проектом Django различными способами. После запуска этой команды у вас должна появиться еще одна папка с именем homepage и множеством файлов Python.

Шаг 3: Определение представления для вашего приложения

Откройте файл views.py в папке приложения homepage и определите представление для домашней страницы. В целях простоты наша домашняя страница будет отображать приветствие, число в тысячах и текущую дату.

from django.shortcuts import render
from django.utils import timezone

def home_view(request):
    context = {
        'greeting': "Добро пожаловать в наш Localization Project!",
        'large_number': 12345.67,
        'current_date': timezone.now()
    }
    return render(request, 'home.html', context)

Шаг 4: Настройка URL-адресов

Сначала в папке localization_project отредактируйте файл urls.py, чтобы включить URL-адреса приложения homepage.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('homepage.urls')),
]

Затем создайте файл urls.py в папке приложения homepage и установите URL-адрес для вашего представления.

from django.urls import path
from .views import home_view

urlpatterns = [
    path('', home_view, name='home'),
]

Шаг 5: Создание шаблона домашней страницы

В папке приложения homepage создайте папку с именем templates. Внутри нее создайте файл с именем home.html. Здесь вы будете создавать дизайн вашей домашней страницы. Добавьте следующий HTML-код:

<!DOCTYPE html><html><head>    <title>Localization Project</title></head><body>    <h1>{{ greeting }}</h1>    <p>Число: {{ large_number }}</p>    <p>Дата: {{ current_date }}</p></body></html>

Добавьте homepage в список INSTALLED_APPS в вашем файле settings.py в папке localization_project.

INSTALLED_APPS = [
    # 'другие приложения',
    'homepage',
]

Так должна выглядеть ваша окончательная папка localization_project:

OYqBkb5L6wtvrQENqa89O-7F9nJBGdBRA-vb-p-4saAxE1JLFfci3VTM2RENhuB-wdUmf6TLR-QpxrEeT_QdALrNbdTQdMpKNXTwaU2nITbcb6MQgystPD9DJZunddDvX5lGjj6Rc4wpZQIj3VEwnaM
Окончательная папка localization_project

Шаг 6 – Запуск сервера разработки

Наконец, вы можете запустить свой сервер разработки, чтобы увидеть домашнюю страницу с помощью команды python manage.py runserver. Теперь, когда вы посетите адрес http://127.0.0.1:8000/ в вашем веб-браузере, вы должны увидеть свою простую домашнюю страницу, отображающую приветствие, число в тысячах и текущую дату.

FgKfmYPAti1Q74jKY5l393qNVjGh4GlRJIDEx2n5uxMG0SB3Ru5J19DX0fmaxSAHgllrCpC3Ky8nTH9HwC3rX_wAgSv-qUSFHjFop-HSsBOgcNYuNI635B4RdkzlxVP_ZO2dHGmE3EGZ2Kh2vRFb1Rg
Приветствие, число в тысячах и текущая дата

Как создать переключатель локали

Обычно большинство веб-сайтов при первом посещении отображают контент на английском языке.

Если вы посетили веб-сайт с поддержкой локализации, вы могли заметить выпадающее меню, позволяющее пользователям выбирать из предлагаемых языков. После выбора пользователем предпочитаемого языка веб-сайт автоматически устанавливает его в качестве языка по умолчанию и соответствующим образом обновляет контент. Это выпадающее меню называется переключателем локали, который вы создадите далее. С его помощью вы сможете предоставить пользователям возможность изменить язык и увидеть функциональность локализации в действии, что вы сделаете после этого.

Шаг 1: Добавление формы выбора языка

Сначала измените ваш шаблон home.html, чтобы добавить форму выбора языка. Эта форма будет содержать выпадающее меню со следующими вариантами: Английский, Испанский и Французский. Форма будет отправлена на встроенное представление Django set_language, которое будет обрабатывать изменение языка.

<!DOCTYPE html><html><head>    <title>Проект локализации</title></head><body>    <h1>{{ greeting }}</h1>    <p>Число: {{ large_number }}</p>    <p>Дата: {{ current_date }}</p>    <form action="{% url 'set_language' %}" method="post">        {% csrf_token %}        <input name="next" type="hidden" value="{{ redirect_to }}" />        <select name="language">            <option value="en">Английский</option>            <option value="es">Испанский</option>            <option value="fr">Французский</option>        </select>        <input type="submit" value="Изменить язык">    </form></body></html>

Шаг 2: Обновление представления

В вашей функции home_view в файле views.py, добавьте текущий путь в контекст, чтобы форма знала, куда перенаправить после изменения языка.

from django.utils.translation import gettext as _def home_view(request):    context = {        'greeting': _("Добро пожаловать в наш проект локализации!"),        'large_number': 12345.67,        'current_date': timezone.now(),        'redirect_to': request.path    }    return render(request, 'home.html', context)

Шаг 3: Настройка URL для изменения языка

Убедитесь, что ваш файл urls.py в директории localization_project настроен на обработку изменения языка. Django предоставляет представление для этого, но вам нужно подключить его в конфигурации URL.

from django.contrib import adminfrom django.urls import path, includefrom django.conf.urls.i18n import i18n_patternsurlpatterns = [    path('admin/', admin.site.urls),    path('', include('homepage.urls')),    path('i18n/', include('django.conf.urls.i18n')),]

Шаблон URL i18n включает представление перенаправления set_language.

Шаг 4: Включение промежуточного программного обеспечения для локали

Убедитесь, что промежуточное программное обеспечение LocaleMiddleware включено в вашем файле settings.py. Это промежуточное программное обеспечение позволяет Django автоматически определить предпочтение языка пользователя из запроса.

MIDDLEWARE = [    # 'other middleware',    'django.middleware.locale.LocaleMiddleware',]

Шаг 5: Запустите сервер разработки и протестируйте переключатель языка

Запустите сервер разработки и посетите вашу домашнюю страницу. Теперь вы должны увидеть что-то похожее на изображение ниже, с выпадающим меню выбора языка и тремя выбранными языками.

9yNT9lQNvc6xCh_VvgwkOhygjTW0zogXJRdwhRYUlpEqJ3lngsynnXwbzHpwpI4MPLzeey4-HPJJEW0McsNSJSeKd0kBSDdpzliUUbcSaYvTCJzak-GznTRKLqWnV7W62Kf_aOz3Gi_kfzX8GwlVsVg
Выбор языка с выпадающим меню и тремя выбранными языками

Как локализовать свое приложение

В этом разделе будет показано, как перевести текст на нашей домашней странице в соответствии с выбором местного пользователя.

Шаг 1: Включите интернационализацию в настройках Django

Прежде чем начать, убедитесь, что ваш проект Django настроен для интернационализации. В вашем файле settings.py нужно проверить и обновить следующие настройки. Первые четыре настройки в следующем коде, скорее всего, устанавливаются по умолчанию. Поэтому вам нужно указать языки, которые вы хотите поддерживать в своем приложении – в данном случае, английский, испанский и французский. Затем определите путь к вашему каталогу локализации. Здесь Django будет хранить и искать файлы перевода. Вам нужно создать этот каталог вручную в вашем проекте (в том же каталоге, где находится файл manage.py). Также не забудьте импортировать модуль OS в верхней части файла.

LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_TZ = TrueLANGUAGES = [    ('en', 'Английский'),    ('es', 'Испанский'),    ('fr', 'Французский'),]LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]

Шаг 2: Отметьте текст для перевода

При разработке веб-приложения с использованием Django важно помнить, что текст, числа и даты локализуются по-разному в зависимости от языка и культуры. Это связано с тем, что их содержание и контекст могут сильно отличаться.

Например, текстовые строки должны иметь более сильное осознание своего значения и контекста при использовании в приложении. Итак, чтобы сделать ваше приложение доступным для пользователей из разных культур, вам нужно явно отметить каждую строку, которую нужно перевести. С другой стороны, числа и даты – это типы данных, которые Django может автоматически форматировать в соответствии с локалью. Вам не нужно их отмечать. Если вы проверите наше приложение, вы заметите, что мы передали три значения из нашего файла views.py в HTML-шаблон: строку, число и дату. В то время как числу и дате не нужно отмечать для локализации, вам необходимо отметить строку для ее локализации. Для этого Django предоставляет функцию gettext. При локализации своего приложения отметьте любую строку, которую вы передаете из представления в HTML-шаблон, который вы хотите локализовать. В нашем случае мы пометим приветственный текст с помощью _().

from django.utils.translation import gettext as _from django.shortcuts import renderfrom django.utils import timezonedef home_view(request):    context = {        'greeting': _("Добро пожаловать в наш проект локализации!"),         #Другие данные    }    return render(request, 'home.html', context)

Шаг 3: Создание файлов сообщений

Используйте команду makemessages, чтобы создать языковые файлы для каждого языка. Она просматривает файлы вашего проекта Django ищет отмеченные для локализации строки и генерирует файлы .po, которые хранят переводы. Запустите эти команды в командной строке или терминале.

  • Для испанского языка: django-admin makemessages -l es
  • Для французского языка: django-admin makemessages -l fr

Это создаст файлы .po в директориях locale/es/LC_MESSAGES и locale/fr/LC_MESSAGES.

Шаг 4: Перевод файлов сообщений

Откройте каждый файл .po и добавьте перевод для каждой строки под соответствующим msgstr. Например, в locale/es/LC_MESSAGES/django.po вы бы добавили следующее:

msgid "Добро пожаловать в наш проект локализации!"msgstr "¡Bienvenido a nuestro Proyecto de Localización!"

А в locale/fr/LC_MESSAGES/django.po вы бы добавили следующий текст:

msgid "Добро пожаловать в наш проект локализации!"msgstr "Bienvenue dans notre Projet de Localisation!"

Шаг 5: Компилирование файлов сообщений

После перевода скомпилируйте эти файлы в файлы .mo, которые могут использовать Django. Запустите команду django-admin compilemessages, чтобы обработать все ваши файлы .po внутри проекта и сгенерировать соответствующие файлы .mo.

Шаг 6: Запустите сервер и протестируйте переводы

Теперь протестируйте ваши переводы, используя переключатель языка на вашем веб-сайте. Обновите главную страницу и вы должны увидеть приветственное сообщение на выбранном языке:

PvcQ_nIqBHwpavzd-g9XWonKSAsCeZ_Cy80nCxYNZ3pBNIthVug_u-7CGr905Dug41pfXKBoZflcHkeAYHfQI54SutLQKZcU0jw6KlhjTl353pFOz49-I-SVR82gBOYkXiJ8VlzEze4PeLf7fC77YOo
Приветственное сообщение на испанском языке
WVeCHfGGlMqSEtGIBuKtFPmFYiWNEanZv66Btk92avC-rpaBQ1XrvSBwdlphmCqDBxd5JxZ5cnoLv2wiXvaobNKPOS21p6kfUe2FbxOkG7W54onAb6Jun5c2FOn1T74HWPoNIdNOCon2cc_kSC_GHeg
Приветственное сообщение на французском языке

Как вы можете видеть, заголовок проекта, Welcome to our Localization Project, переведен в соответствии с выбранным языком. Вы также заметите, что число и дата автоматически переводятся на выбранный язык. Но вы можете заметить, что слова “Number” и “Date” не переведены. Мы не отметили их для перевода на предыдущих этапах. Каждый раз, когда вы обновляете ваше веб-приложение с дополнительным контентом и вам нужно локализовать этот новый контент, просто следуйте указанным выше шагам.

Сначала отметьте строки, которые требуют локализации. Затем запустите команду makemessages, чтобы обновить ваши файлы .po с этими новыми строками. Далее предоставьте соответствующие переведенные тексты в файлах .po для этих новых строк. Наконец, сгенерируйте файлы .mo с помощью команды compilemessages.

Как пометить строки в шаблонах с помощью тегов {% trans %}

Как вы знаете, слова “Numbers” и “Date” не локализованы на предыдущих этапах. Интересно, что вы не можете отметить их с помощью метода gettext, так как они не передаются из файла views.py. Это статические слова в HTML-шаблоне. Чтобы локализовать текст в шаблонах Django, вы используете тег {% trans %}, предоставленный Django. Этот тег указывает Django на перевод указанного текста на соответствующий язык на основе предпочтений текущего пользователя. Давайте локализуем текст “Number” и “Date”, используя тег шаблона {% trans %}.

Шаг 1: Обновите свой шаблон с тегами {% trans %}

Откройте ваш шаблон home.html и измените его, чтобы добавить теги {% trans %} вокруг текста, который вы хотите перевести. Вот пример – не забудьте добавить {% load i18n %} в верхней части HTML-файла:

{% load i18n %}<!DOCTYPE html><html><head>    <title>{% trans "Localization Project" %}</title></head><body>    <h1>{{ greeting }}</h1>    <p>{% trans "Number" %}: {{ large_number }}</p>    <p>{% trans "Date" %}: {{ current_date }}</p>    <!-- Language Switcher Form -->    <!-- ... --></body></html>

В этом примере слова “Localization Project”, “Number” и “Date” в шаблоне отмечены для перевода.

Шаг 2: Создайте/обновите файлы языковых сообщений

Запустите команду makemessages для обновления файлов .po для каждого языка.

  • Для испанского: django-admin makemessages -l es
  • Для французского: django-admin makemessages -l fr

Шаг 3: Переведите новые строки в файлах .po

В каждом файле .po вы найдете вновь добавленные строки. Добавьте их переводы в раздел msgstr для каждого языка. Например, вот связанный контент для испанского файла .po:

#: .\homepage\templates\home.html:10msgid "Number"msgstr "Número"#: .\homepage\templates\home.html:11msgid "Date"msgstr "Fecha"

Затем запустите команду django-admin compilemessages для компиляции файлов сообщений и запуска сервера разработки для тестирования обновленного веб-приложения. Теперь вы можете увидеть следующий вывод:

36WBImqij72SZsdYIff9LbyEWz2NIiKQCy5Zqh0cGfhxfTwFHh7783qZ_cnyrQ4E7asEbbAg4GMdrwssghE38mMBgIgz52j4Y_6kCPy-YzJ2398j3_PSkZVjMYHK52oj8JXnZZS0h22wXYu4PZNeigc
Полностью испанское приветственное сообщение
x4Dt7zWoVjaFct9qlaHOIc4BVUQjLkufn-_Efl9hr8GcQIg52XDGilPykw-C3DA3arbny8CinIHaJzGPbT7xdNmGkB19CpjXlRieSwOH4wd9gwdf8WeNJJUblGvAf2UP8pLAZw4CKpuxXzGpv5vWNvg
Полностью французское приветственное сообщение

Во множественном числе

Множественное число в фреймворке Django – это способ обработки разных переводов на основе числового значения. Это необходимо, потому что во многих языках форма слова меняется в зависимости от числа, описывающего его.

Django предоставляет способ обработки этого с помощью тега шаблона {% blocktrans %} с множественной формой. Давайте продемонстрируем это, используя наше приложение Django. Предположим, вы хотите отобразить сообщение о количестве посетителей на вашем сайте, которое меняется динамически.

Шаг 1: Обновите ваше представление, чтобы передавать количество посетителей

Сначала измените своё представление home_view в файле views.py, чтобы включить переменную, представляющую количество посетителей. В демонстрационных целях это может быть статическое число.

from django.shortcuts import renderfrom django.utils import timezonefrom django.utils.translation import gettext as _def home_view(request):    num_visitors = 5    context = {        'greeting': _("Welcome to our Localization Project!"),        'num_visitors': num_visitors,    }    return render(request, 'home.html', context)

Шаг 2: Обновите шаблон с множественным числом

В вашем шаблоне home.html используйте тег {% blocktrans %} с множественной формой, чтобы обработать множественное число, вот так:

<!-- Остальное содержимое шаблона -->       <h1>{{ greeting }}</h1>    <p>    {% blocktrans count counter=num_visitors %}        Там есть {{ counter }} посетитель.    {% plural %}        Там есть {{ counter }} посетителей.    {% endblocktrans %}    </p>    <!-- Остальное содержимое шаблона -->

Здесь {% blocktrans count counter=num_visitors %} используется для обработки единственного числа, а раздел {% plural %} – для множественного числа.

Шаг 3: Обновите файлы сообщений

Запустите команду makemessages , чтобы обновить файлы .po для каждого языка: django-admin makemessages -l es для испанского и django-admin makemessages -l fr для французского.

Шаг 4: Переведите и обрабатывайте множественные формы в файлах .po

В каждом файле .po вы найдете записи для единственной и множественной формы.

Например, испанский файл .po должен содержать следующее содержимое:

msgid "There is %(counter)s visitor."msgid_plural "There are %(counter)s visitors."msgstr[0] "Hay %(counter)s visitante."msgstr[1] "Hay %(counter)s visitantes."

Затем запустите команду django-admin compilemessages, чтобы скомпилировать файлы сообщений. Запустите сервер и вы должны увидеть сообщение в единственной или множественной форме в зависимости от количества посетителей. Измените число в num_visitors в своем представлении и наблюдайте, как меняется сообщение.

0MLly1OjdLtGZ86I5wfGxcSOw36WoQFSIR-awU40fKB1xwrMOPV7M9GlT2hAD3YFmBeFkUeSxhG7eisZ7x_SCkjbMKZWI8Hox_4Z79ggwdR362xG3By6d4f3yoplWEiCRGDZWPd5eDaAAsQSiBoUZXU
Сообщение в единственной или множественной форме в зависимости от количества посетителей. Версия на английском
efgAT1-V3Eh_7QbiOLL0KHo2rEI2xh32A2y1oWXCf8lH1TNADoFF7H1PFT3tNbzt-_N5ss1D94pOK2m6b6Cx5dqIqTcvBjpxYadPUswCS4GCUky_Wj9ZgaBu1eCvDbcs9cYVyrr--aI-CferSD7j8FE
Сообщение в единственной или множественной форме в зависимости от количества посетителей. Версия на французском

Вывод

И вот вам – исчерпывающее руководство по локализации приложения Django. Благодаря простому дизайну Django у вас есть все необходимые инструменты для перевода чисел и значений DateTime на подходящих этапах разработки. Кроме того, мы видели, как командная строка Django-admin может облегчить управление файлами переводов.

Но нельзя забывать, что локализация веб-сайта означает не только перевод слов. Чтобы полноценно использовать возможности локализации Django, погрузитесь в его документацию, углубляйте свои знания и продолжайте практиковаться.

Спасибо за чтение! Я — Джесс, эксперт от Hyperskill. Вы можете ознакомиться с треком Django на нашей платформе.


Leave a Reply

Your email address will not be published. Required fields are marked *