Александр Кошелев
Александр Кошелев Python-разработчик

Мультиязычность. Проблемы выбора?

Знак вопроса в заголовке заметили? Не спроста он там. Поскольку если в вопросе индексирования я утверждал, что выбрать есть из чего и это маленькая но проблема (как и всегда чем больше вариантов, тем больше головной боли по поводу выбора лучшего), то тут, на мой взгляд, всё более очевидно.

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

Итак, сейчас существует несколько реализаций для мультиязычности контента базы:

Есть ещё, как бонус, ряд приложений, которые позволяют редактировать gettext *.po файлы через стандартную джанговскую админку:

И во всех группах есть свои явные лидеры по удобству и функциональности.

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

Первым на растерзание попадает transdb. Идея хранить перевод поля модели в виде сериализованных питон-словаря - только мне кажется бредовой? Как делать выборки по отдельным языкам? Как поиск осуществлять? Как в админке с этими словарями работать? Много вопросов. Так же, большой удар по производительности - всегда будут выбираться все переводы для конкретного объекта. Необходимость в специальном фильтре для вывода значений в шаблонах. В общем явно плохая идея - хранить перевод в словаре.

Идем дальше, i18ndynamic. Тут уже лучше, переводы хранятся в отдельных таблицах, что более оптимально, и позволяет выбирать только нужный перевод и не гонять туда сюда много ненужных данных. Но тоже не очень удобно и прозрачно для клиентского кода. Зато администраторский интерфейс достаточно удобен. Но всё равно, по степени выразительности решение не дотягиеват до высокого уровня.

Ну а теперь явный фаворит - django-multilingual. Для каждой модели создается вспомогательная таблица, где хранится перевод. Количество языков не ограничено. Добавление нового языка проходит абсолютно безболезненно для кода. Минимум изменений в логике. Во многих случаях менять логику не нужно вообще. Автор данного приложения хорошо покопался в django internals и максимально органично вписал функционал мультиязычно в существующую структуру моделей. Так же проработан административный интерфейс, что позволяет легко редактировать контент на разных языках.

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

Теперь перейдем к группе приложений по облегчению перевода *.po файлов. Тут django-rosetta на вершине. Выглядит вполне приятно и так же приятно с ним работать. Его конкурент пока на начальном этапе разработки.

Хотя, конечно, ценность перевода *.po файлов в админке достаточно сомнительна. Но как дополнительную возможность рассматривать можно и наверно иногда полезно.

Вот такой расклад сил в области реализации мультиязычности джанго приложений. Никакого выбора:) Вы согласны?

comments powered by Disqus