python - Django - gettext_lazy 不适用于字符串插值/连接(列表内)

标签 python django gettext django-i18n

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

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/

相关文章:

python - 如何在不迁移的情况下将 Django 连接到外部数据库

php - 动态 gettext 的 poedit 解决方法

Python Kafka 客户端 - 没有错误但无法正常工作

python - 具有多个 iPyWidgets 下拉菜单的交互式 Covid 绘图

sql - 很多外键 - Django Admin

android - 如果 edittext 有图像如何从 edittext 中获取所有图像?

php - 为什么 php 函数在第二个 <?php ?> 中不起作用

python - 如何在迭代时从 json 中删除项目?

python - 将 C++ 代码与 Python 接口(interface)的最佳方式是什么?

python - 应用程序的自定义 django 管理模板