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.
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.
@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.
In django version 1.8.18 you just need to put False
at this variable in settings.py
USE_I18N = False
USE_L10N = False
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With