Мультиязычность в Django — переводим модели

Как правило, любой современный сайт хранит информацию в базе данных. Для перевода статического текста в шаблонах и сообщениях, Django использует gettext, извлекая нужный перевод из заранее подготовленного po файла.

Для перевода информации в базе данных, используемую Django, вы можете или заранее задать структуру, предусматривающую нужную языки, или воспользоваться приложением modeltranslation, которая позволяет перевести нужные поля модели, не меняя саму модель и структуру базы данных.

Подробно про перевод шаблонов и создание файлов перевода —http://itman.in/django-translation/. В данной статье описан вариант перевода моделей с помощью django-modeltranslation.

Установка django-modeltranslation

Для установки modeltranslation выполните команду

pip install django-modeltranslation

Добавьте приложение в раздел INSTALLED_APPS файла settings.py:

INSTALLED_APPS = (
    ...
    'modeltranslation',
)

Также добавьте в settings.py список языков, переводы на которые будут доступны и  язык по-умолчанию

# список доступных языков
LANGUAGES = (
    ('ru', 'Russian'),
    ('uk', 'Ukrainian'),
)

MODELTRANSLATION_DEFAULT_LANGUAGE = 'ru'

Создайте файл с описанием перевода для ваших моделей

В каталоге приложения, которое вы собираетесь перевести, создайте файл translation.py:

# -*- coding: utf-8 -*-

from modeltranslation.translator import translator, TranslationOptions
from pages.models import Page

class PageTranslationOptions(TranslationOptions):
    """
    Класс настроек интернационализации полей модели Page.
    """

    fields = ('title', 'seo_description', 'content', )

translator.register(Page, PageTranslationOptions)

В данном случае мы сообщаем modeltranslation, что нужно для модели Page создать дополнительные поля для перевода title, seo_description и content.

После регистрации модели для перевода нужно обновить базу данных — чтобы она включала поля с выбранными языками. Это можно сделать удалив базу и выполнив
./manage.py syncdb или воспользоваться south для миграции базы с данными

Зарегистрируйте в админке переведенную модель

В файле admin.py нужно зарегистрировать новый класс, унаследованный от TranslationAdmin.

Это можно выглядеть так:

from django.contrib import admin
from modeltranslation.admin import TranslationAdmin
from pages.models import Page

class PageAdmin(TranslationAdmin):
    pass

admin.site.register(Page, PageAdmin)

При этом в админке поля для всех языков будут выведены на одной странице. Чтобы улучшить вид админки и упростить работу с переводами, можно использовать класс TabbedTranslationAdmin вместо TranslationAdmin.

Он подключит необходимые CSS и Javascript файлы, чтобы создать закладки-переключели для языков.

modeltranslation-tabs

Мультиязычность в Django — переводим модели: 2 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *