Выпускные проекты: перевод динамического контента в Django

Выпускные проекты: перевод динамического контента в Django

Рассказ Максима Столпасова о его финальной разработке на Python-факультете Geek University 
4 минуты10522

Весной прошлого года мы публиковали историю успеха нашего студента Максима Столпасова, успевшего за время обучения пройти практику в Австрии и найти работу. Сегодня мы попросили Максима рассказать о его итоговом проекте на факультете Python — Django-tof, полезном инструменте для любых проектов на Django, которым нужна мультиязычность.

Как всё начиналось

Изначально идея создать удобный инструмент по переводу проектов на другие языки появилась у моего руководителя — он раньше работал над мультиязычными сайтами, разрабатывал их для европейских компаний. Он поделился ею со мной, когда у нас зашёл разговор о существующих подходах и инструментах перевода проекта на другие языки, и о том, как всё должно быть на самом деле.

Идея показалась очень логичной и полезной. Я изучил уже существующие решения и в итоге решил сам разработать нечто более простое и удобное.

Это был мой итоговый проект на факультете, уложиться нужно было в довольно сжатые сроки — на всё про всё было 3 месяца. В течение двух занятий мы сформулировали цель, определились с командами и начали разработку.

Коротко о самом проекте 

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

Перевод динамического содержимого осуществляется:

  • без необходимости изменения исходных классов моделей;
  • без необходимости перезапуска сервера;
  • без изменения схемы использования переводимых полей.

При этом Django-tof готов к работе сразу после установки и указания в Installed_APPS, плюс полностью интегрирован в админку Django. Таким образом, Django-tof гармонично дополняет модуль i18n, который уже встроен в Django и позволяет переводить статические данные вроде названия кнопок и пунктов меню.

Рассмотрим практический пример. Представим, что у нас есть проект на Django для хранения «Названия Вина» и есть общее описание (model Wine). И теперь нужна локализация, скажем, на немецкий (или любые другие языки).

Чтобы перевести это содержимое, нужно установить Django-tof. Это очень просто.

pip install django-tof
 
INSTALLED_APPS = [
      	…
        	‘tof’,]
 
python manage.py migrate tof

При необходимости указываем:

python manage.py collectstatic

Ну а потом приступаем к переводу:

  1. Добавляем новое вино. Непереведённая информация будет отображаться без изменения.
  2. Добавляем поле Title из модели Wine в переводимые поля. Тем самым мы обозначаем, что это поле будет переводиться. 
  3. Добавляем перевод на английский и немецкий языки. 
  4. Переключаем Django на нужный язык.

 Добавление поля данных в переводимые 

Если перевод для языка не задан, то будет выведен перевод для основного языка. Это можно изменить, внеся изменения в настройки. 

FALLBACK_LANGUAGES по умолчанию:

[SITE_ID: (‘en’, ‘de’, ‘ru’), ‘fr’: (‘nl’, ),)

Добавляем перевод на английский и переключаемся на немецкий. Всё работает!

Ну а теперь делаем процесс ещё более удобным. Для этого в admin.py класс для Вина наследуем от TofAdmin:

from tofadmin import TofAdmin
class  WineAdmin (TofAdmin):

Ну и, конечно, существует и возможность представить переводы в виде инлайнов:

from tofadmin import TofAdmin, TranslationTabularinline
class  WineAdmin (TofAdmin):
 …
inlines = (TranslationTabularinline, )

Отображение переводов — это хорошо, но есть ещё один важный момент — поиск по переводам. В нашей библиотеке за поведение поиска отвечает настройка DEFAULT_FILTER_LANGUAGE: по умолчанию “current”. В ней можно указать, по каким переводам осуществлять поиск. Примеры значений: all, current, [‘en’, ‘de’], {‘en’, (‘en’, ‘de’, ‘ru’)}

При значении DEFAULT_FILTER_LANGUAGE равным “current” поиск будет производиться только в текущем языке. При значении DEFAULT_FILTER_LANGUAGE равным “__all__” поиск будет производиться по всем переводам. 

Как шла разработка?

Изначально нужно было сформировать команду, которая работала над проектом. Сначала нас было трое, но почти сразу же один участник взял паузу в обучении, так что далее мы с другим коллегой работали вдвоём. Созванивались примерно раз в неделю, планировали задачи, обсуждали проблемы. Иногда программировали в четыре руки. Особого разделения на должности не было, а вот работу разделили, чтобы у каждого был свой участок.

Конечно, по ходу реализации проекта возникали проблемы. Большая их часть была связана с недостатком опыта и практики, нужно было разбираться в специфике Django, осваивать новые для себя вещи.

Алгоритм решения каждой из задач был достаточно простой:

  • разобраться самому.
  • получить дополнительную информацию в Google.
  • проконсультироваться с коллегами.

Он помогал преодолевать самые сложные проблемы. Некоторые из них решались на первом этапе, то есть получалось всё сделать самостоятельно. В сложных случаях помогали уже преподаватели. В моём случае это Дмитрий Читалов и Максим Данилов — мой руководитель. Кстати, спасибо им огромное — преподаватели на моём курсе были отличные.

В ходе реализации своего проекта я понял, что всю необходимую информацию я уже получил раньше — с совсем уж незнакомыми вещами я не сталкивался. Использовал то, что понял, чему учили.

Предмет моей особой гордости в проекте — создание простой устанавливаемой библиотеки, которая начинает работать сразу же после установки. И для неё не нужно менять уже существующий код.

Пару недель назад я ещё закончил курс по JS. В ближайшие несколько месяцев я собираюсь вплотную заняться рефакторингом фронтенда. Заниматься буду я им сам. Кроме того, есть и другие задачи, просмотреть которые можно в GitHub.

Пара советов студентам GeekBrains

Я уже рассказывал об этом в своём интервью, но еще раз скажу, поскольку это важно. В программе обучения GeekUniversity нет ничего лишнего, студенты получают необходимый минимум, который нужен в работе. Обязательно нужно выполнять домашние задания — без них обучение не будет полным. Кроме того, нужно ещё и обучаться самостоятельно, ведь программа не резиновая. Самостоятельное изучение тематических форумов, GitHub, разбор кода программ, написанных другими разработчиками, поможет быстро «встать на ноги в качестве разработчика.

Дополнительная информация по проекту Django-tof:

Хотите узнать больше о выпускниках Python-факультета GeekUniversity? Вот их истории:

программированиеистории успеха
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!
Posts popup