README.md 4.37 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
Configuration requise
--------------------

#### Paquets requis :

Sous Debian:

* gettext -> Pour la traduction


Antoine Bernard's avatar
Antoine Bernard committed
11
Comment enrichir la traduction
12 13 14 15 16 17 18
------------------------------

Pour commencer, il vous faut vous placer à la racine du répertoire,
c'est à dire à l'emplacement de ce README ou dans le sous-dossier note/.

En effet, l'utilitaire Django parcourt uniquement l'arborescence descendante.

Antoine Bernard's avatar
Antoine Bernard committed
19
Pour détecter toutes les chaînes de textes à traduire, il suffit d'utiliser la commande '''makemessages'''.
20 21 22 23 24 25 26

django-admin makemessages

ou

python manage.py makemessages

Antoine Bernard's avatar
Antoine Bernard committed
27 28 29 30 31 32
makemessages parcours les fichiers ( par défaut .py, .html, .txt ) à la rehcherche de chaîne de textes à traduire.

L'utilitaire va régenérer le fichier contenant toutes les traductions.
Ce dernier se nomme django.po et se situe dans locale/code_langue/LC_MESSAGES/.

Il vous suffit ensuite d'ajouter la traduction de la chaine en dessous, dans le msgstr.
33 34 35 36 37 38

Dans les fichiers python
------------------------

Ajouter en import du fichier

Antoine Bernard's avatar
Antoine Bernard committed
39
'from django.utils.translation import ugettext_lazy as _ '
40 41 42 43

Pour comprendre ce que fait cette fonction, et découvrir ses dérivés :
https://docs.djangoproject.com/fr/1.9/topics/i18n/translation/

Antoine Bernard's avatar
Antoine Bernard committed
44
Pour déclarer une chaine de texte ou une variable comme à traduire
45 46 47 48

    Original                  À traduire
"ma chaine de texte" -> _(u"ma chaine de texte")

Antoine Bernard's avatar
Antoine Bernard committed
49
Lorsque que vous faites ceci, cela informe l'utilitaire Django que vous souhaitez traduire cette chaine de texte.
50

Antoine Bernard's avatar
Antoine Bernard committed
51
Notez que vous pouvez aussi mettre des variables, ou des expressions non encore évalués.
52 53 54 55 56 57 58 59

Quand vous créer un nouveau template
------------------------------------

Pensez à ajouter la ligne suivante :
{% load i18n %}
Cela chargera les outils de traduction fourni par Django.

Antoine Bernard's avatar
Antoine Bernard committed
60 61
Pour des textes simples, vous pourrez utilisez le '''tag trans''' :
{% trans "Mon texte ici" %}
62 63
où "Mon texte ici" est le texte à traduire

Antoine Bernard's avatar
Antoine Bernard committed
64
Pour des textes plus compliqués, on utilisera '''blocktrans''' :
65 66 67 68 69 70 71 72 73 74 75 76
{% blocktrans %}
Le texte,
sur plusieurs lignes.
{% endblocktrans %}

ou comprenant des variables :
{% blocktrans with newvar=ildvar %}
Mon nom est {{ newvar }}.
{% endblocktrans %}

Dans un fichier javascript
--------------------------
Antoine Bernard's avatar
Antoine Bernard committed
77
https://docs.djangoproject.com/fr/1.9/topics/i18n/translation/#internationalization-in-javascript-code
78 79 80 81

Do no do it. please.
srsly

Antoine Bernard's avatar
Antoine Bernard committed
82 83 84 85 86
Pour déclarer du texte à traduire dans un fichier javascript, on utilise

   Original                  À traduire
"ma chaine de texte" -> gettext("ma chaine de texte")

87
Pour détecter les chaînes de textes en javascript, il faut les lignes de commandes suivantes où se trouvent les fichiers à traduire -- mais je ne sais pas pourquoi-- (parce que on est dans aucun projet (en dehors de note/ -- Praibait) :
88

89
Dans notre cas il faudra donc aller dans /static/js/custom/ et par exemple pour les fichier de traduction anglaise (en) :
Antoine Bernard's avatar
Antoine Bernard committed
90

91
django-admin makemessages -l en -d djangojs
Antoine Bernard's avatar
Antoine Bernard committed
92 93 94 95

La commande va alors générer un djangojs.po, qui fonctionne comme les django.po.

Remarque:
96
La ligne suivante a été rajoutée dans base.html. On a besoin, sur toutes les pages où des scripts sont appelés, d'appeler en parallèle le dictionnaire contenant les traductions javacript. Pour éviter de malheureux oublis...
Antoine Bernard's avatar
Antoine Bernard committed
97 98 99

<script type="text/javascript" src="{% url 'javascript_catalog' %}"></script>

100 101 102 103
Appliquer vos traductions
-------------------------
Un fois que vous traduit et complétez le django.po, il faut encore compilez le fichier.

Antoine Bernard's avatar
Antoine Bernard committed
104
Pour cela:
105 106 107

django-admin compilemessages

Antoine Bernard's avatar
Antoine Bernard committed
108
Cette commande va créer un django.mo qui sera lu lors de la traduction par le serveur.
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141

Comment ajouter une nouvelle langue à traduire
----------------------------------------------

D'abord, dans le settings.py, il vous faut rajouter la langue voulue au dictionnaire LANGUAGES

LANGUAGES = [
    ('fr', _(u"Français")),
    ('en', _(u"Anglais")),
]

Par exemple, si l'on souhaite rajouter le portugais :

LANGUAGES = [
    ('fr', _(u"Français")),
    ('en', _(u"Anglais")),
    ('pt', _(u"Portugais")),
]


Il faut maintenant créer le fichier dans lequel seront stockés
les traductions dans la nouvelle langue.

Pour ceci, lancer la commance suivante :

django-admin makemessages --locale=code_langue

Par exemple, pour du portugais brésilien :

django-admin makemessages --locale=pt_BR

Django devrait créer l'arborescence et le fichier django.po nécéssaire
dans le dossier locale/
Antoine Bernard's avatar
Antoine Bernard committed
142
Si ce n'est pas le cas, vous pouvez la créer à la main.