2009-08-25 7 views
10

Je dois résoudre un problème de traduction de genre, et Django ne semble pas avoir gettext contexts encore mis en œuvre ...problème de genre dans une traduction i18n django

Je dois traduire de l'anglais:

<p>Welcome, {{ username }}</p> 

En deux formes d'espagnol, une pour chaque genre. Si l'utilisateur est un homme:

<p>Bienvenido, {{ username }}</p> 

et si une femme est:

<p>Bienvenida, {{ username }}</p> 

noter la différence (Bienvenido/bienvenida)

Est-il possible d'obtenir ce fait?

Merci,

H.

+0

Tout comme une mise à jour à cette question, les marqueurs contextuels sont désormais pris en charge dans Django 1.3: http: //docs.djangoproject.com/en/dev/topics/i18n/internationalization/# marqueurs contextuels –

Répondre

4

Django est juste Python pour que vous puissiez utiliser les liaisons gettext Python directement si vous avez besoin, je ne vois aucune raison que vous ne pouviez pas écrire un {% gender_trans [gender]%} tag.

+25

"gender_trans" n'est peut-être pas un nom parfait pour l'étiquette :-) –

+0

La bibliothèque gettext Python ne supporte pas les contextes, voir http://bugs.python.org/issue2504. Babel n'aide pas non plus ici, puisque le support de msgctx est prévu pour la version 1.0, voir http://babel.edgewall.org/milestone/1.0 – zgoda

+0

Dans l'exemple OP, le genre dépend du contenu d'une variable: donc, nous avons besoin un moyen d'extraire le 'genre' du 'nom d'utilisateur'! – Don

2

En attendant que les contextes soient pris en charge, une alternative facile serait de changer légèrement la phrase espagnole et d'utiliser un message d'accueil qui ne varie pas en fonction du sexe d'une personne. Par exemple, vous pouvez utiliser "hola", ou un autre terme équivalent.

+0

Il peut fonctionner pour l'espagnol, mais pas pour d'autres langues traduites (le cas échéant ...) – Don

9

La façon dont je l'ai résolu ce problème est la suivante:

{% if profile.male %} 
{% blocktrans with profile.name as male %}Welcome, {{ male }}{% endblocktrans %} 
{% else %} 
{% blocktrans with profile.name as female %}Welcome, {{ female }}{% endblocktrans %} 
{% endif %} 
Questions connexes