相同的字符串有不同的翻译

34

我有一个字符串,在我的代码中可以用两种不同的方式进行翻译。

现在,如果使用django-admin makemessages -l it命令

我将在django.po文件中得到以下内容:

#: pingapi/ping.py:17 pingapi/nots.py:10
msgid "may"
msgstr "maggio"

但我希望你能提供两种不同的翻译:

#: pingapi/ping.py:17 
msgid "may"
msgstr "posso"

#: pingapi/nots.py:10
msgid "may"
msgstr "maggio"

如果我使用发布的翻译文件运行django-admin compilemessage命令,则会得到以下结果:
Error: errors happened while running msgmerge
 error 'duplicate message definition' 

任何提示吗?我正在使用Django。

3
这个链接能帮到您吗?它涉及上下文标记的 Django 国际化翻译主题。 - dgel
@dgel:很遗憾,实际上并不是这样。 - Ignacio Vazquez-Abrams
啊...我明白了。pgettext只是提供一个上下文字符串来帮助翻译者。 - dgel
2个回答

36
你可以使用gettext的上下文来实现。Django在1.3版本中添加了对此的支持(在代码中),并在1.4版本中添加了对模板的支持,请参见https://docs.djangoproject.com/en/dev/topics/i18n/translation/#contextual-markers
更新:
例如以下代码:
from django.utils.translation import pgettext, ugettext

month = pgettext("month name", "May")
month = pgettext("fifth month", "May")
month = ugettext("May")

翻译成:

#: foo/views.py:4
msgctxt "month name"
msgid "May"
msgstr ""

#: foo/views.py:5
msgctxt "fifth month"
msgid "May"
msgstr ""

#: foo/views.py:6
msgid "May"
msgstr ""

每个消息都不同,可以有不同的翻译。

6
是的,但 pgettext 不仅提供信息给翻译人员,还将消息区分为 gettext 并使它们成为不同的消息。 - Michal Čihař

0

如果您还需要将变量传递到前端

views.py

from django.utils.translation import pgettext
from django.shortcuts import render

def index(request):

our_masculine = pgettext("masculine", "Our")
our_feminine = pgettext("feminine", "Our")

return render(request,'index.html', {'our_masculine': our_masculine,'our_feminine': our_feminine })

django.po

#: index/views.py:16
msgctxt "masculine"
msgid "Our"
msgstr "I nostri"

#: index/views.py:17 
msgctxt "feminine"
msgid "Our"
msgstr "Le nostre"

index.html

<h4>{{ our_masculine }}</h4>

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