• [^] # Re: Quels outils ?

    Posté par (site web personnel, Mastodon) . En réponse au journal On ne contribue pas que du code. Évalué à 3.

    Pour la génération des fichiers de traduction, ce sont également des outils développés par Haiku. Il s'aggit de collectcatkeys qui va parser des sources C++ à la recherche d'appels à une famille de macros (B_TRANSLATE) et extraire les chaînes de caractères passées en paramètre.

    Pour chaque appel à la macro on peut avoir:
    - La chaîne à traduire
    - Un "contexte" (qui permet d'avoir la même chaîne avec des traductions différentes, par exemple quand un nom et un verbe sont homonymes en anglais mais pas dans les traductions)
    - Un commentaire (qui est là pour informer les traducteurs)

    Ces trois informations sont affichées par l'outil de traduction.

    Le résultat est un fichier "catkeys" qui contient simplement ces entrées, une par ligne, avec les 3 infos séparées par des tabulations (les chaînes elle-mêmes sont stockées avec les caractères spéciaux échappés comme en C, donc s'il y a une tabulation ou un retour à la ligne dans la chaîne à traduire, il est remplacé par un \t ou un \n).

    Ensuite on convertit les fichiers traduits dans un format binaire qui permet un accès plus rapide aux traductions.

    Pour les outils de traduction, il y a d'abord eu un premier outil maison (c'était vers 2009 ou 2010), avant le passage à Pootle. Pootle fonctionne bien pour le système, mais nous n'avons pas réussi à y intégrer des applications tierces sous forme de projets indépendants. Pour la version ancienne, c'est en cours de migration!

    Un problème de Pootle est qu'il est écrit en Python (si je me souviens bien) et donc en héberger une instance nécessite un serveur qui permet de faire des pages en Python. Ce n'est pas un problème pour le projet Haiku, mais ça l'est pour plusieurs projets de petites applications qui sont hébergées juste sous forme d'un projet github. Et là on a un développeur qui a eu envie de se faire la main sur le développement d'application web, je crois :)

    Pour le format d'ICU, je ne sais pas si je peux répondre car je connaît assez mal celui utilisé par gettext. Il y a quelques exemples ici:
    http://userguide.icu-project.org/formatparse/messages

    En gros, le format est presque un langage de script qui permet au traducteur d'exprimer tout un tas de conditions sur les données à formater. On l'utilise principalement pour gérer correctement le nombre (singulier/pluriel en français, mais c'est plus compliqué dans d'autres langues, comme on peut le voir dans la base de données CLDR.

    Comment ça se passe avec gettext pour gérer ce genre de problèmes?