python Django - gettext_lazy在字符串插入/连接中不起作用(在列表内部)

hzbexzde  于 2023-03-07  发布在  Python
关注(0)|答案(1)|浏览(130)

我有一个字典的项目与多个属性。

from django.utils.translation import (
    gettext_lazy as _,
)

{"item1": {
          "labels": [
                      _("label1"), 
                      "this is" + _("translatethis") + " label2", 
                    ]

然后将这些项目在DRF中进行序列化。
问题是
正在翻译_("label1")
但是
"this is" + _("translatethis") + " label2"未转换
我还尝试了字符串插值,fstring.format,但没有任何效果。当串行化器获取labels时,_("translatethis")不是代理对象。
是在gettext_lazy中围绕整个字符串工作的唯一方法吗?

qyswt5oh

qyswt5oh1#

主要的问题是_('translatethis')不是字符串,而是在必要时承诺是字符串的东西,然而当你把它和字符串连接起来时,它就应该遵守它的承诺,这样它就呈现了一个字符串,并且在需要时,它不再能够检查活动语言。
一个选项可能是使用惰性对象,例如:

from django.utils.functional import lazy

def text_join(*items):
    return ''.join(items)

text_join_lazy = lazy(text_join, str)

{
    'item1': {
        'labels': [
            _('label1'),
            text_join_lazy('this is ', _("translatethis"), ' label2'),
        ]
    }
}

相关问题