Forum Programmation.autre [Gettext] Extraction des traductions, et optimisation de la source

Posté par (page perso) .
Tags : aucun
2
6
sept.
2009
Bonjour,

En regardant les sources de KDE et le paquet kde-l10n-fr, j'ai remarqué que beaucoup, beaucoup de place est perdue en chaînes (une vingtaine de Mios).

Par exemple, si j'installe KDE avec son pack Français, je vais avoir toutes les chaînes de caractère en double : en anglais dans l'éxécutable, et en français dans les fichiers LC_MESSAGE.

Vous avez peut-être vu mon journal qui présente la possibilité d'empaqueter les paquets en utilisant le bytecode LLVM, plus léger. En effet, je cherche à réaliser un gestionnaire de paquets qui nécessite le moins de bande passante possible, et qui soit le plus rapide possible.

Je me demande donc s'il est possible plus ou moins facilement d'extraire le texte d'un fichier source et de le placer autre part.

Par exemple, j'ai cette source :


printf(_("Hello, world !"));


et ce fichier .po


msgid "Hello, world !"
msgstr "Bonjour, monde !"


J'aimerais que d'une certaine manière, le code soit transformé en ceci :


printf(_("1"));


le fichier .po en cela :


msgid "1"
msgstr "Bonjour, mode !"


et un autre fichier .po (en.po ici) qui contiennent les chaîne d'origines


msgid "1"
msgstr "Hello, world !"


Ainsi, on évite d'avoir des chaînes qui ne servent pas, ce qui permet d'alléger les téléchargements, et surtout d'avoir plus de place sur les LiveCD contenant les traductions (et c'est très important, la Madame Michu sur son Windows, elle n'a peut-être jamais vu d'anglais dans son système, alors qu'il paraît presque normal sous GNU/Linux).

Est-il possible de réaliser cette manipulation avec les outils standards ? Dois-je apprendre le Perl et réaliser ceci moi-même ?

Merci d'avance
  • # Et en cas d'erreur de chargement du fichier po...

    Posté par (page perso) . Évalué à 3.

    Je me demande ce que ça donne en cas de problème, est-ce que ça ne risque pas d'afficher des nombres un peu partout au lieu d'avoir de l'anglais ?
    • [^] # Re: Et en cas d'erreur de chargement du fichier po...

      Posté par (page perso) . Évalué à 3.

      Effectivement, mais d'un côté, c'est bien.

      Imagine que SuperDistrib empaquette tous ses paquets. Ses devs sont anglais, et ne font pas attention aux traductions. Ils ont fait une erreur, et toutes les traductions sont mauvaises. Un utilisateur francophone va tout voir en anglais, c'est pas bien.

      Maintenant, la même SuperDistrib empaquette tous ses paquets, commet l'erreur, mais les devs se retrouvent devant une soupe de nombres. Il est évident qu'ils vont voir quelque-chose, et le corriger.

      Dans les deux cas, la coréenne du nord qui n'a jamais vu d'anglais ne sera rien faire des interfaces. Dans le premier, les anglophones ne se seront rendu compte de rien. Dans le deuxième, ils auront corrigé :-) .

      Maintenant, un gros problème, c'est si l'utilisateur change sa LOCALE et en met une non-supportée par la distrib (car dans le fonctionnement technique de tout ça, la distrib choisit les langues supportées par les paquets, et copier en.po dans la_langue.po si le paquet ne supporte pas cette lange. C'est un problème à résoudre). Donc, si LOCALE n'est pas bonne, là il y aura un problème. Il faudrait hacker gettext pour utiliser en.po en fallback, voire même proposer à l'utilisateur de classer ses langues dans son ordre de préférence (j'affiche le truc en français, si ça n'existe pas en français, je l'affiche en anglais, sinon en russe, sinon en espagnol, etc).
      • [^] # Re: Et en cas d'erreur de chargement du fichier po...

        Posté par (page perso) . Évalué à 1.

        au passage un mécanisme de fallback vers une langue compréhensible par l'utilisateur ne serait pas un mal.
        Il existe de par le monde une tripotée de personne qui connaissent une langue étrangère plus courante que leur langue maternelle sans maîtriser un traitre mot d'anglais.

        C'est d'ailleurs ce qui est prévu par le protocole http pour les préférences linguistiques : un classement.

        PS : premier texte tapé en bépo. 7 minutes chrono :)
        • [^] # Re: Et en cas d'erreur de chargement du fichier po...

          Posté par (page perso) . Évalué à 2.

          Avec mon système, c'est possible, mais ça nécessite un hack de gettext :-° (et pas un petit).

          Soit des fichiers de langue en anglais, français et espagnol disons.

          L'espagnol a défini ses langues comme étant espagnol>français>anglais. Il ouvre un programme (disons KPartitionManager pour que ce soit pas trop trop traduit). Il s'affiche en espagnol, mais les chaînes non-traduites sont en français. Celles qui ne sont pas en français sont en anglais.

          Hum, ça va être chaud à faire, il va falloir installer tous les packs langue que l'utilisateur veut :/ . Ca risque d'être bien plus complexe que prévu (j'en ai marre, toutes mes bonnes idées sont trop complexes, LLVM, puis ça maintenant).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.