Search code examples
djangomultilingualdjango-cms

How to remove the language identifier from django-cms 2.4 URLs?


I have followed the tutorial to make a new Django-CMS (2.4) site. I am only using a single language (English).

There is an automatic redirect to include the language identifier '/en/' in my site's URLs. How do I remove it?

thanks.


Solution

  • Option 1:

    Set USE_I18N = False in your settings file.

    Django’s internationalization hooks are on by default... If you don’t use internationalization, you should take the two seconds to set USE_I18N = False in your settings file. [Django documentation:Translation]

    The internationalization is "inherited" from Django. Django-cms 2.4 uses Django 1.5 which supports internationalization and the use of USE_I18N flag. The flag has been used in all successive django releases.

    Option 2:

    replace this pattern registration:

    urlpatterns = i18n_patterns('',
     url(r'^admin/', include(admin.site.urls)),
     url(r'^', include('cms.urls')),
    )
    

    with this:

    from django.conf.urls import patterns
    
    urlpatterns = patterns('',
      url(r'^admin/', include(admin.site.urls)),
      url(r'^', include('cms.urls')),
    )
    

    The tutorial you pointed to uses the i18n_patterns method which does exactly this: prepends the language code to your urls.

    Also note you can safely remove 'django.middleware.locale.LocaleMiddleware' and 'cms.middleware.language.LanguageCookieMiddleware' from your MIDDLEWARE_CLASSES if you will not use multiple languages.