django i18n_patterns hide default lang_code from url

django, internationalization, url, url-routing

Solution

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.

Problem

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?

Original source