2016-10-24 71 views
0

Django的翻譯使用的選擇字段不會發生..Django的翻譯與格式()不工作

models.py:

class Reservation(models.Model): 
    class Period: 
    MORNING = 'morning' 
    EVENING = 'evening' 

    @classmethod 
    def choices(cls): 
     return (    
      (cls.MORNING, _('Morning')), 
      (cls.EVENING, '{} until {:%I %p}'.format(_('Evening'), datetime.time(16)), 
     )  

period = models.CharField(max_length=10, choices=Period.choices(),) 

我使用{{reservation.get_period_display}}在模板以幾種語言顯示該字段。對於第一選擇cls,轉換是很好的.MORNING:الصباح。 對於第二選擇(cls.EVENING),翻譯不會發生:「傍晚到下午4點」

任何人都可以提示我格式說明符有什麼問題,以及爲什麼翻譯/本地化在這種情況下不起作用。

N.B:翻譯和i18n安裝正確,我的項目中的其他地方正確顯示翻譯值

+0

什麼是'_'?它是'ugettext_lazy'還是非懶惰版本? – RemcoGerlich

+0

_ is ugettext_lazy version –

+0

您是否解決了您的問題? –

回答

0

你應該換第二行字符串中ugettex_lazy不僅僅是Evening

(cls.EVENING, _('{} until {:%I %p}').format(datetime.time(16)), 

更多Strings won't be translated in Django using format function available in Python 2.7

而且一定要加#, python-brace-format。像這個例子一樣

#: accounts/forms.py:691 
#, python-brace-format 
msgid "La validation de votre carte a échoué: ({0}) {1}" 
msgstr "" 
+0

「{}至{:%I%p}」出現在django.po文件中。無論您爲此提供什麼字符串,翻譯都不起作用。 –

+0

@GrizzledSquirrel查看更新的答案。我使用'_()。format' –

+0

(cls.MORNING,_('until {}')。format(cls.MORNING)), –