Django Simple Multilingual Support for Models.
Project description
Django Simple Multilingual Support for models
What is it?
An inefficient, minimal and utterly simple approach to model translation based on foreign key relations and attribute proxying.
The project code is forked from the original project by yazzgoth on Google code.
Usage
When a property of a translation is set for the language currently selected in this thread, it will automatically yield the right value of that property for the current language. So for a book which has a tranlation in en, requesting book.title from within a template from a client of which the detected language is English, will simply yield the English translation of the book title.
models.py:
from multilingual_model.models import MultilingualModel, MultilingualTranslation class BookTranslation(MultilingualTranslation): class Meta: unique_together = ('parent', 'language_code') parent = models.ForeignKey('Book', related_name='translations') title = models.CharField(max_length=32) description = models.TextField() class Book(MultilingualModel): ISBN = models.IntegerField() >>> book = Book(ISBN="1234567890") >>> book.save() >>> book_en = BookTranslation(language_code='en') >>> book_en.title = "Django for Dummies" >>> book_en.description = "Django described in simple words." >>> book_en.parent = book >>> book_en.save() >>> book_pl = BookTranslation(language_code='pl') >>> book_pl.title = "Django dla Idiotow" >>> book_pl.description = "Django opisane w prostych slowach" >>> book_pl.parent = book >>> book_pl.save() >>> # now here comes the magic >>> book.title_en u'Django for Dummies' >>> book.description_pl u'Django opisane w prostych slowach'
Compatibility
Currently Django 1.4 through 1.6 is maintained for Python 2.6, 2.7 and 3.3.
Admin integration
admin.py:
from django.contrib import admin import models from multilingual_model.admin import TranslationStackedInline class BookTranslationInline(TranslationStackedInline): model = models.BookTranslation class BookAdmin(admin.ModelAdmin): list_display = ["ISBN"] inlines = [BookTranslationInline] admin.site.register(models.Book, BookAdmin)
__unicode__ representation using translated field
In order to make translation of the __unicode__ function work, some magic is required. A helper method for this is included by default, allowing you to do the following:
def __unicode__(self): return self.unicode_wrapper('title', default='Unnamed')
Upgrade from previous versions
If you upgrade from previous versions you need to be aware of two important facts:
The Model MultilingualTranslation in multilingual_model.models has a field named “language_code”. In prior versions the max_length was set to 5. This has been changed to 7 to allow longer language codes to be valid. This could break validation in certain situations. A way to reflect this change on the level of the database is to manually change the database table of the models that are translated.
In admin.py the class TranslationInline has been renamed to TranslationStackedInline. TranslationInline will be deprecated soon. Additionally to TranslationStackedInline there now is a TranslationTabularInline.
Settings
- MULTILINGUAL_FAIL_SILENTLY
Return None instead of raising a ValueError when a translation for the current language cannot be found and MULTILINGUAL_FALL_BACK_TO_DEFAULT is False. Defaults to the inverse of DEBUG.
- MULTILINGUAL_FALL_BACK_TO_DEFAULT
Whether or not to fall back to MULTILINGUAL_LANGUAGE_CODE when no translation can be found for the currently activated language. Defaults to True.
- MULTILINGUAL_LANGUAGE_CODE
The default language used when MULTILINGUAL_FALL_BACK_TO_DEFAULT is True. Defaults to LANGUAGE_CODE.
- MULTILINGUAL_LANGUAGES
Set of languages available for translation. Defaults to LANGUAGES.
- MULTILINGUAL_HIDE_LANGUAGE
Hide functionality for selecting the language and removing translations in the admin. Defaults to True when MULTILINGUAL_LANGUAGES contains of a single language.
License
This application is released under the GNU Affero General Public License version 3.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django-multilingual-model-0.6.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7b2057c4d9abcda77190fdb58b15d940e7838100a524b298681ea98b5c94bbb |
|
MD5 | 7c00536ab0e89d2d19562c537db96ac0 |
|
BLAKE2b-256 | 6c09ff01f514ea1aba703962eb05f38ce1bc92f1d7df1dfd008f81da7cef866f |
Hashes for django_multilingual_model-0.6-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 35c17bb70d885125b5f4a407d26d6b8cc2decaf0244493f5a695804f32f1097d |
|
MD5 | 87a63b87d3eaf74c891cc28c02e941fa |
|
BLAKE2b-256 | 24bc534f8f9387b471229954166ed4f2e1c31fbbd0f135ebaf9ef1126a77a714 |