gpt4 book ai didi

在Django的模型和公用函数中使用惰性翻译对象

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章在Django的模型和公用函数中使用惰性翻译对象由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

在模型和公用函数中,使用ugettext_lazy()和ungettext_lazy()来标记字符串是很普遍的操作。 当你在你的代码中其它地方使用这些对象时,你应当确定你不会意外地转换它们成一个字符串,因为它们应被尽量晚地转换(以便正确的地域生效) 这需要使用几个帮助函数。 拼接字符串: string_concat() 。

标准Python字符串拼接(''.join([...]) ) 将不会工作在包括惰性翻译对象的列表上。 作为替代,你可以使用django.utils.translation.string_concat(), 这个函数创建了一个惰性对象,其连接起它的内容 并且 仅当结果被包括在一个字符串中时转换它们为字符串 。 例如:

?
1
2
3
4
5
6
7
8
9
10
11
from django.utils.translation import string_concat
# ...
name = ugettext_lazy(u 'John Lennon' )
instrument = ugettext_lazy(u 'guitar' )
result = string_concat([name, ': ' , instrument])
 
System Message: ERROR / 3 (<string>, line 519 )
 
Error in “cnid” directive: no content permitted.
 
.. cnid:: 109

  在这种情况下,当 。

?
1
2
3
System Message: WARNING/2 (<string>, line 523)
 
Explicit markup ends without a blank line; unexpected unindent.

result 自己被用与一个字符串时, result 中的惰性翻译将仅被转换为字符串(通常在模板渲染时间)。 allow_lazy() 修饰符 。

Django提供很多功能函数(如:取一个字符串作为他们的第一个参数并且对那个字符串做些什么)。(尤其在 django.utils 中) 这些函数被模板过滤器像在其他代码中一样直接使用.

如果你写你自己的类似函数并且与翻译打交道,当第一个参数是惰性翻译对象时,你会面临“做什么”的难题。 因为你可能在视图之外使用这个函数(并且因此当前线程的本地设置将会不正确),所以你不想立即转换其为一个字符串.

象这种情况,请使用 django.utils.functional.allow_lazy() 修饰符。 它修改这个函数以便 假如第一个参数是一个惰性翻译, 这个函数的赋值会被延后直到它需要被转化为一个字符串为止.

例如:

?
1
2
3
4
5
6
from django.utils.functional import allow_lazy
 
def fancy_utility_function(s, ...):
   # Do some conversion on string 's'
   # ...
fancy_utility_function = allow_lazy(fancy_utility_function, unicode )

allow_lazy() 装饰符 采用了另外的函数来装饰,以及一定量的,原始函数可以返回的特定类型的额外参数 (*args ) 。 通常,在这里包括 unicode 就足够了并且确定你的函数将仅返回Unicode字符串.

使用这个修饰符意味着你能写你的函数并且假设输入是合适的字符串,然后在末尾添加对惰性翻译对象的支持.

最后此篇关于在Django的模型和公用函数中使用惰性翻译对象的文章就讲到这里了,如果你想了解更多关于在Django的模型和公用函数中使用惰性翻译对象的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com