Simple app containing a mixin model that integrates modeltranslation (https://github.com/deschler/django-modeltranslation) into wagtail panels system.
Find a file
2019-11-11 10:41:14 +01:00
docs Updated docs; 2019-03-21 17:10:58 +00:00
wagtail_modeltranslation Rewrote JavaScript to be compatible with EcmaScript < 6. Clarified js docs in version_compare.js 2019-11-11 10:41:14 +01:00
.gitignore .gitignore updated 2019-02-05 11:00:01 +00:00
.travis.yml Added tests for new Wagtail 2.7 and Python 3.8 2019-11-08 16:39:00 +01:00
AUTHORS.rst Updated to work with Wagtail 2.7. 2019-11-08 16:39:17 +01:00
CHANGELOG.txt Updated docs; 2019-03-21 17:10:58 +00:00
Makefile new option to skip the version bump 2018-04-16 13:37:26 +02:00
MANIFEST.in Added the templates directory to the installation 2019-09-09 10:19:27 +01:00
Pipfile Adds dependencies for release process 2019-06-06 17:18:27 +01:00
Pipfile.lock Adds dependencies for release process 2019-06-06 17:18:27 +01:00
PKG-INFO Updated to work with Wagtail 2.7. 2019-11-08 16:39:17 +01:00
README.rst Update README.rst 2018-06-26 11:46:46 +00:00
runtests.py #191, drop support for Wagtail < 1.8 2018-04-24 16:52:15 +01:00
screenshot.png Added package info. 2017-03-06 17:27:39 +00:00
setup.cfg Updated to work with Wagtail 2.7. 2019-11-08 16:39:17 +01:00
setup.py Updated to work with Wagtail 2.7. 2019-11-08 16:39:17 +01:00
tox.ini Added tests for new Wagtail 2.7 and Python 3.8 2019-11-08 16:39:00 +01:00

================
Wagtail Modeltranslation
================

This app is built using core features of django-modeltranslation: https://github.com/deschler/django-modeltranslation

It's an alternative approach for i18n support on Wagtail CMS websites.

The wagtail-modeltranslation application is used to translate dynamic content of
existing Wagtail models to an arbitrary number of languages, without having to
change the original model classes. It uses a registration approach (comparable
to Django's admin app) to add translations to existing or new projects and is
fully integrated into the Wagtail admin UI.

The advantage of a registration approach is the ability to add translations to
models on a per-app basis. You can use the same app in different projects,
whether or not they use translations, and without touching the original
model class.


.. image:: https://github.com/infoportugal/wagtail-modeltranslation/blob/master/screenshot.png?raw=true
    :target: https://github.com/infoportugal/wagtail-modeltranslation/blob/master/screenshot.png?raw=true


Features
========

- Add translations without changing existing models or views
- Translation fields are stored in the same table (no expensive joins)
- Supports inherited models (abstract and multi-table inheritance)
- Handle more than just text fields
- Wagtail admin integration
- Flexible fallbacks, auto-population and more!
- Default Page model fields has translatable fields by default
- StreamFields are now supported!


Caveats
======

:code:`wagtail-modeltranslation` patches Wagtail's :code:`Page` model with translation fields
:code:`title_xx`, :code:`slug_xx`, :code:`seo_title_xx`, :code:`search_description_xx` and :code:`url_path_xx` where "xx" represents the language code for each translated language. This
is done without migrations through command :code:`sync_page_translation_fields`. Since :code:`Page` model belongs to
Wagtail it's within the realm of possibility that one day Wagtail may add a conflicting field to :code:`Page` thus interfering with :code:`wagtail-modeltranslation`.

Wagtail's :code:`slugurl` tag does not work across languages. :code:`wagtail-modeltranslation` provides a drop-in replacement named :code:`slugurl_trans` which by default takes the slug parameter in the default language.

Quick start
===========

1. Install :code:`wagtail-modeltranslation`::

    pip install wagtail-modeltranslation

2. Add 'wagtail_modeltranslation' to your ``INSTALLED_APPS`` setting like this (before all apps that you want to translate)::

    INSTALLED_APPS = (
        ...
        'wagtail_modeltranslation',
        'wagtail_modeltranslation.makemigrations',
        'wagtail_modeltranslation.migrate',
    )

3. Add 'django.middleware.locale.LocaleMiddleware' to ``MIDDLEWARE`` on your ``settings.py``::

    MIDDLEWARE = (
        ...
        'django.middleware.locale.LocaleMiddleware',  # should be after SessionMiddleware and before CommonMiddleware
    )

4. Enable i18n on ``settings.py``::

    USE_I18N = True

5. Define available languages on ``settings.py``::

    from django.utils.translation import gettext_lazy as _

    LANGUAGES = (
        ('pt', _('Portuguese')),
        ('es', _('Spanish')),
        ('fr', _('French')),
    )

6. Create ``translation.py`` inside the root folder of the app where the model you want to translate exists::

    from .models import Foo
    from modeltranslation.translator import TranslationOptions
    from modeltranslation.decorators import register

    @register(Foo)
    class FooTR(TranslationOptions):
        fields = (
            'body',
        )

7. Run :code:`python manage.py makemigrations` followed by :code:`python manage.py migrate` (repeat every time you add a new language or register a new model)

8. Run :code:`python manage.py sync_page_translation_fields` (repeat every time you add a new language)

9. If you're adding :code:`wagtail-modeltranslation` to an existing site run :code:`python manage.py update_translation_fields`


Upgrade considerations (v0.8)
======================

This version includes breaking changes as some key parts of the app have been re-written:

- The most important change is that ``Page`` is now patched with translation fields.
- ``WAGTAILMODELTRANSLATION_ORIGINAL_SLUG_LANGUAGE`` setting has been deprecated.

To upgrade to this version you need to:

- Replace the ``WagtailTranslationOptions`` with ``TranslationOptions`` in all translation.py files
- Run :code:`python manage.py sync_page_translation_fields` at least once to create ``Page``'s translation fields
- Replace any usages of Wagtail's ``{% slugurl ... %}`` for :code:`wagtail-modeltranslation`'s own ``{% slugurl_trans ... %}``
- While optional it's recommended to add ``'wagtail_modeltranslation.makemigrations'`` to your INSTALLED_APPS. This will override Django's ``makemigrations`` command to avoid creating spurious ``Page`` migrations.

Upgrade considerations (v0.6)
======================

This version has some important changes as there was a refactoring to include django-modeltranslation as a dependency instead of
duplicating their code in our version. This allow us to focus on Wagtail admin integration features as django-modeltranslation is
very well mantained and is very quickly to fix problems with the latest Django versions. This way we also keep all the django-modeltranslation
features (if you want you can also customize django-admin, for example). We also provide a new class to create the translation options classes: **WagtailTranslationOptions**
Most of the changes are related to imports as they change from wagtail-modeltranslation to modeltranslation.

To upgrade to this version you need to:

- Replace the ``TranslationOptions`` with ``WagtailTranslationOptions`` in all translation.py files
- The import of the register decorator is now ``from modeltranslation.decorators import register``
- The import of translator is now ``from modeltranslation.translator import translator``


Project Home
------------
https://github.com/infoportugal/wagtail-modeltranslation

Documentation
-------------
http://wagtail-modeltranslation.readthedocs.io/