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

Django admin中@admin.display翻译未生效问题求助

问题原因及解决方案

核心原因

你遇到的翻译不生效问题,根源在于装饰器参数的计算时机:

  • @admin.display的description参数是在**模块加载阶段(程序启动时)**就被计算并固定下来的。
  • 此时Django的_()翻译函数会使用程序默认的语言环境处理字符串,不会根据用户请求的动态语言(比如阿拉伯语)重新计算,导致后续语言切换时无法更新这个描述文本。

修复方案

将description设置为可调用对象,让翻译和字符串格式化延迟到请求处理阶段执行(此时能获取当前请求的语言环境)。示例代码如下:

class SomeAdmin(admin.ModelAdmin):
    @admin.display(
        description=lambda: _('Cases %(year)d') % {'year': previous_year},
        ordering='cases_previous_year'
    )
    def previous_year(self, inv_presidency):
        ... some code ...

如果previous_year是需要动态获取的值(比如每年自动更新),建议将其封装成函数确保调用时能拿到最新值,比如:

def get_previous_year_description():
    previous_year = ...  # 这里写获取上一年的逻辑
    return _('Cases %(year)d') % {'year': previous_year}

class SomeAdmin(admin.ModelAdmin):
    @admin.display(
        description=get_previous_year_description,
        ordering='cases_previous_year'
    )
    def previous_year(self, inv_presidency):
        ... some code ...

额外验证

确认你的.po文件配置无误:

  • msgid "Cases %(year)d"和代码中原始翻译字符串完全一致
  • 已经运行django-admin compilemessages编译过翻译文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:04