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
相关产品推荐
相关产品推荐

