Question

J'ai une application écrite en wxPython que je veux rendre multilingue. Nos options sont

  1. en utilisant gettext http://docs.python.org/library/gettext.html
  2. séparant tout le texte de l'interface utilisateur un fichier messages.py, et l'utiliser pour traduire le texte

Je suis très enclin au 2e et je ne vois aucun avantage à aller de manière gettext, En utilisant la 2ème manière, je peux avoir tous mes messages en un seul endroit, pas dans le code, donc si j'ai besoin de changer un message, le code n'a pas besoin d'être changé, dans le cas de gettext, je risque d'avoir des constantes msg déroutantes car je vais juste envelopper l'originale msg au lieu de le convertir en constante dans messages.py

fondamentalement au lieu de

wx.MessageBox(_("Hi stackoverflow!"))

Je pense

wx.MessageBox(messages.GREET_SO)

est meilleur, y a-t-il un avantage de la manière gettext et un désavantage de la 2 e façon? et y a-t-il une 3ème voie?

modifier: les fichiers de langues gettext semblent aussi être trop liés au code, et que se passe-t-il si je veux deux messages identiques en anglais mais différents en français, par exemple. supposons que le français ait une traduction plus subtile pour différents scénarios en anglais, on est ok

expérience: Je suis déjà allé en 2ème manière, et je dois dire que chaque application doit essayer d'extraire du texte d'interface utilisateur à partir de code, cela donne une chance de refactoriser, voir où l'interface utilisateur s'insinue dans le modèle et où le texte d'interface utilisateur peut être amélioré, la comparaison de gettext est mécanique, ne donne aucune entrée pour le codeur, et je pense serait plus difficile à maintenir.

et tout en créant un nom pour le texte, par ex. PRINT_PROGRESS_MSG, donne l'occasion de constater que, dans de nombreux endroits, le même msg est utilisé légèrement différemment et peut être fusionné en un seul nom, ce qui sera utile ultérieurement lorsque je n'aurai besoin de changer le msg qu'une seule fois.

Conclusion: je ne suis toujours pas sûr de l’avantage d’utiliser gettext et j’utilise mon propre fichier de messages. mais j’ai choisi la réponse qui explique au moins quelques points sur la raison pour laquelle gettext peut être bénéfique. La solution finale, IMO, consiste à tirer le meilleur parti des deux manières, c’est-à-dire mon propre identificateur de message entouré par gettext, par exemple

.
wx.MessageBox(_("GREET_SO"))
Était-ce utile?

La solution

Gettext est la voie à suivre. Dans votre exemple, vous pouvez également utiliser gettext pour "éviter de stocker les traductions dans le code":

wx.MessageBox(messages.GREET_SO)

peut être identique avec gettext que:

wx.MessageBox(_("GREET_SO")) or wx.MessageBox(_("messages.GREET_SO"))

Gettext est à peu près la norme pour les applications multilingues, et je suis sûr que vous en tirerez parti à l'avenir. Par exemple, vous pouvez utiliser Poedit (ou une autre application similaire) pour affecter des traductions à vos collaborateurs ou collaborateurs, puis signaler un ou plusieurs messages comme non traduits correctement. De plus, s'il y a des entrées manquantes / supplémentaires, poedit vous en avertira. Ne vous trompez pas, gettext est le seul moyen fiable et éprouvé de conserver les traductions.

Autres conseils

Il existe certains avantages de gettext:

  1. L'un des principaux avantages est que, lorsque vous utilisez poedit pour effectuer les traductions, vous pouvez bénéficier de la base de données de traduction. En gros, poedit ca peut scanner votre disque dur et trouver des fichiers déjà traduits et fera des suggestions lorsque vous traduirez votre fichier.
  2. Lorsque vous donnez le code à d'autres personnes pour qu'elles traduisent, elles connaissent peut-être déjà la méthode de traduction gettext, alors que vous devez leur expliquer votre méthode de traduction.
  3. Vous avez le texte dans le contexte du code, il devrait donc être plus facile de traduire lorsque vous voyez le code autour de la traduction
  4. Considérons un texte du type: print _ ('% d fichiers de% d fichiers sélectionnés')% (num, numTotal) et même dans des situations plus complexes. Ici, ça aide vraiment d’avoir le code autour ...

Pour le Web (c'est PHP mais l'idée est la même), je crée toujours plusieurs fichiers de langue dans un répertoire spécifique. en.php, fr.php, et cetera. Ces fichiers contiennent les définitions de tout le texte de sortie, dans la langue donnée. La préférence de l'utilisateur pour la langue détermine lequel de ces fichiers est inclus, donc la langue dans laquelle le résultat apparaît. Par exemple ...

in en.php:     TEXT_I_AM = "Je suis"

in fr.php:     TEXT_I_AM = "Je suis"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top