2009-10-19 5 views
9

J'ai un programme avec plusieurs domaines, certains fichiers sources contiennent des appels dgettext() avec différents domaines de texte. Comment extraire des gettext-strings dans plusieurs fichiers .po? Par exemple, appelez dgettext('one', 'Hello') devrait aller à one.po, et dgettext('two', 'Bye') à deux.po. xgettext ignore simplement le domaine de texte et met tout dans un seul fichier.gettext: extraire les chaînes dgettext() aux fichiers domain.po

+0

J'ai trouvé une [suggestion] (http://stackoverflow.com/a/5354360/645186) sur la façon d'analyser chaque domaine séparément. Cependant, ceci est une solution de contournement. – Shef

Répondre

0

Si vous utilisez Linux, utilisez le programme gtranslator pour manipuler * .po et testez vos fichiers * .po.

2

D'abord, vous avez besoin d'un moyen de séparer les domaines.

Par exemple, disons que vous avez un domaine pour lib et un pour application, puis créez un raccourci pour l'appel dgettext();

_app(msg) -> dgettext("app", msg); 

et un pour le domaine lib:

_lib(msg) -> dgettext("lib", msg); 

Ajouter ces appels sur tout votre code, comme celui-ci;

show_message(_app("Choose a directory to save your work.")); 
show_message(_lib("No space left on device.")); 

Rappelez-vous que vous devez appeler bindtextdomain() pour les deux domaines lors de l'initialisation de votre application.

Pour les extraire, vous devez spécifier différents mots-clés pour xgettext sur tous les noms de fichiers dans l'arborescence des sources contenant ces marqueurs:

xgettext --keyword=_app -d domain1 filenames... 
xgettext --keyword=_lib -d domain2 filenames... 

Enfin, compilez les deux fichiers .po dans leur variante .mo binaire et copiez/installez-les au bon endroit.

+0

Je connaissais déjà cette solution, comme mentionné dans les commentaires de la question, mais merci pour l'effort. – Shef

+0

Si vous pensez que c'est une solution de contournement, je ne pense pas qu'il y aura des solutions au problème qui ne sont pas des solutions de contournement. L'alternative serait d'écrire votre propre programme qui extrait les appels de dgettext(), mais alors vous auriez à peu près dupliquer toute la logique de xgettext. –

+1

Ce n'est pas une solution, mais je vais vous accorder la prime, car elle sera gaspillée autrement. – Shef

Questions connexes