This module offers functions and abstract base classes that can be used to store translated models. There isn’t much magic going on here.
Usage example:
class News(models.Model, TranslatedObjectMixin):
active = models.BooleanField(default=False)
created = models.DateTimeField(default=timezone.now)
class NewsTranslation(Translation(News)):
title = models.CharField(max_length=200)
body = models.TextField()
Print the titles of all news entries either in the current language (if available) or in any other language:
for news in News.objects.all():
print news.translation.title
Print all the titles of all news entries which have an english translation:
from django.utils import translation
translation.activate('en')
for news in News.objects.filter(translations__language_code='en'):
print news.translation.title
This manager offers convenience methods.
Only return objects which have a translation into the given language.
Uses the currently active language by default.
Mixin with helper methods.
Return the cache key used to cache this object’s translations so we can purge on-demand
Return a class which can be used as inheritance base for translation models
Returns a new inline type suitable for the Django administration:
from django.contrib import admin from myapp.models import News, NewsTranslation
)
Returns true if current or passed language is the primary language for this site. (The primary language is defined as the first language in settings.LANGUAGES.)
Pass the return value of this function to .transform() to automatically resolve translation objects
The current language is used if language_code isn’t specified.
Extract the short language code from its argument (or return the default language code).
>>> short_language_code('de')
'de'
>>> short_language_code('de-at')
'de'
>>> short_language_code() == short_language_code(settings.LANGUAGE_CODE)
True