Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2011 13:29:13

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Интернационализация

Здравствуйте.
Есть большой проект, требующий интернационализации.
Интересует перевод моделей. Посмотрел 2 приложения http://django-multilingual.googlecode.com/svn/trunk/docs/_build/html/overview.html и http://code.google.com/p/django-modeltranslation/. Но проблема в том, что модели созданы, база данных уже частично заполнена. Первый вариант создает в базе дополнительные таблицы с переводами, тоесть можно обойтись syncdb (если повезет :)), но приходится переписывать все модели. Второй вариант манки патчит модели и создает дополнительные поля в существующих таблицах. Приходится добавлять их самому, (возможно используя что-то типа http://south.aeracode.org/docs/about.html ?? не проверял). Плюс проблема переноса существующих данных в новые таблицы/поля.
Как все это сделать как можно меньшей кровью ?



Отредактировано (Апрель 14, 2011 13:30:54)

Офлайн

#2 Апрель 15, 2011 11:06:40

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

Интернационализация

south и писать свой data migration, помимо мигратора схем (который обычно прекрасно генерится автоматом)

Офлайн

#3 Апрель 29, 2011 14:29:18

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Интернационализация

Общими усилиями решили. Наконец собрался с силами описать решение. Да, south рулит.
Сначала решили использовать multilingual. Она создает дополнительные таблицы с переводами для каждой модели в виде: идентификатор языка | поля, требующие перевода. При этом приходится вносить изменения в каждую переводимую модель. Возникла проблема - multilingual не работает с south. Пришлось патчить multilingual - http://code.google.com/p/django-multilingual/issues/detail?id=111. Потом выяснилось, что multilingual не поддерживает наследование моделей. Первый нагугленный патч не помог. Будем надеяться, что в следующих версиях multilingual все заработает.
Но время поджимало, и решили попробовать modeltranslation. Она манкипатчит модель и создает в таблице для каждого переводимого поля дополнительные поля с переводами для каждого языка. Если переводимых полей много и переводить нужно на несколько десятков языков, то получаются внушительные таблицы. Но плюс в том, что не нужно вносить изменения в модели, нормально работает с south, понимает наследованные модели.
Итог :
1) делаем дамп базы :)
2) подключаем south, читаем доки, делаем initial миграции
3) подключаем одну из описанных библиотек, читаем доки
4) делаем schemamigration, datamigration (если используется MySql, помним, что в случае ошибки с datamigration база назад не откатывается, а застывает как есть)
5) читаем трейсбэки, материмся, критикуем библиотеки, наш проект, начальство, пляшем с бубном, потом разворачиваем базу с дампа, возвращаемся ко второму или треьему пункту…



Отредактировано (Апрель 29, 2011 14:33:39)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version