Django-Transmeta является приложение Django для переводимого контента в модели Django в & NBSP;. Каждый язык хранится и автоматически управляются в другом столбце на уровне базы данных.
Использование Transmeta STRONG>
Создание переводимые модели
Посмотрите на эту модель:
Класс Книга (models.Model):
& NBSP; название = models.CharField (max_length = 200)
& NBSP; описание = models.TextField ()
& NBSP; тело = models.TextField (по умолчанию = '')
& NBSP; цена = models.FloatField ()
Предположим, вы хотите, чтобы сделать описание и тела переводимые. В результате модель после использования Transmeta является:
от Transmeta Transmeta импорта
Класс Книга (models.Model):
& NBSP; __ metaclass__ = Transmeta
& NBSP; название = models.CharField (max_length = 200)
& NBSP; описание = models.TextField ()
& NBSP; тело = models.TextField (по умолчанию = '')
& NBSP; цена = models.FloatField ()
& NBSP; класс Мета:
& NBSP; перевести = ('описание', 'тело',)
Убедитесь, что вы установили по умолчанию и доступные языки на вашем settings.py в:
Language_code = '' эс
ugettext = лямбда S: S # манекен ugettext функции, как говорят документы Джанго
ЯЗЫКИ = (
& NBSP; ('эс ", ugettext (« испанский »)),
& NBSP; ('ан', ugettext («Английский»)),
)
Это SQL генерируется с помощью команды ./manage.py sqlall:
НАЧАТЬ;
CREATE TABLE "fooapp_book" (
& NBSP; "ID" серийный NOT NULL PRIMARY KEY,
& NBSP; "название" VARCHAR (200) NOT NULL,
& NBSP; "description_en" текст,
& NBSP; "description_es" текст NOT NULL,
& NBSP; "body_es" текст NOT NULL,
& NBSP; "body_en" текст NOT NULL,
& NBSP; "цена" двойной точности NOT NULL
)
;
COMMIT;
Примечания: * Transmeta создает один столбец для каждого языка. Не беспокойтесь о необходимости новых языков в будущем, Transmeta решает эту проблему для вас. * Если поле является пустым = False и не имеет значения по умолчанию, Transmeta будет создать только один NOT NULL поле для языка по умолчанию. Поля для других дополнительных языках, будет обнуляемым. Кроме того, основным языком должны будут в админ приложение, в то время как другие поля будут опционально (с пустым = True). Это было сделано потому, что нормальный подход для перевода контента сначала добавить содержимое в основной язык, а потом у переводчики переводят на другие языки. * Вы можете использовать ./manage.py SyncDB создать схему базы данных.
Играя в оболочке питона
Transmeta создает одно поле для каждого из доступных языков для каждого переводимого поля, заданного в модели. Имена полей с суффиксом языка коротких кодов, например: description_es, description_en, и так далее. Кроме того, он создает поле_формы добытчика для получения значения поля в активной языке.
Давайте играть немного в оболочке Python лучше всего понять, как это работает:
& GT; & GT; & GT; от fooapp.models импортировать книги
& GT; & GT; & GT; б = Book.objects.create (description_es = u'mi Descripcion ", description_en = u'my описание ')
& GT; & GT; & GT; b.description
u'my описание '
& GT; & GT; & GT; от django.utils.translation Активировать импорта
& GT; & GT; & GT; Включить ("ES")
& GT; & GT; & GT; b.description
u'mi Descripcion "
& GT; & GT; & GT; b.description_en
u'my описание '
Добавление новых языков
Если вам нужно добавить новые языки в существующих, вам нужно только изменить свой settings.py и попросить Transmeta синхронизировать БД снова. Например, чтобы добавить французский нашему проекту, необходимо добавить его в ЯЗЫКОВ в settings.py:
ЯЗЫКИ = (
& NBSP; ('эс ", ugettext (« испанский »)),
& NBSP; ('ан', ugettext («Английский»)),
& NBSP; ("FR", ugettext ("французский")),
)
И выполнить специальную команду sync_transmeta_db:
& NBSP; ./ manage.py sync_transmeta_db
Пропавших без вести языков в поле "Описание" от модели "fooapp.book": пт
SQL для синхронизации "fooapp.book" схемы:
& NBSP; ALTER TABLE "fooapp_book" Добавить столбец "description_fr" текст
Вы уверены, что вы хотите, чтобы выполнить предыдущий SQL: (Y / N) [N]: у
Выполнение SQL-... Готово
Пропавших без вести языков в "тело" поля от модели "fooapp.book": пт
SQL для синхронизации "fooapp.book" схемы:
& NBSP; ALTER TABLE "fooapp_book" Добавить столбец "body_fr" текст
Вы уверены, что вы хотите, чтобы выполнить предыдущий SQL: (Y / N) [N]: у
Выполнение SQL-... Готово
И готово!
Добавление новых полей переводимые
Теперь представьте себе, что после нескольких месяцев, используя это веб-приложение (с много книг, созданный), вам нужно сделать книгу цена переводимые (например, потому что книга цена зависит от валюты).
Чтобы добиться этого, сначала добавьте цену транслируемую список полей модели:
Класс Книга (models.Model):
& NBSP; ...
& NBSP; цена = models.FloatField ()
& NBSP; класс Мета:
& NBSP; перевести = ('описание', 'тело', '', цена)
Все, что осталось теперь, вызвав команду sync_transmeta_db обновить DB схемы:
& NBSP; ./ manage.py sync_transmeta_db
Доступные языки:
& NBSP; 1. испанский
& NBSP; 2. английский
Выберите язык, на котором поставить текущие непереведенные данных.
Что язык текущих данных? (1-2): 1
Пропавших без вести языков в "стоимость" от модели "fooapp.book": ES, EN
SQL для синхронизации "fooapp.book" схемы:
& NBSP; ALTER TABLE "fooapp_book" Добавить столбец "price_es" двойной точности
& NBSP; UPDATE "fooapp_book" SET "price_es" = "цена"
& NBSP; ALTER TABLE "fooapp_book" ALTER колонке "price_es" SET NOT NULL
& NBSP; ALTER TABLE "fooapp_book" Добавить столбец "price_en" двойной точности
& NBSP; ALTER TABLE "fooapp_book" DROP COLUMN "цену"
Вы уверены, что вы хотите, чтобы выполнить предыдущий SQL: (Y / N) [N]: у
Выполнение SQL-... Готово
Что, черт возьми, эта команда делает?
Команда sync_transmeta_db не только создает новые столбцы базы данных для нового транслируемую области ... это скопировать данные из поля Старая цена на один из языков, и поэтому команда попросит вас языке назначения поля для фактических данных.
Интеграция Админ
Transmeta прозрачно отображает все переводимые поля в интерфейсе администратора. Это легко, потому что модели имеют на самом деле многих областях (по одному для каждого языка).
Изменение поля формы в админ довольно распространенная задача, и Transmeta включает в себя функцию полезности canonical_fieldname применять эти изменения для всех полей язык сразу. Это лучше всего объяснить на примере:
от Transmeta canonical_fieldname импорта
класс BookAdmin (admin.ModelAdmin):
& NBSP; четкости formfield_for_dbfield (самостоятельно, db_field, ** kwargs):
& NBSP; поле = супер (BookAdmin, само) .formfield_for_dbfield (db_field, ** kwargs)
& NBSP; db_fieldname = canonical_fieldname (db_field)
& NBSP; если db_fieldname == 'описание':
& NBSP; # это относится ко всем * поля description_
& NBSP; field.widget = MyCustomWidget ()
& NBSP; Элиф field.name == 'body_es ":
& NBSP; # это относится только к body_es области
& NBSP; field.widget = MyCustomWidget ()
& NBSP; возвращение поле
Особенности
- Автоматическое создание схемы с переводимых полей.
- переводимые поля интегрированы в интерфейс администратора в Django.
- Команда синхронизации схемы базы данных, чтобы добавить новые переводимые поля и новые языки.
Что нового В этом выпуске:
- Добавлена функция get_mandatory_fieldname.
Что нового в версии 0.6.9:
- Поддержка в методе get_field_language для имен полей с подчеркивания
Что нового в версии 0.6.8:
- Исправлена ошибка мало в командной sync_transmeta_db (UnboundLocalError: локальная переменная 'F' обращаться до назначения)
Что нового в версии 0.6.7:
- Изменение представления (verbose_name) из Transmeta этикеток
Что нового в версии 0.6.6:
- Улучшения и удобство в командной sync_transmeta_db
- исправить некоторые ошибки
- Документация
Что нового в версии 0.6.5:
- Улучшения и удобство в командной sync_transmeta_db
- Работает с последней Django (команда sync_transmeta_db)
- Работает с MySQL (команда sync_transmeta_db)
Что нового в версии 0.6.4:
- ошибки Исправления с наследованием в моделях.
Что нового в версии 0.6.3:
- Разрешить использовать настройки TRANSMETA_LANGUAGES.
- Добавлена два варианта sync_transmeta_db: -y (да предположить на всех) и -d (код языка по умолчанию)
Что нового в версии 0.6.2:
- Работает при локаль по умолчанию есть варианты написания как эс-ES или EN-US.
Требования
- Джанго
- Python
Комментарии не найдены