我有一个关于使用ugettext和ugettext_lazy
进行翻译的问题。
我了解到在模型中应该使用ugettext_lazy
,而在视图ugettext中应该使用ugettext_lazy
。
但是还有其他地方,我也应该使用ugettext_lazy
吗?那么表单定义呢?
他们的表演有什么不同吗?
编辑:
还有一件事。有时,使用ugettext_lazy
而不是ugettext_noop
。正如文档所说,ugettext_noop
字符串只标记为要翻译,并在最新可能的时间翻译后才显示给用户,但我在这里有点困惑,这是否与ugettext_lazy
所做的相似?我仍然很难决定在我的模型和表单中应该使用哪一个。
noop的一个很好的用法是,当您想用英语为开发人员记录一条消息,但要将翻译后的字符串呈现给查看器时。例如在http://blog.bessas.me/posts/using-gettext-in-django/
ugettext()
对ugettext_lazy()
在像表单或模型这样的定义中,您应该使用
ugettext_lazy
,因为这个定义的代码只执行一次(主要是在django的启动时);ugettext_lazy
以一种惰性的方式翻译字符串,这意味着,例如,每次访问模型上的属性名称时,字符串都会被新翻译,这完全有意义,因为自从django启动以来,您可能在用不同的语言查看这个模型!在视图和类似的函数调用中,您可以毫无问题地使用
ugettext
,因为每次调用视图ugettext
时都会重新执行,因此您将始终获得符合请求的正确翻译!关于
ugettext_noop()
正如Bryce在他的回答中指出的,此函数将字符串标记为可提取的可翻译字符串,但确实返回未翻译的字符串。这对于在两个地方使用字符串很有用-翻译和未翻译。请参见以下示例:
惰性版本返回一个代理对象,而不是一个字符串,在某些情况下,它不会按预期工作。例如:
将失败,因为最后一行将尝试将lst对象序列化为JSON,而不是将“client”的字符串序列化为代理对象。代理对象不能序列化为json。
相关问题 更多 >
编程相关推荐