You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中字典内翻译文本未生效问题求助

解决Django OrderedDict中翻译失效的问题

你的问题核心出在模块级变量的翻译执行时机上!目前你在模块顶层直接定义了OrderedDict,里面的_('Occupation')会在模块加载阶段就立即执行——这时候Django还没根据当前请求激活对应的语言环境,只能拿到默认语言的翻译结果,后续请求切换语言时也不会更新这个值。而你在Shell里是手动先激活了土耳其语(tr)再调用翻译,这和项目运行时的加载顺序完全不同,所以测试结果正常,但实际项目里失效。

解决这个问题的关键是使用惰性翻译,让翻译的求值延迟到实际使用的时候(比如模板渲染、视图处理请求阶段),这时候语言环境已经正确激活,就能拿到对应语言的翻译了。具体改法如下:

方案1:替换为惰性翻译函数

把原来的ugettext换成ugettext_lazy,它会返回一个代理对象,直到需要字符串输出时才会根据当前语言环境求值:

from collections import OrderedDict
from django.utils.translation import ugettext_lazy as _

'alumni': OrderedDict([
    ('profession', {
        'name': _('Occupation'),
        'field': 'profession',
        'key': 'profession',
        'type': 'text'
    })
])

方案2:延迟生成字典(更稳妥的模块级变量处理)

如果这个OrderedDict是模块级变量,建议把它封装成函数,在需要使用时再调用生成,确保翻译时语言环境已经就绪:

from collections import OrderedDict
from django.utils.translation import ugettext as _

def get_alumni_fields():
    return OrderedDict([
        ('profession', {
            'name': _('Occupation'),
            'field': 'profession',
            'key': 'profession',
            'type': 'text'
        })
    ])

之后在视图、模板上下文等需要使用的地方,调用get_alumni_fields()来获取字典即可。

这两种方案都能让翻译逻辑和你项目中其他正常工作的翻译保持一致——等到实际需要展示字符串时,再根据当前请求的语言环境获取对应翻译值,自然就能生效了。

内容的提问来源于stack exchange,提问作者Kishore K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:54:02