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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии 11

  1. Glader написал:

    "Давление нового языка" Добавление?

    Оставлен 12 Февраль 2008 в 17:19
  2. Александр Кошелев написал:

    "Давление нового языка" Добавление?

    Да. Спасибки.

    Оставлен 12 Февраль 2008 в 17:29
  3. Alex Koval написал:

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

    Пиши как получилось и какие плюсы/минусы были найдены! Сам я собирался в ближайщее время попытаться его использовать и будет очень интересно почитать об опыте исплользования.

    Оставлен 12 Февраль 2008 в 18:54
  4. Александр Кошелев написал:

    Пиши как получилось и какие плюсы/минусы были найдены! Сам я собирался в ближайщее время попытаться его использовать и будет очень интересно почитать об опыте исплользования.

    Обязательно напишу, поскольку скоро опять предстоит решать задачу с его применением.

    Оставлен 12 Февраль 2008 в 21:11
  5. Ferroman написал:

    Мне вот интересно - вопрос в конце блог-поста увеличивает таки количество комментариев? А то я смотрю вы активно эту технику используете...

    Оставлен 10 Март 2008 в 23:52
  6. Александр Кошелев написал:

    Мне вот интересно - вопрос в конце блог-поста увеличивает таки количество комментариев? А то я смотрю вы активно эту технику используете...

    Никогда об этом не задумывался:) Задаю вопросы, потому что реально интересно другое мнение и взгляд на проблему со стороны

    Оставлен 10 Март 2008 в 23:59
  7. Ferroman написал:

    Радует, если так. Я смотрю что-то много питонистов-полуночников :) А django-multilingual действительно отличный выбор для мультиязичности, давно использую, много времени сэкономил.

    Оставлен 11 Март 2008 в 00:12
  8. Дмитрий написал:

    Было бы здорово, если б к статье были приложены пару принскринов админки с этим django-multilingual. Хотелось бы без установки понять, как будет выглядеть переключение между различными версиями языка.

    Оставлен 18 Апрель 2008 в 14:04
  9. Александр Кошелев написал:

    Немного не понял, про какое переключение вы говорите.

    Пример. Вот для такой демонстрационной модели:

    class Entry(models.Model):
        date = models.DateTimeField()
    
        class Translation(multilingual.Translation):
            title = models.CharField(maxlength=250)
            text = models.TextField()
    
        def __unicode__(self):
            return self.title
    
        class Admin:
            pass
    

    Получается вот такой интерфейс админки с тремя языками:

    django-multilingual admin screenshot

    Оставлен 18 Апрель 2008 в 17:41
  10. L0rda написал:

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

    Насколько я вижу с введением newforms-admin разработка всех этих проектов закончилась.

    Оставлен 04 Октябрь 2009 в 00:54
  11. Александр Кошелев написал:

    Насколько я вижу с введением newforms-admin разработка всех этих проектов закончилась.

    Не знаю откуда вы эту информацию взяли.

    django-multilingual должен работать как минимум с майским транком Джанги, а значит и с 1.0.

    И конечно newforms-admin смерджили ещё в прошлом году.

    Про другие приложения не осведомлен.

    Оставлен 04 Октябрь 2009 в 01:23