Forum général.général Traduction

Posté par .
Tags : aucun
6
27
juin
2011

Bonjour,

je m'initie à Python par curiosité. Pour cela je développe une petite appli qui génère les fichiers de configuration d'OpenVPN. En fait je crois que j'adore la programmation.

J'ai envie de me frotter à l(internationalisation et à la localisation (internationalization (I18N) and localization (L10N)). J'utilise la bibliothèque gettext qui me semble très bien.

J'ai une question d'ordre philosophique:
J'écris mon programme en anglais. Commentaires en anglais. Noms de variables et de fonctions en anglais. Chaînes de caractères en anglais.
Pour avoir les messages affichés dans une autre langue, il suffit de créer un fichier de correspondances (un fichier .pot avec cette bibliothèque).

Plusieurs méthodes possibles:
1. le fichier source contient le message en anglais. Un fichier .pot pour chaque autre langue. C'est ce que je vois partout.
2. le fichier source contient un identifiant de message. Par exemple _'MSG00197'. Un fichier .pot pour chaque langue, y compris l'anglais. Ca me semble peu pratique lorsqu'on lit le code.
3. solution intermédiaire, le fichier source contient un message abrégé non destiné à l'affichage, juste pour le programmeur, du style _'ask for username'. Puis un fichier .pot pour chaque langue, y compris l'anglais.

Cette troisième solution me plaît bien et pour le moment je l'utilise. Elle permet de modifier une virgule dans les messages en anglais (dans le .pot) sans avoir à casser les autres traductions. Il n'y a en fait plus aucune différence entre les langues, alors que dans la première solution, la langue codée en dur est gérée de manière différente.

Vous en pensez quoi ?
Et surtout, je suis preneur d'autres idées.

  • # Pas de po

    Posté par . Évalué à 2.

    La solution n° 1 est la plus utilisée pour raison historique bien sûr, mais aussi parce-qu'elle a l'avantage de permettre au programme de fonctionner correctement et d'afficher des messages intelligibles par l'utilisateur même en l'absence de fichier de traduction.

    Une solution alternative serait de faire un fonction de mappage qui prend en argument un identifiant unique pour les traductions et une chaîne par défaut à afficher en l'absence de traduction disponible.

    • [^] # Re: Pas de po

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

      Une solution alternative serait de faire un fonction de mappage qui prend en argument un identifiant unique pour les traductions et une chaîne par défaut à afficher en l'absence de traduction disponible.

      Je n'ai pas compris. Il faut une chaîne, et en plus un identifiant unique ?
      Cela apporte quoi de plus par rapport à la méthode classique ?

      J'aime bien sa solution 3. Mais est-ce tenable dans la vraie vie ?
      A priori je n'y vois pas d'obstacle, et ça évite les chaînes à rallonge dans le code.

      • [^] # Re: Pas de po

        Posté par . Évalué à 2.

        Je n'ai pas compris. Il faut une chaîne, et en plus un identifiant unique ?
        Cela apporte quoi de plus par rapport à la méthode classique ?
        

        Ça permet de modifier la chaîne par défaut sans casser le lien avec la traduction. Mais ça demande plus de rigueur au développeur, si il corrige juste une petite faute ou ajoute une virgule ça va, si il change plus profondément le sens du message, les traducteurs ne le verront pas si il ne change pas l'ID.

        Finalement ce qui me convient le mieux à moi c'est la solution n° 1, Ça impose un bon suivi au fil des versions mais avec un bon logiciel genre Qt Linguist ce n'est pas plus contraignant que les autres méthodes.

Suivre le flux des commentaires

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