Django Modeltranslation

0.20.2 · active · verified Sun Apr 12

django-modeltranslation is a Django application that allows you to translate fields of your models into multiple languages. It uses a registration approach, dynamically adding translation fields to your models based on settings. The current version is 0.20.2, and it maintains a regular release cadence with patch and minor updates.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates the core setup for django-modeltranslation. It includes the necessary `settings.py` configuration, defines a sample model in `yourapp/models.py`, registers it for translation in `yourapp/translation.py`, and integrates it with the Django admin using `TranslationAdmin` in `yourapp/admin.py`. Remember to run `makemigrations`, `migrate`, and `sync_translation_fields` after setup.

# --- settings.py ---
# Add 'modeltranslation' and your app to INSTALLED_APPS
INSTALLED_APPS = [
    # ... other apps
    'modeltranslation',
    'yourapp', # Your Django app containing translated models
]

# Define the languages available for translation
LANGUAGES = (
    ('en', 'English'),
    ('fr', 'French'),
    # Add other languages as needed
)

# Optional: Configure fallback languages behavior
# FALLBACK_LANGUAGES = {'default': ('en', 'fr'), 'fr': ('en',)}


# --- yourapp/models.py ---
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField(blank=True, null=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)

    def __str__(self):
        return self.name

# --- yourapp/translation.py ---
from modeltranslation.decorators import register
from modeltranslation.translator import TranslationOptions
from .models import Product

@register(Product)
class ProductTranslationOptions(TranslationOptions):
    fields = ('name', 'description',)

# --- yourapp/admin.py ---
from django.contrib import admin
from modeltranslation.admin import TranslationAdmin
from .models import Product

@admin.register(Product)
class ProductAdmin(TranslationAdmin):
    list_display = ('name', 'price',) # 'name' will automatically display the current language
    group_fieldsets = True # Optional: Groups translation fields under tabs in the admin
    # Other Django Admin options can be added here

# --- Post-setup steps ---
# After adding the above code:
# 1. Run database migrations to create translation fields:
#    python manage.py makemigrations yourapp
#    python manage.py migrate
# 2. Synchronize translation fields (crucial for initial setup and field changes):
#    python manage.py sync_translation_fields

# --- Accessing translated data ---
# from django.utils import translation
# product_instance = Product.objects.first()

# with translation.override('en'):
#     print(product_instance.name) # Accesses 'name_en'

# with translation.override('fr'):
#     print(product_instance.name) # Accesses 'name_fr'

# print(product_instance.name_en) # Direct access to English field
# print(product_instance.get_name_fr()) # Helper for specific language

view raw JSON →