django CMS excels in its multilingual support, and can be configured to handle a vast range of different requirements. Its behaviour is flexible and can be controlled at a granular level in CMS_LANGUAGES. Other Internationalisation and localisation (I18N and L10N) settings offer further control.

See How to serve multiple languages on how to set up a multilingual django CMS project.


Multilingual URLs require the use of i18n_patterns(). For more information about this see the official Django documentation on the subject. Multilingual URLs describes what you need to do in a django CMS project.

How django CMS determines which language to serve#

django CMS uses a number of standard Django mechanisms to choose the language for the user, in the following order of preference:

  • language code in the URL - for example, (when multilingual URLs are enabled)

  • language stored in the browsing session

  • language stored in a cookie from a previous session

  • language requested by the browser in the Accept-Language header

  • the default LANGUAGE_CODE in the site’s settings

More in-depth documentation about this is available at