django-modeltranslation-wagtail
.. image:: https://readthedocs.org/projects/django-modeltranslation-wagtail/badge/?version=latest
:target: https://django-modeltranslation-wagtail.readthedocs.io
.. image:: https://badge.fury.io/py/django-modeltranslation-wagtail.svg
:target: https://badge.fury.io/py/django-modeltranslation-wagtail
.. image:: https://circleci.com/gh/benjaoming/django-modeltranslation-wagtail.svg?style=shield
:target: https://circleci.com/gh/benjaoming/django-modeltranslation-wagtail
Keep-it-simple glue between django-modeltranslation and Wagtail.
Features
- Field-based translation for Wagtail using django-modeltranslation
- TODO Makes translated fields easily accessible to the Wagtail admin.
- Sensible to the currently activated language.
- The
Page
model isn't modified (no migrations added to Wagtail), translations of title
, seo_title
and search_description
are local to the translated models.
How to use
You create Wagtail models and activate them with a <yourapp>.translation
module, just like you would with any other modeltranslation-based model.
In Wagtail, it's the active language that decides what language you are editing in your translated model.
For instance, navigating to /en/wagtail/pages/add/<yourapp>/<yourmodel>/<ptr_id>/
will create a new page in English.
Drawback: There is currently no UI for the translation workflow. This means that users have to know that they need to switch /en/
with /fr/
in the URL path after creating an English entry to edit it in French.
When to use this
Actually, you might not want to use this! Consider carefully to use
wagtail-modeltranslation <https://github.com/infoportugal/wagtail-modeltranslation/>
__ as it has
substantially improved by not hard-copying django-modeltranslation
anymore.
If you need to have 1:1 translation for Pages or Snippets in Wagtail, you could use django-modeltranslation.
However, wagtail-modeltranslation
is a complex project that patches a lot of external code and therefore often breaks with the latest versions of Wagtail.
If you only need freeform translation (when pages in the page-tree aren't translated 1:1 but translations exist independently from one another), look no further than either Wagtail's built-in simple_translation <https://docs.wagtail.io/en/latest/reference/contrib/simple_translation.html>
__ or wagtail-localize <https://www.wagtail-localize.org/>
__.
Background
Originally, I was using wagtail-modeltranslation <https://github.com/infoportugal/wagtail-modeltranslation/>
__.
The project has been sparsely maintained, but more seriously, it was monkey-patching Wagtail and using a hard-copy
of the modeltranslation codebase instead of a dependency reference to django-modeltranslation. The latter has
now been restored, which as lowered the motivation for this project.
A few years later, I returned to use wagtail-modeltranslation but once again found myself spending way too much time understanding non-merged PRs etc. To be fair, the project has been maintained in the meantime, but it was lacking behind and I couldn't figure out what to do to use it with the latest version of Wagtail.
This project introduces a bit of naming hell. But remember it like this: django-modeltranslation-wagtail has
wagtail at the end because it depends on django-modeltranslation, which depends on django.
Using django-modeltranslation or wagtail-modeltranslation?
Switching is easy!
Since this project is directly based on django-modeltranslation, the creation of fields in the database and
django migrations remains the same. In case you are switching, just revisit your translation.py
files
and change the imports to point to modeltranslation_wagtail
.