53 lines
1.5 KiB
Markdown
53 lines
1.5 KiB
Markdown
---
|
||
title: Django
|
||
author: Steve Kossouho
|
||
---
|
||
|
||
# Traduction d'un projet Django (I18N)
|
||
|
||
----
|
||
|
||
## Traduction dans le code Django
|
||
|
||
Pour marquer certaines chaînes dans une application comme étant traduisibles, il suffit de les passer comme arguments de la fonction `gettext_lazy`. Par convention, on importe la fonction en lui donnant l'alias `_`.
|
||
|
||
```python
|
||
from django.utils.translation import gettext_lazy as _
|
||
_("String to translate") # dans la langue de `LANGUAGE_CODE`
|
||
```
|
||
|
||
----
|
||
|
||
## Traduction dans les templates
|
||
|
||
Pour accéder aux tags spécifiques à la traduction, vous devez charger les templatetags de l'application `i18n` :
|
||
|
||
```djangotemplate
|
||
{% load i18n %}
|
||
```
|
||
|
||
----
|
||
|
||

|
||
|
||
----
|
||
|
||
## Commandes pour la traduction
|
||
|
||
Dans le répertoire de l'application à traduire :
|
||
|
||
- `django-admin makemessages -l fr` : fichier pour traducteur
|
||
- `django-admin compilemessages -l fr` : traductions compilées
|
||
|
||
----
|
||
|
||
## Bénéficier automatiquement de la traduction
|
||
|
||
Pour que Django affiche vos pages dans la langue de votre navigateur, il faut ajouter dans `MIDDLEWARE` une entrée `"django.middleware.locale.LocaleMiddleware"`.
|
||
|
||
Le middleware récupère depuis les en-têtes HTTP les langues préférées du navigateur, et si possible, active la première langue dont une traduction existe. Cela nécessite donc que le navigateur soit configuré pour préférer l'affichage des pages dans votre langue préférée.
|
||
|
||
:::notes
|
||
Faire la démo des langues préférées du navigateur avec Firefox
|
||
:::
|