Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django i18n_patterns hide default lang_code from url

I'm using the i18n_patterns to add a prefix of current lang_code to my url.

urlpatterns += i18n_patterns('',
    url(r'^', include('blaszczakphoto2.gallery.urls')),
)

It allowes me to get urls like /en/about-us/ , /pl/about-us/ etc.. My default language is pl

LANGUAGE_CODE = 'pl'

I want url like /about-us/ for clients viewing my site in polish lenguage. Is there any way to hide lang_code prefix from url for default lang_code?

like image 896
mario199 Avatar asked Jul 05 '12 16:07

mario199


2 Answers

Django >=1.10 can handle this natively. There is a new prefix_default_language argument in i18n_patterns function.

Setting prefix_default_language to False removes the prefix from the default language (LANGUAGE_CODE). This can be useful when adding translations to existing site so that the current URLs won’t change.

Source: https://docs.djangoproject.com/en/dev/topics/i18n/translation/#language-prefix-in-url-patterns

Example:

# Main urls.py:
urlpatterns = i18n_patterns(
    url(r'^', include('my_app.urls', namespace='my_app')), 
    prefix_default_language=False
)

# my_app.urls.py:
url(r'^contact-us/$', ...),

# settings:
LANGUAGE_CODE = 'en' # Default language without prefix

LANGUAGES = (
    ('en', _('English')),
    ('cs', _('Czech')),
)

The response of example.com/contact-us/ will be in English and example.com/cs/contact-us/ in Czech.

like image 127
illagrenan Avatar answered Sep 28 '22 04:09

illagrenan


Here is a very simple package: django-solid-i18n-urls

After setup, urls without language prefix will always use default language, that is specified in settings.LANGUAGE_CODE. Redirects will not occur.

If url will have language prefix, then this language will be used.

Also answered here: https://stackoverflow.com/a/16580467/821594.

like image 36
stalk Avatar answered Sep 28 '22 02:09

stalk