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

4

17

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.

Pearse answered 31/7, 2013 at 1:4 Comment(0)
N
32

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.

Newport answered 31/7, 2013 at 1:19 Comment(1)
That should be configurable in settings.py :)Buyer
C
5

@ppetrid's answer is still correct. However, as of Django 1.6 patterns is no longer available. Change the existing code to this:

from django.conf.urls import patterns

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

You will also get a warning if you leave the '', in the patterns too.

Cortese answered 7/9, 2017 at 3:2 Comment(0)
W
4

In django version 1.8.18 you just need to put False at this variable in settings.py

USE_I18N = False

USE_L10N = False
Wenz answered 15/9, 2017 at 2:49 Comment(0)
M
2

If you want to keep one language in the URL, for instance because you have backlinks in the web with the language code, you can simply take out the other language in settings.py

LANGUAGES = (        
    #('en', gettext('en')),
    ('de', gettext('de')),
)

CMS_LANGUAGES = {        
    'default': {
        'public': True,
        'hide_untranslated': False,
        'redirect_on_fallback': True,
    },
    1: [            
        {
            'public': True,
            'code': 'de',
            'hide_untranslated': False,
            'name': gettext('de'),
            'redirect_on_fallback': True,
        },
        # {
        #     'public': True,
        #     'code': 'en',
        #     'hide_untranslated': False,
        #     'name': gettext('en'),
        #     'fallbacks': ['de'],
        #     'redirect_on_fallback': True,
        # },
    ],
}

That way the URL still shows www.example.com/de/foo.html. In the Example above, that /de/ will be lost, which will render all your URLs in the web meaningless.

Thus, from an SEO perspective, it might not be the best option if you have already built up links with the language code in it.

Max answered 20/5, 2015 at 11:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.