Django翻译没有显示从应用程序的po

时间:2016-12-14 11:48:32

标签: django translation django-i18n

我一直在开发一个以英语或法语(加拿大语)工作的应用程序。 Django设置是;

LANGUAGE_CODE = 'en'

LANGUAGES = [
    ('en', gettext('English')),
    ('fr-ca', gettext('Canadian French')),
]
LOCALE_PATHS = (
    ...
    os.path.join(PROJECT_ROOT, 'console', 'locale'),
    ...
)

应用的区域设置路径为console/locale/fr-CA/LC_MESSAGES/

然而,应用程序最近停止渲染绝大多数翻译,而django调试工具栏和其他应用程序显示法语而没有问题。

例如,我有一个带有'名字','姓氏','电子邮件'的表格。昨天这是正确使用po文件;

#: console/forms/participants.py:631
msgid "First Name"
msgstr "Prénom"

#: console/forms/participants.py:635
msgid "Last Name"
msgstr "Nom"

#: console/forms/participants.py:140 console/forms/participants.py:469
#: console/forms/participants.py:639 console/models/mixins.py:70
msgid "Email"
msgstr "Courriel"

但是今天,只有Email字符串出现在法语中。我假设ugettext从另一个应用程序获取它,因为我已经在shell中测试了它;

>>> from django.utils.translation import ugettext, activate
>>> activate('fr-ca')
>>> ugettext('Sunday')
u'dimanche'
>>> ugettext('Event')
u'Event'
>>> ugettext('Yes')
u'Oui'
>>> ugettext('Gender')
u'Gender'
>>> ugettext('enquiry')
u'enquiry'
>>> ugettext('Enquiry')
u'Enquiry'
>>> ugettext('Receive notifications about other events.')
u'Receive notifications about other events.'

这些都取自应用程序的po文件;

#: console/models/events.py:35 console/models/events.py:206
#: console/models/participants.py:81 console/models/vouchers.py:14
msgid "Event"
msgstr "Événement"

#: console/models/participants.py:113
msgid "Gender"
msgstr "Sexe"

#: console/models/participants.py:160
msgid "Receive notifications about other events."
msgstr "Recevez des notifications pour un événement."

不言而喻,我已经运行了翻译管理命令(并且可以看到输出的语言环境路径);

manage.py makemessages -l fr-CA
manage.py compilemessages -l fr-CA

1 个答案:

答案 0 :(得分:1)

  • 您应该记住,ugettext_lazy是一个懒惰的评估,应该在模型和表单中使用(因为它们只在Django中加载一次)用于您应该使用的视图gettext
  • 尝试删除(备份)翻译文件并重新创建
  • 检查模板是否存在翻译块