我有一个包含多个属性的项目的字典。
from django.utils.translation import (
gettext_lazy as _,
)
{"item1": {
"labels": [
_("label1"),
"this is" + _("translatethis") + " label2",
]
然后,这些项目会在 DRF 中进行序列化。
问题在于
_("label1")
正在翻译
但是
“this is” + _(“translatethis”) + “label2”
未翻译
我还尝试了字符串插值、fstring
和 .format
但没有任何效果。当序列化程序获取标签
时,_("translatethis")
不是代理对象。
这是围绕 gettext_lazy
中的整个字符串进行此操作的唯一方法吗?
最佳答案
主要问题是 _('translatethis')
不是字符串,而是在必要时 promise 成为字符串的东西。然而,当您将它与字符串连接时,就到了兑现 promise 的时候了,因此它会呈现一个字符串,并且在需要时不再可以检查事件语言。
一个选项可能是使用惰性对象,例如:
from django.utils.functional import lazy
def text_join(*items):
return ''.join(items)
text_join_lazy = lazy(text_join, str)
{
'item1': {
'labels': [
_('label1'),
<b>text_join_lazy(</b>'this is ', _("translatethis"), ' label2'<b>)</b>,
]
}
}
关于python - Django - gettext_lazy 不适用于字符串插值/连接(列表内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75645297/