2009-12-22 13 views
12

Je souhaite fournir mon site Web Python GAE dans la langue de l'utilisateur, en utilisant uniquement les outils disponibles directement dans App Engine. Pour cela, j'aimerais utiliser les fichiers gettext GNU (fichiers .po et .mo).Comment créer une application Google App Engine internationalisée

Quelqu'un App Google Python combiné avec succès moteur et gettext fichiers? Si oui, pourriez-vous s'il vous plaît fournir les étapes que vous avez utilisées?

J'avais commencé a discussion in GAE's Google group, mais je n'ai pas pu en extraire comment je voudrais le faire: je ne veux pas ajouter de dépendances externes, comme Babel (suggéré dans la discussion). Je veux utiliser Google App Engine pur vanille, donc pas de mise à jour manuelle de Django ou ce genre de choses. Dans un premier temps, je vais commencer à utiliser la langue envoyée par le navigateur, donc pas besoin de forcer manuellement la langue en utilisant des cookies etc. Cependant, je pourrais ajouter une fonctionnalité de changement de langue plus tard, une fois l'internationalisation de base.

Comme note de fond pour vous donner plus de détails sur ce que j'essaie de faire, j'aimerais internationaliser Issue Tracker Tracker, une application open source que j'ai hébergée sur Launchpad. Je prévois d'utiliser la plateforme de traduction de Launchpad (en expliquant pourquoi je voudrais utiliser les fichiers .mo). Vous pouvez regarder le code source dans sa branche Bazaar (désolé pas de lien en raison de la limite de prévention du spam stackoverflow pour les nouveaux utilisateurs ...)

Merci de m'avoir aidé à avancer sur ce projet!

Répondre

4

Vous pouvez utiliser l'outil d'internationalisation de Django, comme expliqué here.

Ils disent aussi qu'il n'y a pas de moyen facile de le faire.

J'espère que vous aide :)

+2

Merci pour le lien, j'avais déjà essayé de l'utiliser dans ma tentative précédente, mais je ne pouvais pas le faire fonctionner réellement. J'ai encore essayé hier soir, et même si j'ai réussi à me débarrasser de toute exception, il n'y a toujours rien de traduit ... Je vais continuer à essayer de le faire fonctionner, car apparemment ça doit marcher, car il y a un exemple d'appli !Je te tiendrai au courant si je réussis. – Emilien

+1

J'ai enfin réussi à internationaliser mon application! J'ai essayé de suivre les explications sur le lien que vous avez envoyé, mais quelque chose ne fonctionnait pas, donc j'ai lu l'exemple de code qui est lié à l'article, et copier/coller du code réel, ça a marché! Merci encore pour le lien! Dans le cas où quelqu'un est intéressé, vous pouvez jeter un oeil sur les changements réels que j'ai apportés à mon application: http://bazaar.launchpad.net/~itt-devs/issuetrackertracker/main/revision/130 – Emilien

+0

Ce n'est pas vraiment une solution à moins que vous utilisez Django. – rbanffy

6

Comme mes besoins étaient simples, je simple entaille au lieu de (indisponible) gettext. J'ai créé un fichier avec des traductions de chaînes, translate.py. Environ comme ceci:

en={} 
ru={} 

en['default_site_title']=u"Site title in English" 
ru['default_site_title']=u"Название сайта по-русски" 

Puis dans le code principal que je défini une fonction qui renvoie un dictionnaire avec des traductions dans la langue la plus appropriée dans la liste (le premier à avoir une traduction est utilisée ou en anglais):

import translate 

def get_messages(languages=[]): 
    msgs=translate.en 
    for lang in languages: 
     if hasattr(translate,lang): 
      msgs=getattr(translate,lang) 
      break 
    return msgs 

Utilisation:

msgs = get_messages(["it","ru","en"]) 
hi = msgs['hello_message'] % 'yourname' 

I a également défini une fonction d'assistance qui extrait une liste des langues de tête Accept-Language.

Ce n'est pas la solution la plus flexible, mais elle n'a aucune dépendance externe et fonctionne pour moi (dans un projet de jouet). Je pense que translate.py peut être généré automatiquement à partir de fichiers gettext.

Si vous voulez voir plus, ma source actuelle est here.

+0

Merci pour votre explication détaillée. J'avais envisagé d'utiliser ce type d'approche, mais j'aimerais vraiment pouvoir exploiter la puissance de tous les traducteurs actifs dans Launchpad, donc j'ai besoin d'utiliser le gettext standard. Je n'utiliserais ce genre de solution qu'en dernier recours, mais merci quand même! – Emilien

+0

Je pense que ce serait bien d'écrire un 'compilateur' depuis les fichiers gettext vers un tel code python. – sastanin

+2

Incorrect - App Engine peut accéder aux fichiers «normaux», à condition qu'ils aient été téléchargés avec l'application. Sinon, comment charger les gabarits? –