Как правило, любой современный сайт хранит информацию в базе данных. Для перевода статического текста в шаблонах и сообщениях, 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 файлы, чтобы создать закладки-переключели для языков.

Русский
Клас!