| 1 |
|
|---|
| 2 | Les outils fournis :
|
|---|
| 3 |
|
|---|
| 4 | * tireur :
|
|---|
| 5 | - va chercher les fichiers de langue (décrits dans traduction.txt)
|
|---|
| 6 | et les dépose dans sa copie locale
|
|---|
| 7 | * lecteur :
|
|---|
| 8 | - prend les fichiers de référence dans sa copie locale (des SVN),
|
|---|
| 9 | et met à jour la base de données (table trad_lang)
|
|---|
| 10 | * écriveur :
|
|---|
| 11 | - exporte les traductions (à partir de la table trad_lang) sous
|
|---|
| 12 | forme de fichiers traduits, dans une copie locale (idem export SVN)
|
|---|
| 13 | * pousseur :
|
|---|
| 14 | - commit SVN les différents fichiers de langue
|
|---|
| 15 |
|
|---|
| 16 | == librairie commune inc_tradlang.php
|
|---|
| 17 |
|
|---|
| 18 | --
|
|---|
| 19 | -- Structure de la table `trad_lang`
|
|---|
| 20 | --
|
|---|
| 21 |
|
|---|
| 22 | CREATE TABLE IF NOT EXISTS `trad_lang` (
|
|---|
| 23 | `id` varchar(128) NOT NULL default '',
|
|---|
| 24 | `module` varchar(128) NOT NULL default '',
|
|---|
| 25 | `lang` varchar(16) NOT NULL default '',
|
|---|
| 26 | `str` text NOT NULL,
|
|---|
| 27 | `comm` text NOT NULL,
|
|---|
| 28 | `ts` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
|---|
| 29 | `status` varchar(16) default NULL,
|
|---|
| 30 | `traducteur` varchar(32) default NULL,
|
|---|
| 31 | `md5` varchar(32) default NULL,
|
|---|
| 32 | `orig` tinyint(4) NOT NULL default '0',
|
|---|
| 33 | `date_modif` datetime default NULL,
|
|---|
| 34 | KEY `idx_tl` (`id`),
|
|---|
| 35 | KEY `idx_t2` (`module`),
|
|---|
| 36 | KEY `idx_t3` (`id`,`module`,`lang`),
|
|---|
| 37 | KEY `idx_t4` (`module`,`lang`)
|
|---|
| 38 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|---|
| 39 |
|
|---|
| 40 |
|
|---|
| 41 | Description des champs :
|
|---|
| 42 | id :
|
|---|
| 43 | identifiant de la chaine (commun à toutes les langues)
|
|---|
| 44 | exemple 'accueil_site'
|
|---|
| 45 | module :
|
|---|
| 46 | nom du module
|
|---|
| 47 | exemple : cfg
|
|---|
| 48 | lang :
|
|---|
| 49 | code ISO de la langue
|
|---|
| 50 | exemple : fr
|
|---|
| 51 | str :
|
|---|
| 52 | contenu de la chaine (id) dans la langue donnée (lang) pour le
|
|---|
| 53 | module concerne
|
|---|
| 54 | comm :
|
|---|
| 55 | champ de commentaires
|
|---|
| 56 | ts :
|
|---|
| 57 | timestamp mis à jour lors des modifications
|
|---|
| 58 | status :
|
|---|
| 59 | ?
|
|---|
| 60 | traducteur :
|
|---|
| 61 | login du traducteur dans l'interface de traduction
|
|---|
| 62 | md5 :
|
|---|
| 63 | md5(str_lang_reference) champ renseigné uniquement pour les
|
|---|
| 64 | langues qui ne sont pas la langue de référence du module,
|
|---|
| 65 | calculé à partir la valeur de str pour le meme id dans la langue
|
|---|
| 66 | de référence
|
|---|
| 67 | orig :
|
|---|
| 68 | 0/1 : 1 si c'est la langue de référence, 0 sinon
|
|---|
| 69 | date_modif :
|
|---|
| 70 | ?
|
|---|
| 71 |
|
|---|
| 72 |
|
|---|
| 73 |
|
|---|
| 74 | En rediscutant un peu (sur irc) de notre problématique de traduction
|
|---|
| 75 | des plugins, il semble qu'une des difficultés, c'est que ce sont les
|
|---|
| 76 | codeurs qui sont à l'origine des chaines de langue, mais que ce sont
|
|---|
| 77 | les admins de spip.net (en l'occurrence moi pour SPIP et George pour
|
|---|
| 78 | les plugins) qui doivent (c'est-à-dire, sont autorisés à) ajouter des
|
|---|
| 79 | éléments dans la base de données des traductions.
|
|---|
| 80 |
|
|---|
| 81 | Ce système crée un goulot d'étranglement (il faut passer par un tiers,
|
|---|
| 82 | qui n'est pas forcément disponible immédiatement), et par conséquent
|
|---|
| 83 | un décalage frustrant, qui fait que le passage en traduction est
|
|---|
| 84 | souvent pesant, alors que ça devrait être une fête.
|
|---|
| 85 |
|
|---|
| 86 |
|
|---|
| 87 | Une solution envisageable serait de programmer un système
|
|---|
| 88 | d'aller-retour entièrement automatique entre le SVN et trad-lang :
|
|---|
| 89 |
|
|---|
| 90 | 1) Chaque "module" prêt à traduire serait défini par un fichier de
|
|---|
| 91 | référence ; par exemple :
|
|---|
| 92 | 'ecrire' => svn://trac.rezo.net/spip/spip/ecrire/lang/ecrire_fr.php
|
|---|
| 93 | on note la liste de ces fichiers dans un fichier texte
|
|---|
| 94 | traductions.txt, un peu comme archivelist.txt décrit les zip à
|
|---|
| 95 | produire
|
|---|
| 96 |
|
|---|
| 97 | 2) Pour ajouter, modifier ou supprimer une chaîne dans le module
|
|---|
| 98 | 'ecrire', il suffirait de modifier ce fichier dans le SVN. (A noter :
|
|---|
| 99 | il faudra dès lors supprimer de l'interface trad-lang la possibilité
|
|---|
| 100 | d'administrer le fichier de langue "source").
|
|---|
| 101 |
|
|---|
| 102 | 3) périodiquement, trad-lang irait récupérer la liste des modules
|
|---|
| 103 | décrits dans traductions.txt, puis récupérerait chacun des fichiers de
|
|---|
| 104 | référence et insèrerait les chaines en question dans sa base de
|
|---|
| 105 | données.
|
|---|
| 106 |
|
|---|
| 107 | 4) les traducteurs traduiraient, comme d'habitude, dans l'interface
|
|---|
| 108 | web de trad-lang (mais elle aurait beaucoup plus de modules)
|
|---|
| 109 |
|
|---|
| 110 | 5) trad-lang exporterait les fichiers traduits à côté des fichiers de
|
|---|
| 111 | référence, et les commiterait directement dans SVN.
|
|---|
| 112 |
|
|---|
| 113 |
|
|---|
| 114 | La seule conséquence négative que je vois à ce système, c'est au
|
|---|
| 115 | niveau du contrôle de "ce qui entre en traduction" ; notamment, on
|
|---|
| 116 | avait l'idée d'essayer d'éviter les doublons, de surtout éviter de
|
|---|
| 117 | faire entrer des fautes d'orthographe, etc. Mais ce contrôle peut se
|
|---|
| 118 | faire à postériori, sans être bloquant : il faudra collectivement
|
|---|
| 119 | qu'on surveille les fichiers de langue commités par les uns et par les
|
|---|
| 120 | autres, comme on le fait déjà pour les autres trucs (plugin.xml etc).
|
|---|
| 121 |
|
|---|
| 122 | A priori, ça me paraît jouable comme ça. Mais si vous avez
|
|---|
| 123 | l'expérience de traduction d'autres logiciels, notamment avec un site
|
|---|
| 124 | comme translation project ou les outils de gestion de .po, ça serait
|
|---|
| 125 | intéressant de voir comment on pourrait améliorer ce qu'on fait.
|
|---|
| 126 |
|
|---|
| 127 | http://translationproject.org/html/software.html
|
|---|
| 128 |
|
|---|
| 129 | -- Fil
|
|---|
| 130 |
|
|---|
| 131 |
|
|---|
| 132 | Je viens de faire un script pour exporter automatiquement les chaines
|
|---|
| 133 | de langues traduites dans le module "contrib", en direction de
|
|---|
| 134 | SPIP-Zone.
|
|---|
| 135 |
|
|---|
| 136 | Il y a plusieurs conséquences :
|
|---|
| 137 |
|
|---|
| 138 | 1) Pour les plugins concernés, il devient INTERDIT de créer des
|
|---|
| 139 | chaines de langue autrement qu'en passant par l'interface de spip.net
|
|---|
| 140 | ; c'est ennuyeux, mais indispensable. Il faut qu'on améliore cette
|
|---|
| 141 | interface pour assouplir sa gestion.
|
|---|
| 142 |
|
|---|
| 143 | Pour l'instant on a mis dans ce système les plugins suivants :
|
|---|
| 144 |
|
|---|
| 145 | 'cfg' => 'svn://zone.spip.org/spip-zone/_plugins_/_stable_/cfg/lang/',
|
|---|
| 146 | 'couteau' => 'svn://zone.spip.org/spip-zone/_plugins_/_stable_/couteau_suisse/lang/',
|
|---|
| 147 | 'crayons' => 'svn://zone.spip.org/spip-zone/_plugins_/_stable_/crayons/lang/',
|
|---|
| 148 | 'listes' => 'svn://zone.spip.org/spip-zone/_plugins_/_dev_/mailman_popup/lang/',
|
|---|
| 149 | 'sedna' => 'svn://zone.spip.org/spip-zone/_plugins_/_test_/sedna/lang/',
|
|---|
| 150 | 'spipbb' => 'svn://zone.spip.org/spip-zone/_plugins_/_dev_/spipBB/lang/',
|
|---|
| 151 |
|
|---|
| 152 | A noter : on considère qu'un plugin est "traduit" dans une langue x si
|
|---|
| 153 | cette langue comporte plus de 50% de chaines qui ne sont pas marquées
|
|---|
| 154 | "<NEW>"
|
|---|
| 155 |
|
|---|
| 156 | 2) Il faudrait s'il vous plait vérifier que les envois que j'ai faits
|
|---|
| 157 | ne comportent pas d'oubli (chaine ajoutée ou traduction améliorée sur
|
|---|
| 158 | la zone, mais pas dans le module sur spip.net). J'ai regardé autant
|
|---|
| 159 | que j'ai pu mais il y a tellement de lignes, j'ai pu laisser passer
|
|---|
| 160 | une coquille.
|
|---|
| 161 |
|
|---|
| 162 | 3) Dernier point, ça reste un script assez complexe qu'on ne peut pas
|
|---|
| 163 | facilement jouer de chez soi (puisqu'il faut l'accès à la base de
|
|---|
| 164 | données des traductions de spip.net) ; là aussi la solution passerait
|
|---|
| 165 | plutôt par un travail d'amélioration/réécriture de trad-lang. En
|
|---|
| 166 | attendant ça en restreint l'usage à une seule personne (moi), donc ça
|
|---|
| 167 | fait goulet d'étranglement... On peut cependant partager cet accès à
|
|---|
| 168 | deux ou trois personnes, pour faciliter les mises à jour.
|
|---|
| 169 |
|
|---|
| 170 | -- Fil
|
|---|
| 171 |
|
|---|
| 172 |
|
|---|
| 173 | En fait il faudrait plusieurs scripts :
|
|---|
| 174 |
|
|---|
| 175 | * tireur : il va chercher les fichiers dans le svn
|
|---|
| 176 | * lecteur : il prend les fichiers de référence dans sa copie locale
|
|---|
| 177 | des SVN, et met à jour la base de données
|
|---|
| 178 | * écriveur : il exporte les traductions sous forme de fichiers
|
|---|
| 179 | traduits, dans sa version locale
|
|---|
| 180 | * pousseur : il commit svn
|
|---|
| 181 |
|
|---|
| 182 |
|
|---|