Django文档:
如果定义了自定义LANGUAGES
设置,则可以将语言标记为翻译字符串(如上面显示的默认值)--但是使用一个“虚拟”gettext()
函数,而不是django.utils.translation
中的那个。你不应该从你的设置文件中导入django.utils.translation
,因为那个模块本身依赖于设置,这将导致循环导入。解决方案是使用一个“dummy”gettext()
函数。下面是一个示例设置文件:
x1名5名1 x 1名6名1 x 1名7名1 x 1名8名1 x
通过这种安排,django-admin.py makemessages
仍然会找到并标记这些字符串以进行转换,但转换不会在运行时发生--因此您必须记住在运行时使用LANGUAGES
的任何代码中 Package 真实的的gettext()
中的语言。
在真实的gettext()
中 Package 语言到底意味着什么?在代码中应该如何调用它?
4条答案
按热度按时间3xiyfsfu1#
根据文档,您可以在设置中使用
ugettext_lazy
而不会导致循环导入:如果你使用的是Django 3.0或更高版本,那么你应该使用
gettext_lazy
。siv3szwd2#
就像上面说的:在实际使用语言名称或向用户显示语言名称时,调用gettext():
(You通常应该使用ugettext而不是gettext,因为Django中的所有文本都是unicode。
要在模板中执行等效操作,只需使用{% blocktrans %}标记,该标记仅在后台调用ugettext:
yacmzcpb3#
这真的是对上述问答的评论和进一步解释。我无法让我的翻译工作,阅读和重读文档,在网上搜索了几个小时,在阅读这篇文章后,我意识到它归结为:
我原来有:
这行不通,然后在阅读后,这一尝试
这使得一切工作...我刚刚搜索了这一点,它是在文档的https://docs.djangoproject.com/en/1.4/topics/i18 n/translation/#how-django-discovers-language-preference,在本节的底部...
xmjla07d4#
在模板中,您可以执行以下操作: