Skip to main content

A content translation framework for django integrated automatically in the normal ORM. Removes the pain of having to think about translations in a django project.

Project description

Model translations made easy.

This project adds support for model translations in Django. It is designed to be unobtrusive, efficient and reliable. On the technical side, it uses an automatically created Translations Model to store translatable fields in arbitrary languages with a foreign key to the main model, enabling fast queries.

Started in 2011, hvad has grown mature and is now used on large scale applications.

Quick links:

Features

  • Simple - only 3 new queryset methods.

  • Natural - use Django ORM as usual, it just became language aware.

  • Fast - no additional queries for reads, just an inner join to an indexed key.

  • Complete - relationships, custom managers and querysets, proxy models, and abstract models.

  • Batteries included - translation-enabled forms and admin are provided.

  • Reliable - more than 300 test cases and counting. coverage build

  • Compatible with Django 1.4 to 1.8, running Python 2.7, 3.3 or 3.4.

Example Uses

Declaring a translatable Book model:

class Book(TranslatableModel):
    author = models.ForeignKey(Author)
    release = models.Date()

    translations = TranslatedFields(
        title = models.CharField(max_length=250)
    )

Thus, only the title will vary based on the language. Release date and author are shared among all languages. Let’s now create a Book instance:

# The recommended way:
book = Book.objects.language('en').create(
    author = Author.objects.get(name='Antoine de Saint Exupéry'),
    release = datetime.date(1943, 4, 6),
    title = "The Little Prince",
)

# Also works
book = Book(language_code='en')
book.author = Author.objects.get(name='Antoine de Saint Exupéry')
book.release = datetime.date(1943, 4, 6)
book.title = "The Little Prince"
book.save()

Providing some translations:

book.translate('fr')
book.title = "Le Petit Prince"
book.save()
book.translate('de')
book.title = "Der kleine Prinz"
book.save()

Every call to translate() creates a new translation from scratch and switches to that translation; save() only saves the latest translation. Let’s now perform some language-aware queries:

Book.objects.all()

Compatible by default: returns all objects, without any translated fields attached. Starting from v1.0, default behavior can be overriden to work like next query:

Book.objects.language().all()

Returns all objects as translated instances, but only the ones that are translated into the currect language. You can also specify which language to get, using e.g.:

Book.objects.language("en").all()

Usual queryset methods work like they always did: let’s get all books as translated instances, filtering on the title attribute, returning those that have Petit Prince in their French title, ordered by publication date (in their French edition):

Book.objects.language("fr").filter(title__contains='Petit Prince').order_by('release')

Other random examples:

# last German book published in year 1948
Book.objects.language("de").filter(release__year=1948).latest()

# other books from the same author as mybook. Cache author as well.
Book.objects.language().select_related('author').filter(author__books=mybook)

# books that have "Django" in their title, regardless of the language
Book.objects.language('all').filter(title__icontains='Django')

More examples in the quickstart guide.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

django-hvad-1.2.1.zip (131.6 kB view details)

Uploaded Source

django-hvad-1.2.1.tar.gz (99.5 kB view details)

Uploaded Source

File details

Details for the file django-hvad-1.2.1.zip.

File metadata

  • Download URL: django-hvad-1.2.1.zip
  • Upload date:
  • Size: 131.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for django-hvad-1.2.1.zip
Algorithm Hash digest
SHA256 83d8b20e940691c452947d9e06f85fe9bd8e3e9deb60bc2c0a5da836588a9ca9
MD5 b6b1e4f41e7735a3f23d445a1ca7b122
BLAKE2b-256 c86ebbcb52b63856c543687f76a807943c39f954c85dd5d3251f95b9ca2bf168

See more details on using hashes here.

Provenance

File details

Details for the file django-hvad-1.2.1.tar.gz.

File metadata

  • Download URL: django-hvad-1.2.1.tar.gz
  • Upload date:
  • Size: 99.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for django-hvad-1.2.1.tar.gz
Algorithm Hash digest
SHA256 9d0d568c8a7f60eb5ef483ffda09d2fdbbd57acb1395e1adcb41d3637d7a0fd4
MD5 ff12a13275a399ccdbd20aea6736d5a1
BLAKE2b-256 c708684b6cbe998941cd1fae2885f5c21d0a0232d05ce8c72b52a512835e6483

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page