st4lk / django-solid-i18n-urls

[DEPRECATED] Use default language for urls without language prefix.
http://www.lexev.org/en/
Other
112 stars 29 forks source link

Django solid_i18n urls

Build Status Coverage Status Pypi version

solid_i18n contains middleware and url patterns to use default language at root path (without language prefix).

Default language is set in settings.LANGUAGE_CODE.

Deprecation notice

Starting from Django 1.10, built-in i18n_patterns accept optional argument prefix_default_language. If it is False, then Django will serve url without language prefix by itself. Look docs for more details.

This package can still be useful in following cases (look below for settings details):

In all other cases no need in current package, just use Django>=1.10.

Requirements

Release notes

Here

Behaviour

There are two modes:

  1. settings.SOLID_I18N_USE_REDIRECTS = False (default). In that case i18n will not use redirects at all. If request doesn't have language prefix, then default language will be used. If request does have prefix, language from that prefix will be used.

  2. settings.SOLID_I18N_USE_REDIRECTS = True. In that case, for root paths (without prefix), django will try to discover user preferred language. If it doesn't equal to default language, redirect to path with corresponding prefix will occur. If preferred language is the same as default, then that request path will be processed (without redirect). Also see notes below.

Quick start

  1. Install this package to your python distribution:

    pip install solid_i18n
  2. Set languages in settings.py:

    # Default language, that will be used for requests without language prefix
    LANGUAGE_CODE = 'en'
    
    # supported languages
    LANGUAGES = (
        ('en', 'English'),
        ('ru', 'Russian'),
    )
    
    # enable django translation
    USE_I18N = True
    
    # Optional. If you want to use redirects, set this to True
    SOLID_I18N_USE_REDIRECTS = False
  3. Add SolidLocaleMiddleware instead of LocaleMiddleware to MIDDLEWARE_CLASSES:

    MIDDLEWARE_CLASSES = (
       'django.contrib.sessions.middleware.SessionMiddleware',
       'solid_i18n.middleware.SolidLocaleMiddleware',
       'django.middleware.common.CommonMiddleware',
    )
  4. Use solid_i18n_patterns instead of i18n_patterns

    from django.conf.urls import patterns, include, url
    from solid_i18n.urls import solid_i18n_patterns
    
    urlpatterns = solid_i18n_patterns(
        url(r'^about/$', 'about.view', name='about'),
        url(r'^news/', include(news_patterns, namespace='news')),
    )
  5. Start the development server and visit http://127.0.0.1:8000/about/ to see english content. Visit http://127.0.0.1:8000/ru/about/ to see russian content. If SOLID_I18N_USE_REDIRECTS was set to True and if your preferred language is equal to Russian, request to path http://127.0.0.1:8000/about/ will be redirected to http://127.0.0.1:8000/ru/about/. But if preferred language is English, http://127.0.0.1:8000/about/ will be shown.

Settings

Example site

Located here, it is ready to use, just install solid_i18n (this package):

pip install solid_i18n

clone example site:

git clone https://github.com/st4lk/django-solid-i18n-urls.git

step in example/ and run development server:

cd django-solid-i18n-urls/example
python manage.py runserver

Notes