Django Modeltranslation

django-modeltranslation позволяет легко добавить поддержку переводов в существующие Django модели.

Установка

1# Установка пакета
2pip install django-modeltranslation
1# Или через Poetry
2poetry add django-modeltranslation

Настройка

 1# settings.py
 2INSTALLED_APPS = [
 3    'modeltranslation',
 4    'your_app',  # должен быть после modeltranslation
 5]
 6
 7LANGUAGES = [
 8    ('en', 'English'),
 9    ('ru', 'Русский'),
10]
11
12MODELTRANSLATION_DEFAULT_LANGUAGE = 'en'

Регистрация переводов

1# translation.py
2from modeltranslation.translator import translator, TranslationOptions
3from .models import Book
4
5class BookTranslationOptions(TranslationOptions):
6    fields = ('title', 'description')
7
8translator.register(Book, BookTranslationOptions)

Использование в моделях

 1# models.py
 2class Book(models.Model):
 3    title = models.CharField(max_length=200)
 4    description = models.TextField()
 5
 6# Автоматически создаются поля:
 7# title_en, title_ru, description_en, description_ru
 8
 9# Использование
10book = Book.objects.create(
11    title_en='Python Programming',
12    title_ru='Программирование на Python',
13    description_en='Learn Python programming',
14    description_ru='Изучите программирование на Python'
15)

Миграция существующих данных

1# Создание миграций
2python manage.py makemigrations
3
4# Обновление полей переводов
5python manage.py update_translation_fields
6
7# Синхронизация переводов
8python manage.py sync_translation_fields

FAQ

Q: Как мигрировать существующие данные?
A: Используй команду update_translation_fields.

Q: Можно ли переводить админку?
A: Да, используй ModelAdmin с переводами.