Весной прошлого года мы публиковали историю успеха нашего студента Максима Столпасова, успевшего за время обучения пройти практику в Австрии и найти работу. Сегодня мы попросили Максима рассказать о его итоговом проекте на факультете 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
Ну а потом приступаем к переводу:
- Добавляем новое вино. Непереведённая информация будет отображаться без изменения.
- Добавляем поле Title из модели Wine в переводимые поля. Тем самым мы обозначаем, что это поле будет переводиться.
- Добавляем перевод на английский и немецкий языки.
- Переключаем 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? Вот их истории:
- «Проблема маленьких городов — нет вакансий для джунов». Инженер-радиотехник Денис Горшков — о своей жизни в Ярославле, работе в МТС и умном доме на Python
- «Сейчас или никогда!» Бросил хорошую работу ради Python. А стоило ли? Чему научили ошибки и успешные собеседования по новой специальности;
- Поиск себя и быстрое погружение в веб-разработку. История Ильи Курбакова, который в 25 лет решил кардинально поменять направление в своей карьере.