相同的字符串不同的翻译

Posted

技术标签:

【中文标题】相同的字符串不同的翻译【英文标题】:Same string with different translation 【发布时间】:2012-05-01 10:11:40 【问题描述】:

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

现在如果使用 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。

【问题讨论】:

this 有帮助吗? @dgel:不幸的是,并非如此。 啊...我明白了。 pgettext 只提供上下文字符串来帮助翻译人员。 【参考方案1】:

您可以为此使用 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 ""

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

【讨论】:

是的,但是 pgettext 不仅仅是为翻译人员提供信息,它还区分了 gettext 的消息,使它们成为不同的消息。

以上是关于相同的字符串不同的翻译的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony 中,如何翻译实体中的关联字段(外键)?

第四次上机练习特殊的翻译

Offer[46] 把数字翻译成字符串

面试题46. 把数字翻译成字符串. 递归

算法剑指 Offer 46. 把数字翻译成字符串

ARM将字符串更改为不同的长度?吉德拉,艾达亲