Django internationalization minimal example

后端 未结 2 762
我寻月下人不归
我寻月下人不归 2020-12-05 01:38

I\'m having difficulty in internationalizing my app, so I present here a minimal example where my implementation fails.

Consider the following steps for producing a

相关标签:
2条回答
  • 2020-12-05 01:39

    1º Enable Internationalization in settings.py:

    USE_I18N = True
    

    2º On settings, import:

    from django.utils.translation import ugettext_lazy as _

    3º Set the languages that you are going to use in settings.py:

    LANGUAGES = (
        ('en', _('English')),
        ('pt-br', _('Portuguese')),
        ('it', _('Italian')),
        ('fr', _('French')),
        ('es', _('Spanish')),
    )
    

    3º Configure the LOCALE_PATH in settings.py too:

    LOCALE_PATHS = (
        os.path.join(BASE_DIR, 'conf/locale'),
    )
    

    4º Inside the path you configured in LOCALE_PATH create the folders, ex:

    $ cd django_project_folder
    $ mkdir conf
    $ mkdir conf/locale
    

    5º Run the command:

    django-admin.py makemessages -a
    

    It will create a file .po inside a subfolder of each language set in settings.py LANGUAGES. Make the translations of each sentence inside the file.

    Ps: Runs over the entire source tree of the current directory and pulls out all strings marked for translation.

    For test, before run, put the tag

    {% trans "Welcome to my project!" %} 
    

    inside your index.html and run the command makemessages again. You'll see inside de .po files a new string:

    msgid "Welcome to my Project"
    msgstr ""
    

    6º Now, run the command:

    django-admin compilemessages
    

    It will collect all msgstr from .po file and will compile in a .mo file

    7º Run the project and test

    8ª Plus: If you want that in URL show what language the user is using you can configure your url.py to show that:

    urlpatterns += i18n_patterns(
        # your urls here,
    )
    
    0 讨论(0)
  • 2020-12-05 01:55

    Django collects translations in these 3 ways explained here: https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

    The directories listed in LOCALE_PATHS have the highest precedence, with the ones appearing first having higher precedence than the ones appearing later.

    Then, it looks for and uses if it exists a locale directory in each of the installed apps listed in INSTALLED_APPS. The ones appearing first have higher precedence than the ones appearing later.

    Finally, the Django-provided base translation in django/conf/locale is used as a fallback.

    Since your translation file is in none of these places you need to set it manually using LOCALE_PATHS as explained here: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-LOCALE_PATHS

    0 讨论(0)
提交回复
热议问题