Le 25/02/2021 à 23:53, Christophe HENRY a écrit :
Le Wed, 24 Feb 2021 21:59:31 +0100,
David VANTYGHEM <[email protected]> a écrit :
J'ai une question concernant les systèmes de traduction utilisés dans
les logiciels. J'ai testé :

- le simple fichier JSON dans lequel on met des variables et à côté
de chaque variable une traduction. On a un fichier JSON par langue.
Avantage : facile à comprendre par un non informaticien qui veut
aider à traduire. Inconvénient : si on ajoute une variable dans un
fichier, il faut le faire manuellement dans tous les autres fichiers,
avec un risque d'erreur de saisie.

- poedit. On a un fichier .pot qui est la référence, avec par exemple
les textes en anglais. Pour chaque autre langue, on a un fichier .po,
avec les mêmes textes en anglais que dans le fichier .pot et sur
chaque ligne, à côté de chaque texte en anglais, sa traduction.
Avantage : risque d'erreur de syntaxe faible. Inconvénient 1 :
nécessite un petit apprentissage. Inconvénient 2 : si on modifie le
fichier .pot, il faut ensuite mettre à jour chaque fichier .po avec
le fichier .pot. Inconvénient 3 : si on modifie un texte dans le
fichier .pot, le texte n'est plus traduit dans le logiciel pour
toutes les autres langues, seule la traduction du fichier .pot est
prise en compte (ou alors j'ai raté quelque chose).

Quelqu'un connaît-il d'autres systèmes qui gommeraient tous ces
inconvénient ? (éventuellement en lien et automatisable avec Gitlab)
J’ai constaté deux systèmes de traduction. Le premier, rare, est
d'associer une constante à chaque phrase. Par exemple en php ce serait
echo(_(TXT_WARN_FILE_NOT_FOUND)). Avec la fonction _ qui irait piocher
dans le fichier de langue adéquat.

Le deuxième système est celui dont tu parles. Une langue principale est
utilisée telle quelle, mais la fonction renverra la traduction
adéquate. L'exemple devient echo(_"Warning, the file was not found!").

Dans tous les cas, l’absence d’une traduction doit être compensée. Soit
on affiche la constante telle quelle pour le premier cas, soit on
affiche le message dans la langue principale. Par contre, contrairement
au cas de la constante, un changement dans un texte de la langue
principale impliquera des changements dans tous les fichiers de
traduction.

Bonjour,

Dans mon expérience, c'est gettext le plus fréquent, avec les fichiers pot et poedit ou lokalize en outil embarqué, ou des plateformes comme weblate et transifex.

Inconvénient 1 : on n'a rien sans rien. Mais comme le système est largement utilisé, on trouve de l'aide.

Inconvénient 2 : il existe une commande qui s'en charge, msgmerge

Inconvénient 3 : normalement ce cas est rare, on génère le fichier modèle après avoir vérifier l'expression et la syntaxe. S'il subsiste des erreurs qui n'entraînent pas de modification de la traduction, on peut faire un remplacement global à coup d'expression régulière dans l'ensemble des fichiers de traduction.

Tu as oublié de mentionner qu'une fois obtenu le fichier de traduction .po, il reste à la compiler en .mo et à le ranger au bon endroit pour que les traductions soient utilisées.

Par ailleurs, Qt a son propre système, avec des fichiers .ts comme source et fichiers de traduction au format XML et des .qm en fichiers compilés.

Bon courage

Yves

_______________________________________________
libre mailing list
[email protected]
https://brassens.heberge.info/cgi-bin/mailman/listinfo/libre

Répondre à