Django国际化翻译中的性别问题

12

我需要解决一个性别翻译的问题,而 Django 看起来还没有实现 gettext 上下文...

我需要从英语翻译:

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

在西班牙语中有两种形式,一种适用于每个性别。如果用户是男性:

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

如果是女性:

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

请注意差异(bienvenido/bienvenida)

有没有任何方法可以完成这个任务?

谢谢,

H.


针对这个问题的最新更新是,在 Django 1.3 中支持上下文标记:http://docs.djangoproject.com/en/dev/topics/i18n/internationalization/#contextual-markers - Karol J. Piczak
3个回答

10
我解决这个问题的方式是:
{% if profile.male %}
{% blocktrans with profile.name as male %}Welcome, {{ male }}{% endblocktrans %}
{% else %}
{% blocktrans with profile.name as female %}Welcome, {{ female }}{% endblocktrans %}
{% endif %}

4

Django就是Python,因此如果需要,您可以直接使用Python的gettext绑定。我认为您完全可以编写一个{% gender_trans [gender] %}标签。


32
“gender_trans”或许不是标签的最佳命名方式 :-) - rob
Python的gettext库不支持上下文,请参见http://bugs.python.org/issue2504。Babel也无法帮助,因为msgctx支持计划在1.0版本中发布,请参见http://babel.edgewall.org/milestone/1.0。 - zgoda
在 OP 的例子中,性别取决于变量的内容:因此,我们需要一种从“用户名”中提取“性别”的方法! - Don
@zgoda Python 3.8终于支持pgettext和其他接受上下文的函数:https://docs.python.org/3/library/gettext.html#gettext.pgettext - Flimm

2

在等待上下文支持的同时,一个简单的替代方法是稍微改变西班牙语句子,并使用不会根据人的性别而变化的问候语。例如,您可以使用“hola”或其他等效术语。


它可能适用于西班牙语,但不适用于其他翻译语言(如果有的话...) - Don
现在Django支持上下文。 - Flimm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接