2012-04-19 40 views
21

我有一個字符串,可以用兩種不同的方式在我的代碼的varius部分翻譯。相同的字符串與不同的翻譯

現在,如果使用Django管理員makemessages -l它

我得到這個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。

+2

[this](https://docs.djangoproject.com/en/dev/topics/i18n/translation/#contextual-markers)有幫助嗎? – dgel 2012-04-19 20:08:04

+0

@dgel:不幸的是,不幸的是。 – 2012-04-19 20:09:36

+0

啊......我明白了。 'pgettext'只提供一個上下文字符串來幫助譯員。 – dgel 2012-04-19 20:13:01

回答

24

你可以使用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 "" 

每封郵件都有所不同,可以進行不同的翻譯。

+0

你讀過這個問題的評論嗎? – 2012-04-23 23:01:28

+5

是的,但是pgettext不僅是向翻譯人員提供信息,它還區分了gettext的消息並使他們成爲不同的消息。 – 2012-04-27 05:43:49