我一直在开发一个以英语或法语(加拿大语)工作的应用程序。 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
答案 0 :(得分:1)
ugettext_lazy
是一个懒惰的评估,应该在模型和表单中使用(因为它们只在Django中加载一次)用于您应该使用的视图gettext