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

Django翻译在Celery任务中失效问题求助

解决Django Celery任务中翻译不生效的问题

问题分析

核心矛盾在于:Serializer所在的请求进程内,get_gender_display()能正常返回土耳其语翻译,但Celery独立进程中,即便调用activate("tr")确认语言设置为土耳其语,该方法仍返回英文。本质原因是:

  • Celery与Django请求进程完全隔离,无法继承请求上下文的语言配置
  • 直接调用activate()未正确初始化Celery进程内的翻译环境,枚举类中gettext_lazy对象的求值上下文与任务执行时不匹配

解决方案

1. 用translation.override上下文管理器替换activate

放弃直接调用activate(),改用Django提供的上下文管理器临时切换语言,确保翻译上下文在任务执行期间完全生效:

from celery import shared_task
from .models import PersonModel
from django.utils.translation import gettext_lazy as _, override, get_language

@shared_task
def test():
    with override("tr"):
        print(get_language())  # 输出:tr
        qs = PersonModel.objects.all()
        for obj in qs:
            print(obj.get_gender_display())  # 现在会返回土耳其语翻译

2. 确保Celery正确加载Django环境

检查Celery配置文件(如celery.py),确保启动时加载Django设置,保证翻译配置被正确读取:

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名.settings')

app = Celery('你的项目名')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

3. 验证翻译文件有效性

确认土耳其语翻译文件(locale/tr/LC_MESSAGES/django.po)已正确生成并包含对应翻译:

msgid "Female"
msgstr "Kadın"

msgid "Male"
msgstr "Erkek"

msgid "Unknown"
msgstr "Bilinmiyor"

执行django-admin compilemessages编译为.mo文件,确保Celery进程能读取到编译后的文件。

4. 动态生成枚举选项(可选)

若枚举类在Celery进程加载时gettext_lazy被意外提前求值,可将选项改为动态生成:

# enums.py
from django.utils.translation import gettext_lazy as _
class GenderTypeEnum:
    FEMALE = 1
    MALE = 2
    UNKNOWN = 3

    @classmethod
    def get_types(cls):
        return (
            (cls.FEMALE, _("Female")),
            (cls.MALE, _("Male")),
            (cls.UNKNOWN, _("Unknown"))
        )

模型中同步修改:

# models.py
gender = models.PositiveIntegerField(
    choices=GenderTypeEnum.get_types(),
    default=GenderTypeEnum.UNKNOWN,
    verbose_name=_('Gender')
)

这样每次访问选项时都会重新求值gettext_lazy,适配当前语言环境。

验证步骤

修改后重启Celery服务,触发Serializer的create方法,检查Celery任务日志,即可看到土耳其语的性别翻译结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:12:52