Internationalization (Language Setting) in Django

  • If your project want to run in English and a Spanish version edit the settings.py file of your project and add the following LANGUAGES setting to it. 
  • Place it next to the LANGUAGE_CODE setting:

            LANGUAGES = (

            ('en', 'English'),

            ('es', 'Spanish'),

           )

  • The LANGUAGES setting contains two tuples that consist of a language code and a name
  • Language codes can be locale-specific, such as en-us or en-gb, or generic, such as en. With this setting, we specified that application will only be available in English and Spanish. 
  • If you don't define a custom LANGUAGES setting, the site will be available in all the languages that Django is translated into.
  • Make your LANGUAGE_CODE setting look as follows:

            LANGUAGE_CODE = 'en'

  • Add 'django.middleware.locale.LocaleMiddleware' to the MIDDLEWARE setting. Make sure that this middleware comes after SessionMiddleware because LocaleMiddleware needs to use session data. It also has to be placed before CommonMiddleware because the latter needs an active language to resolve the requested URL. The MIDDLEWARE setting should now look as follows:
                MIDDLEWARE = [
                    'django.middleware.security.SecurityMiddleware',
                    'django.contrib.sessions.middleware.SessionMiddleware',
                    'django.middleware.locale.LocaleMiddleware',
                    'django.middleware.common.CommonMiddleware',
                    # ...
                    ]
  • The order of middleware classes is very important because each middleware can depend on data set  by other middleware executed previously. Middleware is applied for requests in order of appearance in MIDDLEWARE, and in reverse order for responses.
    • Create the following directory structure inside the main project directory, next to the manage.py file:
      • locale/
        • en/
        • es/
    • The locale directory is the place where message files for your application will reside. Edit the settings.py file again and add the following setting to it:
                LOCALE_PATHS = (
                    os.path.join(BASE_DIR, 'locale/'),
                    )
    • The LOCALE_PATHS setting specifies the directories where Django has to look for translation files. 
    • Locale paths that appear first have the highest precedence.
    • When you use the makemessages command from your project directory, message files will be generated in the locale/ path you created. However, for applications that contain a locale/ directory, message files will be generated in that directory.

    Comments

    Post a Comment

    Popular posts from this blog

    reverse_lazy() Method in Django

    CharFilter in Django