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

