# Modeltranslation

The modeltranslation application is used to translate dynamic content of existing Django models to an arbitrary number of languages without having to change the original model classes. It uses a registration approach (comparable to Django’s admin app) to be able to add translations to existing or new projects and is fully integrated into the Django admin backend.

The advantage of a registration approach is the ability to add translations to models on a per-app basis. You can use the same app in different projects, may they use translations or not, and you never have to touch the original model class.

## Features

- Add translations without changing existing models or views

- Translation fields are stored in the same table (no expensive joins)

- Supports inherited models (abstract and multi-table inheritance)

- Handle more than just text fields

- Django admin integration

- Flexible fallbacks, auto-population and more!

For the latest documentation, visit https://django-modeltranslation.readthedocs.io/en/latest/.

## Table of Contents

- Installation
  - Requirements
  - Using Pip
  - Using the Source
- Setup
- Configuration
  - Required Settings
  - Advanced Settings
- Registering Models for Translation
  - `TranslationOptions` fields inheritance
  - Changes Automatically Applied to the Model Class
  - Required fields
- Per-Language Field Options (`field_options`)
  - Basic usage
  - The `'default'` key
  - Multiple kwargs
  - Language code format
  - `TranslationOptions` attributes reference
  - Supported Fields Matrix
- Accessing Translated and Translation Fields
  - Rules for Translated Field Access
  - Examples for Translated Field Access
  - Multilingual Manager
  - Falling back
  - The State of the Original Field
- ModelForms
  - Formfields and nullability
- Django Admin Integration
  - Tweaks Applied to the Admin
  - TranslationAdmin in Combination with Other Admin Classes
  - Admin Inlines
  - Using Tabbed Translation Fields
  - `TranslationAdmin` Options
- Management Commands
  - The `update_translation_fields` Command
  - The `sync_translation_fields` Command
  - The `loaddata` Command
- Caveats
  - Accessing Translated Fields Outside Views
  - Using in combination with `django-audit-log`
  - Using in combination with `django-rest-framework`
  - Translating `ManyToManyField` fields

- How to Contribute
- Related Projects
- ChangeLog

## Authors

### Core Committers

- Peter Eschler <peschler@gmail.com> (retired)

- Dirk Eschler <eschler@gmail.com>

- Jacek Tomaszewski <jacek.tomek@gmail.com>

### Contributors

- Carl J. Meyer

- Jaap Roes

- Bojan Mihelac

- Sébastien Fievet

- Bruno Tavares

- Zach Mathew (of django-linguo, initial author of `MultilingualManager`)

- Mihai Sucan

- Benoît Bryon

- Wojtek Ruszczewski

- Chris Adams

- Dominique Lederer

- Braden MacDonald

- Karol Fuksiewicz

- Konrad Wojas

- Bas Peschier

- Oleg Prans

- Francesc Arpí Roca

- Mathieu Leplatre

- Thom Wiggers

- Warnar Boekkooi

- Alex Marandon

- Fabio Caccamo

- Vladimir Sinitsin

- Luca Corti

- Morgan Aubert

- Mathias Ettinger

- Daniel Loeb

- Stephen McDonald

- Lukas Lundgren

- zenoamaro

- oliphunt

- Venelin Stoykov

- Stratos Moros

- Benjamin Toueg

- Emilie Zawadzki

- Virgílio N Santos

- PetrDlouhy

- dmarcelino

- GreyZmeem

- Hugo Defrance

- And many more … (if you miss your name here, please let us know!)