The road to multilingual support
Sept. 18, 2013 in news
In the current git-versions of django-fluent, multilingual support has been added. The translation support is based on django-parler.
Our original plan was to use django-hvad as backend module. However, this turned out to be very difficult. The sad truth is that while django-hvad has a nice admin interface, table layout and model API, it also overrides much of the default behavior of querysets, the admin and model metaclasses. Currently, this prevents combining django-hvad with django-polymorphic or django-mptt, which are both used in django-fluent-pages.
A fresh start...
When investigating other multilingual packages, they either appeared to be outdated, store translations in the same table (too inflexible for us) or only provided a model API. Hence, there was a need for a new solution, using a simple, crude but effective API.
To get things started, multilingual support was coded directly within django-fluent-pages, while keeping a future django-hvad transition in mind. Instead of doing metaclass operations, the "shared model" just proxied all attributes to the translated model (all manually constructed). Queries just had to be performed using.filter(translations__title=..). This proved to be a sane solution and quickly it turned out that this code deserved a separate package. Some other modules (i.e. blogging, and shared contents) needed this functionality too.
..leading to django-parler
End of the story: we've created a new package; django-parler. As the tagline states, it easily translates "cheese omelet" into "omelette du fromage". :-) This package is an attempt to combine the best of both worlds; the API simplicity of django-hvad with the crude, but effective solution of proxying translated attributes. And yes, we've added some metaclass magic too - to make life easier - without loosing the freedom of manually using the API at your will.