Django: un guide rapide sur l'internationalisation

La traduction d'une application dans différentes langues et sa localisation est quelque chose que tous les développeurs doivent gérer. Le matériel, dont nous publions la traduction aujourd'hui, fournit un bref guide sur l'internationalisation des applications Django.

Une partie de ce qui sera discuté ici s'applique à la localisation de tout projet Python. Après avoir examiné les bases, nous parlerons de l'accélération des efforts d'internationalisation. En particulier, sur l'utilisation de la plateforme Phrase . Il est supposé que le lecteur de ce matériel a une application Django fonctionnelle et qu'il a installé un paquet (vous pouvez l'installer, par exemple, avec une commande ). Si vous n'avez jamais utilisé Django (un framework web populaire basé sur Python) auparavant, il peut être utile que vous y jetiez un coup d'œil en premier.



gettextpip install gettextguide officiel , puis revenez à cet article.

Paramètres de l'environnement de travail de base


Supposons donc que vous ayez un projet Django mysiteet une application appelée polls. La structure du projet devrait ressembler à ceci:

/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        migrations/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py

La première étape de notre travail consiste à vérifier si l'option d'internationalisation est activée dans la configuration du projet. Pour ce faire, vous devez apporter les modifications suivantes à mysite/settings.py:

# mysite/settings.py
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

Internationalisation des modèles


Vous devez maintenant marquer toutes les lignes qui doivent être traduites dans différentes langues. Supposons que vous ayez le fichier modèle suivant polls/templates/polls/index.html:

<!-- polls/templates/polls/index.html -->
<h1>Welcome to our site!</h1>
<p>Here you find polls.</p>

Ce fichier doit être traité comme suit:

<!-- polls/templates/polls/index.html -->
{% load i18n %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>

Ici, nous avons importé un package pour la localisation et remplacé tout le texte par des constructions de vue trans 'SomeTranslationKeyName'. De plus, comme alternative à cette approche, vous pouvez utiliser les textes de traduction utilisés par défaut sous forme de clés de traduction. Avec cette approche, vous aurez toujours un bon texte par défaut s'il n'y a pas de traduction disponible pour une certaine clé.

Internationalisation en code Python


Si vous souhaitez localiser des chaînes dans du code Python (par exemple, dans un fichier polls/views.py), vous devez importer la fonction dans le fichier ugettext. Pour elle, ce qui est tout à fait normal, vous pouvez lui attribuer un alias _. Voici à quoi ressemblera une version localisée d'une fonction simple à partir d'un fichier views.py:

# polls/views.py
from django.http import HttpResponse
from django.utils.translation import ugettext as _
def index(request):
    output = _('StatusMsg')
    return HttpResponse(output)

Création de fichiers de traduction


Nous devons maintenant créer des fichiers de traduction pour chaque paramètre de langue que nous voulons prendre en charge. Pour ce faire, créez un répertoire polls/localeet pollsexécutez la commande suivante dans le répertoire :

django-admin makemessage -l de

Ici, devous pouvez remplacer le code de paramètres régionaux pour la langue que vous prévoyez d'ajouter à l'application. Dans notre exemple, l'exécution de cette commande entraînera la création d'un gettextfichier avec le polls/locale/de/LC_MESSAGES/django.pocontenu suivant:

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr ""
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr ""

Vous pouvez maintenant saisir des sauts de ligne dans ce fichier:

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr "Willkommen auf unserer Seite!"
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr "Hier findet Ihr Umfragen."

Lorsque la traduction est prête, vous devez tout compiler en exécutant la commande suivante:

$ django-admin compilemessages

Exécutez à nouveau cette commande, dans le répertoire polls.

Afin de vérifier rapidement l'opérabilité de la traduction, vous devez changer le code de langue dans le fichier mysite/settings.py. Par exemple, comme ceci:

# mysite/settings.py
LANGUAGE_CODE = 'de'

Si vous ouvrez maintenant l'application dans un navigateur, elle doit être traduite en allemand.

Accélérez la localisation des applications à l'aide de Phrase


Si vous utilisez Phrase pour organiser le travail sur la localisation des applications, vous n'avez vraiment pas besoin de créer et de modifier manuellement les fichiers * .po! Il vous suffit de créer et de transférer les clés WelcomeHeadinget WelcomeMessagedans la phrase et d'utiliser la fonction d'exportation pour télécharger les fichiers * .po.

Si notre outil de ligne de commande est installé Phrase Client, votre travail est encore plus simplifié. Il suffit de créer un fichier de configuration dans le répertoire racine du projet .phraseapp.ymlavec le contenu suivant:

# .phraseapp.yml
phraseapp:
  access_token: <your access token>
  project_id: <your project's id on PhraseApp>
  file_format: po
  pull:
    targets:
        file: "polls/locale/<locale_code>/LC_MESSAGES/django.po

Ensuite, vous devez exécuter la commande suivante dans le répertoire racine du projet:

phraseapp pull && django-admin compilemessages

Grâce à cela, toutes les traductions du projet seront mises à jour.

De plus, l'utilisation de notre éditeur en contexte dans votre projet Django peut simplifier davantage le travail . Pour ce faire, installez simplement en django-phraseutilisant pip:

pip install django-phrase

Ensuite, modifiez simplement les modèles lorsque vous envisagez d'utiliser In-Context-Editor:

<!-- polls/templates/polls/index.html -->
{% load i18n %}
{% load phrase_i18n %}
{% phrase_javascript %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>

Veuillez noter que le chargement phrase_i18ndoit être effectué après i18n.

Enfin, ajoutez ce qui suit au fichier de configuration:

# mysite/settings.py
PHRASE_ENABLED = True
PHRASE_PROJECT_ID = 'YOUR_PROJECT_ID'
PHRASE_PREFIX = '{{__'
PHRASE_SUFFIX = '__}}'

Après cela, tout sera prêt.

Sélection des paramètres régionaux


En règle générale, les développeurs d'applications définissent des paramètres régionaux en fonction des paramètres du navigateur de l'utilisateur. Pour ce faire, vous devez apporter le fichier mysite/settings.pyau format suivant:

# mysite/settings.py
from django.utils.translation import ugettext_lazy as _
...
MIDDLEWARE_CLASSES = (
    ...,
    'django.middleware.locale.LocaleMiddleware',
    ...,
)
...
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
    ('en-us', _('English')),
    ('de', _('German')),
)

Avec cette approche, si l'utilisateur a une locale German, il verra une option de traduction de. Sinon, la traduction par défaut sera utilisée en-us. Vous pouvez vérifier le bon fonctionnement de ce mécanisme en utilisant curl:

curl http://localhost:8000/polls -H "Accept-Language: de"

Cette commande doit renvoyer quelque chose comme ceci:

<h1>Willkommen auf unserer Seite!</h1>
<p>Hier findet Ihr Umfragen.</p>

Sommaire


Dans cet article, nous avons examiné les bases de l'internationalisation des applications Django. Ici, nous avons parlé du service Phrase, qui est capable d'accélérer et de simplifier le travail. Nous espérons que ce que vous avez appris vous sera utile.

Chers lecteurs! Comment abordez-vous l'internationalisation de vos projets Python?


All Articles