8
votes

À Django, comment déterminer si la traduction d'un texte donné est disponible?

Je voudrais déterminer, s'il y a une traduction à la langue actuelle pour une chaîne donnée. J'aimerais écrire quelque chose comme: xxx

Je n'ai rien trouvé approprié. La fonction ugetText renvoie simplement la traduction ou la chaîne d'origine (si la traduction n'est pas disponible) mais sans aucune option pour déterminer si la traduction est là ou n'est pas.

merci.


2 commentaires

Vous pouvez corriger la méthode GetText de NullTranslationCatalog, je crois. Une fois que vous avez atteint ce catalogue, cela signifie que vous avez contourné toutes les traductions. Vous pouvez donc enregistrer votre avertissement juste là. Probablement préférable de soumettre un patch à django :)


Il est plus efficace que la réponse acceptée à coup sûr (aussi, je suppose que si vous utilisez le mofile au lieu du pofile, ce serait plus efficace).


4 Réponses :


0
votes

Depuis, comme vous le dites, ugetText retournera la chaîne d'origine si aucune traduction n'est disponible, vous ne pouvez pas comparer la valeur renvoyée avec l'original pour voir si elles sont identiques?


1 commentaires

Merci pour la réponse, mais ce n'est pas ce que je cherchais. Dans certaines langues, certaines chaînes peuvent être traduites comme des chaînes anglaise intentionnellement, tandis que dans d'autres langues, qui ont tendance à tout traduire, la traduction existe. Donc, cela donnerait un faux avertissement. Je voudrais détecter si la traduction est manquante.



0
votes
def translation_available(msg): return ugettext(msg) == msg

2 commentaires

Merci pour la réponse, mais comme je l'ai écrit ci-dessus: si je traduit la chaîne comme anglais intentionnellement, cela donnera un faux avertissement.


Cela repose trop lourdement sur les coïncidences.



2
votes

Vous pouvez utiliser Polib pour cela: https://bitbucket.org/izi/polib/wiki / Home

quelque chose sur ces lignes (non testées) de code: xxx

Cela donnera true quand une traduction active est disponible. "E.Translated ()" seul retourne vrai pour les phrases à la fois floues et / ou obsolètes.


2 commentaires

pour e in po.translated_tries () ... serait plus efficace peut-être?


Cela ne retournera-t-il pas vrai pour une entrée de correspondance qui n'est pas traduite?



2
votes

Pour quiconque cherche une solution hacky: xxx


0 commentaires