Django Garnett – simple multilingual models for Django
github.com
github.com
It allows clients to add and remove languages on-the-fly and means app developers only have to add a middleware and don’t have to change their Django ORM code very much at all.
We’re going to do a big engineering post on it, but in a huge code base, apart from the effort of building this library, and some UX design for the language switcher, it was a relatively painless process converting a monolingual app into a multilingual one.
We have a fun demo site that shows it in action here: https://django-garnett.herokuapp.com/
That means there's a bit more overhead while loading (and you can't exclude unneeded language fields), but it allows dynamically changing languages during runtime without needing a migration.
Other libraries had other similar contraints - such as languages stored in external tables, or needing special querysets to access languages.
Garnett was designed to be an (almost) seemless drop-in that fit into the Django ORM without altering code or data too much.