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

Django中如何翻译模板内的动态变量(如订单状态值)

解决Django订单状态多语言翻译问题

方法一:修改模型Choices为可翻译文本(推荐)

这种方式贴合Django多语言设计规范,将状态的显示文本设置为可翻译字符串:

1. 更新models.py

引入gettext_lazy,替换choices的显示值:

from django.db import models
from django.utils.translation import gettext_lazy as _

class Order_product(models.Model):
    name = models.CharField(max_length=255)
    note = models.TextField()
    status = models.CharField(
        max_length=255,
        choices=[
            ('Pending', _('Pending')),
            ('Need-Delivery', _('Need-Delivery')),
            ('Delivery', _('Delivery')),
            ('Success', _('Success')),
            ('Return-Order', _('Return-Order')),
            ('Cancel', _('Cancel')),
        ]
    )

2. 更新模板test.html

调用模型的get_status_display()方法获取可翻译的显示文本,再用{% trans %}标签处理:

{% for each_order in get_order %}
   <p>
       {% trans each_order.get_status_display %}
   </p>
{% endfor %}

3. 生成并更新翻译文件

执行命令提取翻译字符串:

python manage.py makemessages -l vi

打开locale/vi/LC_MESSAGES/django.po文件,添加对应越南语翻译:

msgid "Pending"
msgstr "Đang chờ"

msgid "Need-Delivery"
msgstr "Cần giao hàng"

msgid "Delivery"
msgstr "Đang giao"

msgid "Success"
msgstr "Thành công"

msgid "Return-Order"
msgstr "Trả hàng"

msgid "Cancel"
msgstr "Hủy đơn"

最后编译翻译文件:

python manage.py compilemessages

方法二:直接翻译状态值(无需修改模型)

如果不想改动模型结构,可直接对数据库存储的状态值做翻译:

1. 更新模板test.html

用{% trans %}标签直接翻译状态字段值:

{% for each_order in get_order %}
   <p>
       {% trans each_order.status %}
   </p>
{% endfor %}

2. 生成并更新翻译文件

执行提取命令后,在django.po文件中添加与方法一相同的翻译内容,再编译即可。

关键配置检查

确保项目settings.py中已开启多语言支持:

USE_I18N = True

LANGUAGES = [
    ('en', 'English'),
    ('vi', 'Vietnamese'),
]

LOCALE_PATHS = [
    BASE_DIR / 'locale',
]

注:之前使用{% blocktranslate %}包裹变量会把整个模板块作为翻译单元,导致生成的po文件出现%(each_order.status)s占位符,无法单独翻译状态值,因此改用{% trans %}标签处理单个字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:37:35