Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
161 lines (113 sloc) 4.55 KB

2.4 release notes (IN DEVELOPMENT)

What's new in 2.4

Removed the MultilingualMiddleware

We removed the MultilingualMiddleware. This removed the very ugly monkey patching of the reverse() function as well. As a benefit we now support localization of urls and Apphook urls with standard django helpers.

For django 1.4 more infos can be found here:

If you are still running django 1.3 you are able to archieve the same functionality with django-i18nurl. It is a backport of the new functionality in django 1.4 and can be found here:

What you need to do:

  • Remove the MultilingualMiddleware from your settings.

  • Be sure the LocaleMiddleware is in your settings and that it comes after the SessionMiddleware.

  • Be sure that the cms.urls is included in a i18n_patterns:

    from django.conf.urls.defaults import *
    from django.conf.urls.i18n import i18n_patterns
    from django.contrib import admin
    from django.conf import settings
    urlpatterns = i18n_patterns('',
        url(r'^admin/', include(,
        url(r'^', include('cms.urls')),
    if settings.DEBUG:
        urlpatterns = patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
        url(r'', include('django.contrib.staticfiles.urls')),
    ) + urlpatterns
  • Change your url and reverse calls to language namespaces. We now support the django way of calling other language urls either via '{% language %}' templatetag or via 'activate("de")' function call in views.


    {% url "de:myview" %}


    {% load i18n %}{% language "de" %}
    {% url "myview_name" %}
    {% endlanguage %}
  • reverse urls now return the language prefix as well. So maybe there is some code that adds language prefixes. Remove this code.


:setting:`CMS_LANGUAGES` has be overhauled. It is no longer a list of tuples like the LANGUAGES settings.

An example explains more than thousand words:

        1: [
                'code': 'en',
                'name': gettext('English'),
                'fallbacks': ['de', 'fr'],
                'public': True,
                'hide_untranslated': True,
                'code': 'de',
                'name': gettext('Deutsch'),
                'fallbacks': ['en', 'fr'],
                'public': True,
                'code': 'fr',
                'name': gettext('French'),
                'public': False,
        2: [
                'code': 'nl',
                'name': gettext('Dutch'),
                'public': True,
                'fallbacks': ['en'],
        'default': {
            'fallbacks': ['en', 'de', 'fr'],
            'public': False,
            'hide_untranslated': False,

For more details on what all the parameters mean please refer to the :setting:`CMS_LANGUAGES` docs.

The following settings are not needed any more and have been removed:


Please remove them from your


Was marked deprecated in 2.3 and has now been removed.

Minor improvements

Backwards incompatible changes

New minimum requirements for dependencies

If you are running django 1.3.X you need to install django-i18nurls, if you want multilingual features. The cms.urls needs to be in a i18n url pattern.

Pending deprecations

  • simple_language_changer will be removed in version 2.5. A bugfix makes this redundant as every non managed url will behave like this.
Jump to Line
Something went wrong with that request. Please try again.