Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 02/03/2009, à 23:47

valAa

Re : [résolu] plusieurs *.mo gettext?

Salut,

Si les chaînes que tu veux extraire dans des .mo différents sont dans des fichiers sources différents, oui. Sinon... ça me paraît difficile, sauf à faire un script qui découpe le .po après coup...

Hors ligne

#27 Le 02/03/2009, à 23:53

Grahack

Re : [résolu] plusieurs *.mo gettext?

D'ac, merci.
En effet, les plugins sont dans des fichiers différents. La génération des .pot et .po sera même confiée aux codeurs de plugins par exemple.
Je ne suis pas sûr d'avoir été clair en fait. Générer des .mo différents ok, mais les utiliser en même temps ds la même appli ? Certains traduisant le core, d'autres les plugins, mais sont utilisés ds la même appli.
Bon, je rendrais compte de mes expérimentations...

Hors ligne

#28 Le 03/03/2009, à 00:02

valAa

Re : [résolu] plusieurs *.mo gettext?

Grahack a écrit :

D'ac, merci.
En effet, les plugins sont dans des fichiers différents. La génération des .pot et .po sera même confiée aux codeurs de plugins par exemple.
Je ne suis pas sûr d'avoir été clair en fait. Générer des .mo différents ok, mais les utiliser en même temps ds la même appli ? Certains traduisant le core, d'autres les plugins, mais sont utilisés ds la même appli.
Bon, je rendrais compte de mes expérimentations...

Utiliser plusieurs mo pas de problème, mais il est vrai que de base le programme ne fait pas la différence et cherche une traduction dans tous les fichiers à la fois.
En théorie ça ne pose pas de soucis, mais reste à savoir ce qui va se passer lorsque deux chaînes identiques seront traduites de deux façons différentes dans deux *.mo différents.

J'avoue que je n'ai jamais trop fait de tests sur ce cas là... (j'ai pas énormément de pratique de gettext pour l'instant)

Mais ça m'intéresse si tu en fais big_smile

PS : une solution bourrin est d'obliger les codeurs de plugin à faire des chaînes uniques, genre préfixées par le nom du plugin. Comme ça chacun est bien responsable de sa traduction.

Dernière modification par valAa (Le 03/03/2009, à 00:06)

Hors ligne

#29 Le 03/03/2009, à 14:30

alteo_gange

Re : [résolu] plusieurs *.mo gettext?

Salut Grahack.

C'est possible. C'est ce que fait Anki. Ce dernier utilise 2 arborescences: une pour l'interface graphique; une pour le "moteur". Chacune a son propre *.pot.

Mais il est aussi possible d'utiliser les _() dans des fichiers python quelconques (c'est-à-dire pouvant appartenir au même dossier):

xgettext -o locale/fichier1.pot " fichier1a.py fichier2a.py ... fichierna.py
xgettext -o locale/fichier2.pot " fichier1b.py fichier2b.py ... fichiernb.py

Hors ligne

#30 Le 03/03/2009, à 14:32

alteo_gange

Re : [résolu] plusieurs *.mo gettext?

valAa a écrit :

En théorie ça ne pose pas de soucis, mais reste à savoir ce qui va se passer lorsque deux chaînes identiques seront traduites de deux façons différentes dans deux *.mo différents.

Les 2 traductions apparaîtront. Voilà tout.

Hors ligne

#31 Le 13/03/2009, à 00:44

Grahack

Re : [résolu] plusieurs *.mo gettext?

Gné, j'y arrive pas, comment installer une seule et même fonction underscore qui va piocher dans différents .mo ?
Z'auriez des bouts de code ? J'utilise:

gettext.install(domain=app_name, localedir=i18n_dir, unicode=True)

Le 'domain' est obligatoire et doit être le nom du .mo. Mais si je l'utilise deux fois, le premier domaine ne sera plus traduit.

Hors ligne

#32 Le 13/03/2009, à 13:54

alteo_gange

Re : [résolu] plusieurs *.mo gettext?

Je ne suis pas arrivé à grand chose avec la méthode install. J'ai utilisé la translate.

Avec une seule fonction de traduction (par ex: '_'), tu peux utiliser différents noms de domaine à conditions qu'ils soient déclarés depuis différents fichiers (voire répertoires).

Hors ligne

#33 Le 13/03/2009, à 18:02

Grahack

Re : [résolu] plusieurs *.mo gettext?

Ce n'est pas ce que je veux faire. Je veux déclarer une bonne fois pour toute, et _ va fouiller tous les .mo.
Jusque là voilà ce que je fais:

# list of _ functions, one for each .pot (assuming each has a corresponding .mo)
underscores = []
# scanning the .pot files to find out the domains to install
for item in os.listdir(i18n_dir):
	if item.endswith('.pot'):
		gettext.install(domain=os.path.splitext(item)[0],
		   localedir=i18n_dir, unicode=True)
		underscores.append(_)
def merged_underscore(to_translate):
	"""This function collects the different translation functions."""
	for underscore in underscores:
		if to_translate != underscore(to_translate):
			return underscore(to_translate)
	return to_translate
# _ installation
__builtin__.__dict__['_'] = merged_underscore

Dernière modification par Grahack (Le 13/03/2009, à 18:02)

Hors ligne