Как локализовать ваше приложение Django
Никогда не задумывались ли вы, как веб-сайты могут предлагать свой контент на нескольких языках, идеально подходящих для разных культур и регионов? Все дело в локализации, это настоящее волшебство для веб-разработки - особенно при использовании Django, чрезвычайно универсального фреймворка Python. Это не только о переводах.
Вы когда-нибудь задавались вопросом, как веб-сайты могут предлагать свой контент на нескольких языках, идеально подходящий разным культурам и регионам?
Вот, эта магия называется локализацией, и она меняет игру для разработки веб-приложений – особенно при использовании Django, универсального фреймворка Python.
Это не только о переводе текста – это также о настройке вашего приложения под разные культуры со своими уникальными обычаями и предпочтениями. Так что сегодня я расскажу вам о локализации приложений Django. Погрузимся!
Предварительные требования
Прежде всего, убедитесь, что у вас установлен Python на вашем компьютере. В этом руководстве я предполагаю, что у вас уже есть базовые знания Django – мы быстро пройдем некоторые части.
Если вы пока не знакомы с основами Django, вам может понадобиться освежить свои знания. Не беспокойтесь, Hyperskill, где я работаю как эксперт, поддерживает вас с некоторыми потрясающими обучающими треками.
Вот что мы рассмотрим:
- Как установить Django
- Как создать новый проект и приложение Django
- Как создать переключатель местоположения
- Как локализовать ваше приложение
- Как отметить строки в шаблонах с помощью
{% trans %}
- Множественное число
- Заключение
Как установить 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
. Она должна выводить номер версии без ошибок.
django-admin – это командный скрипт, который идет в комплекте с Django. Он выполняет административные задачи, такие как создание нового проекта и обработка миграций базы данных.
Как создать новый проект и приложение Django
Шаг 1: Создайте проект Django
Создадим новый проект с именем localization_project, используя команду django-admin startproject localization_project
.
Эта команда создаст новый каталог с именем localization_project, содержащий все необходимые файлы для нашего проекта Django, как показано ниже.
Чтобы начать работу над этим новым проектом, перейдите в только что созданную папку, выполнив команду 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
:
Шаг 6 – Запуск сервера разработки
Наконец, вы можете запустить свой сервер разработки, чтобы увидеть домашнюю страницу с помощью команды python manage.py runserver
. Теперь, когда вы посетите адрес http://127.0.0.1:8000/ в вашем веб-браузере, вы должны увидеть свою простую домашнюю страницу, отображающую приветствие, число в тысячах и текущую дату.
Как создать переключатель локали
Обычно большинство веб-сайтов при первом посещении отображают контент на английском языке.
Если вы посетили веб-сайт с поддержкой локализации, вы могли заметить выпадающее меню, позволяющее пользователям выбирать из предлагаемых языков. После выбора пользователем предпочитаемого языка веб-сайт автоматически устанавливает его в качестве языка по умолчанию и соответствующим образом обновляет контент. Это выпадающее меню называется переключателем локали, который вы создадите далее. С его помощью вы сможете предоставить пользователям возможность изменить язык и увидеть функциональность локализации в действии, что вы сделаете после этого.
Шаг 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: Запустите сервер разработки и протестируйте переключатель языка
Запустите сервер разработки и посетите вашу домашнюю страницу. Теперь вы должны увидеть что-то похожее на изображение ниже, с выпадающим меню выбора языка и тремя выбранными языками.
Как локализовать свое приложение
В этом разделе будет показано, как перевести текст на нашей домашней странице в соответствии с выбором местного пользователя.
Шаг 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: Запустите сервер и протестируйте переводы
Теперь протестируйте ваши переводы, используя переключатель языка на вашем веб-сайте. Обновите главную страницу и вы должны увидеть приветственное сообщение на выбранном языке:
Как вы можете видеть, заголовок проекта, 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
для компиляции файлов сообщений и запуска сервера разработки для тестирования обновленного веб-приложения. Теперь вы можете увидеть следующий вывод:
Во множественном числе
Множественное число в фреймворке 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
в своем представлении и наблюдайте, как меняется сообщение.
Вывод
И вот вам – исчерпывающее руководство по локализации приложения Django. Благодаря простому дизайну Django у вас есть все необходимые инструменты для перевода чисел и значений DateTime на подходящих этапах разработки. Кроме того, мы видели, как командная строка Django-admin может облегчить управление файлами переводов.
Но нельзя забывать, что локализация веб-сайта означает не только перевод слов. Чтобы полноценно использовать возможности локализации Django, погрузитесь в его документацию, углубляйте свои знания и продолжайте практиковаться.
Спасибо за чтение! Я — Джесс, эксперт от Hyperskill. Вы можете ознакомиться с треком Django на нашей платформе.
Leave a Reply