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

Django中如何实现Model存储的动态通知文本字段内容的多语言翻译

动态存储字段值多语言翻译实现方案

核心思路是不将翻译完成的静态字符串存入数据库,改为存储可翻译的模板标识与动态参数,在读取通知内容时根据用户当前的语言环境动态生成翻译后的文本,兼容你现有项目的多语言翻译流程。


步骤1:调整Notification模型结构

替换原直接存储文本的text字段,新增模板标识、参数存储字段,新增动态翻译属性:

from django.db import models
from django.contrib.auth.models import User
import json

class Notification(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,null=True, blank=True)
    date = models.DateTimeField(auto_now_add=True)
    # 新增字段:存储翻译模板的原始字符串
    msg_key = models.CharField(max_length=100)
    # 新增字段:存储金额这类动态参数
    msg_params = models.JSONField(default=dict)
    read = models.BooleanField(default=False)

    @property
    def text(self):
        # 读取时根据当前语言环境动态翻译
        from django.utils.translation import gettext as _
        return _(self.msg_key) % self.msg_params

如果需要兼容历史数据,可保留原text字段,在property中做兼容判断即可。


步骤2:修改视图创建通知的逻辑

不再直接拼接存储完整文本,改为存储模板和参数:

def payment_confirmation(request):
    if request.method == 'POST':
        form = paymentForm(request.POST)
        if form.is_valid():
                amount= float(form.cleaned_data['amount'])
                form.save()
                notify = Notification.objects.create(
                    user = request.user,
                    msg_key = "%(amount)s $ is added to your wallet",
                    msg_params = {"amount": amount}
                )
                trans = _('Recharge Completed successfully')
                messages.success(request,trans)
                return redirect('my_wallet')
        return HttpResponse("completed")

步骤3:更新翻译配置

所有通知的模板字符串需要被makemessages命令识别,你可以新建一个专门的文件统一管理所有通知模板:

# notifications/translation_strings.py
from django.utils.translation import gettext_lazy as _

# 所有通知模板统一写在这里,makemessages会自动扫描
NOTIFICATION_TEMPLATES = [
    _("%(amount)s $ is added to your wallet"),
    # 后续新增的通知模板都加到此列表即可
]

之后执行python manage.py makemessages、python manage.py compilemessages的流程和你之前翻译静态内容完全一致,正常翻译对应字符串即可。


步骤4:使用方式不变

原有显示通知的代码不需要修改,直接调用notification.text就能拿到对应用户语言的翻译后内容。


备选方案(适合不需要支持用户切换语言的场景)

如果你的业务允许用户切换语言后历史通知不跟着切换语言,可以直接使用django-modeltranslation库给text字段配置多语言版本,创建通知时按当前用户的语言存入对应版本即可,优点是读取性能更高,缺点是历史通知不会随用户语言设置变化更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:12:03