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=datetime.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
admin.site.register(News,
inlines=[
admin_translationinline(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.)
Extract the short language code from its argument (or return the default language code).
>>> from django.conf import settings
>>> short_language_code('de')
'de'
>>> short_language_code('de-at')
'de'
>>> short_language_code() == short_language_code(settings.LANGUAGE_CODE)
True