Projet

Général

Profil

Gestion traduction » Historique » Version 3

Benjamin Bohard, 02/09/2014 12:24

1 1 Benjamin Bohard
h1. Gestion traduction
2 1 Benjamin Bohard
3 1 Benjamin Bohard
h2. Besoins
4 1 Benjamin Bohard
5 1 Benjamin Bohard
Pouvoir mettre à jour les fichiers de traduction distribués dans les paquets.
6 1 Benjamin Bohard
7 2 Benjamin Bohard
Idéalement, il faut :
8 2 Benjamin Bohard
* un mécanisme permettant de mettre à jour les fichiers .po pour chaque langue déjà traduite et le fichier .pot pouvant servir de point de départ à la traduction dans une nouvelle langue ;
9 2 Benjamin Bohard
* un mécanisme permettant d'être sûr que la version compilée installée est bien à jour. 
10 2 Benjamin Bohard
11 1 Benjamin Bohard
h2. Procédures
12 1 Benjamin Bohard
13 3 Benjamin Bohard
Les fichiers de traduction sont installés sous forme compilée (.mo).
14 1 Benjamin Bohard
Ces fichiers compilés ne sont pas éditables directement.
15 3 Benjamin Bohard
Ils sont générés à partir de fichiers texte (.po).
16 1 Benjamin Bohard
17 1 Benjamin Bohard
La mise à jour des fichiers de traduction est faite en trois étapes :
18 1 Benjamin Bohard
# extraction des chaînes de caractères à traduire dans un ensemble de fichiers (création ou mise à jour des fichiers .po),
19 1 Benjamin Bohard
# édition des fichiers .po,
20 1 Benjamin Bohard
# compilation des fichiers .mo à partir des fichiers .po.
21 1 Benjamin Bohard
22 1 Benjamin Bohard
L'extraction des chaînes de caractères à traduire est possible par l'emploi de la commande xgettext (également conseillée par l'auteur de pygettext depuis qu'elle gère le code python).
23 1 Benjamin Bohard
Le passage des .po aux .mo et inversement est possible par l'emploi des commandes msgfmt et msgunfmt réciproquement.
24 1 Benjamin Bohard
25 1 Benjamin Bohard
Les fichiers .po et .mo sont redondants et il n'est pas nécessaire de conservés les deux dans les dépôts.
26 1 Benjamin Bohard
Les fichiers .mo ne sont utiles que pour l'exécution des programmes traduits et les fichiers .po sont plus facilement exploitables dans un contexte de dépôt git.
27 1 Benjamin Bohard
28 1 Benjamin Bohard
h2. Implémentation
29 1 Benjamin Bohard
30 2 Benjamin Bohard
h3. À ce jour, dans les dépôts eole
31 2 Benjamin Bohard
32 1 Benjamin Bohard
Les dépôts mettant actuellement en place une gestion de la traduction sont :
33 1 Benjamin Bohard
* eole-sso ;
34 1 Benjamin Bohard
* eoleflask-aaa ;
35 1 Benjamin Bohard
* eole-bacula ;
36 1 Benjamin Bohard
* zephir-client ;
37 1 Benjamin Bohard
* python-pyeole ;
38 1 Benjamin Bohard
* ead ;
39 1 Benjamin Bohard
* creole ;
40 1 Benjamin Bohard
* tiramisu.
41 1 Benjamin Bohard
42 1 Benjamin Bohard
L'idée retenue dans l'ead, eole-sso, est l'inclusion du fichier .po dans le dépôt avec un script permettant de générer le .mo.
43 1 Benjamin Bohard
Dans le cas de l'ead, le .po et le script sont installés (ils sont placés dans le répertoire i18n qui est installé de manière globale).
44 1 Benjamin Bohard
Dans le cas de eole-sso, le .po et le script ne sont pas installés ; seul le .mo est dans un répertoire installé.
45 1 Benjamin Bohard
Dans les deux cas, le script générant les .mo n'est pas lancé automatiquement.
46 1 Benjamin Bohard
47 1 Benjamin Bohard
Dans eoleflask-aaa, le fichier .po (et un fichier .pot) est dans un répertoire translations mais aucun dispositif ne semble en place pour compiler le .mo.
48 1 Benjamin Bohard
49 1 Benjamin Bohard
Dans eole-bacula, le .po est celui de bacula recompilé.
50 1 Benjamin Bohard
L'ensemble du dossier lang est installé (.po, script pour compilé le .mo et .mo).
51 1 Benjamin Bohard
Le script ne gère pas la mise à jour des fichiers .po et doit être lancé manuellement. 
52 1 Benjamin Bohard
53 1 Benjamin Bohard
Zephir-client dispose d'une cible dans le Makefile situé dans data/monitor pour générer le .mo à partir du .po et d'une cible pour extraire les chaînes de caractères.
54 1 Benjamin Bohard
55 1 Benjamin Bohard
Python-pyeole lance la commande msgfmt dans le setup.py qui assure la compilation des .mo.
56 1 Benjamin Bohard
57 2 Benjamin Bohard
Creole ne met à disposition que le fichier .mo.
58 2 Benjamin Bohard
59 1 Benjamin Bohard
Tiramisu dispose de trois cibles (utilisées dans le .PHONY) dans le Makefile pour extraire les chaînes de caractères, compiler les .mo et les installer.
60 2 Benjamin Bohard
61 2 Benjamin Bohard
h3. bilan
62 2 Benjamin Bohard
63 2 Benjamin Bohard
Seul les dépôts tiramisu et zéphir-client prennent en charge les trois étapes : extraction des chaînes de caractères, compilation et installation des .mo.
64 2 Benjamin Bohard
Aucun n'assure, a priori, la mise à jour des fichiers .po déjà existant.
65 2 Benjamin Bohard
66 2 Benjamin Bohard
Tiramisu déclenche automatiquement l'extraction des chaînes de caractères et la compilation directement après.
67 2 Benjamin Bohard
68 2 Benjamin Bohard
Les projets python utilisent soit les mécanismes du Makefile, soit ceux du setup.py.
69 2 Benjamin Bohard
70 2 Benjamin Bohard
Les .po et les scripts se retrouvent parfois installés.
71 2 Benjamin Bohard
72 2 Benjamin Bohard
Deux trois questions :
73 2 Benjamin Bohard
* est-ce que les fichiers .mo doivent tous être installés dans /usr/share/locale/ ?
74 2 Benjamin Bohard
* est-ce que la procédure est suffisamment générique pour l'intégrer dans le Makefile de eole-skeletor ?
75 2 Benjamin Bohard
76 2 Benjamin Bohard
h2. Proposition
77 2 Benjamin Bohard
78 3 Benjamin Bohard
# si nécessaire, mettre à jour tous les fichiers .po déjà créés et écraser le fichier .pot servant à initier les nouvelles traductions (cible du Makefile appelée manuellement),
79 2 Benjamin Bohard
# si nécessaire, éditer les fichiers .po,
80 2 Benjamin Bohard
# compiler les fichiers .mo dans un répertoire installé