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

如何为Django常量添加翻译支持并解决AppRegistryNotReady问题?

Django常量添加翻译支持的最佳实践

针对你遇到的AppRegistryNotReady问题,核心原因是模块导入阶段就创建了gettext_lazy实例,而在Celery启动、多进程初始化等场景中,Django应用注册表还未完成加载,触发了翻译基础设施的初始化检查错误。以下是几种可行的最佳实践:

1. 用函数包装延迟加载常量

将常量字典放在函数内部,只有当函数被调用时才初始化带翻译的内容,避免导入阶段触发翻译系统检查:

# constants.py
from django.utils.translation import gettext_lazy as _

def get_translated_labels():
    return {
        "code": _("some name to be translated"),
        # 其他常量...
    }

使用时在Django应用加载完成后调用函数(比如视图、模板逻辑中):

labels = get_translated_labels()

2. 通过AppConfig.ready()初始化常量

借助Django的AppConfig生命周期,在应用完全加载后初始化带翻译的常量:

# yourapp/apps.py
from django.apps import AppConfig
from django.utils.translation import gettext_lazy as _

class YourAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'yourapp'
    translated_labels = None

    def ready(self):
        # 仅在应用加载完成后初始化
        self.translated_labels = {
            "code": _("some name to be translated"),
            # 其他常量...
        }

使用时通过应用配置获取:

from django.apps import apps
labels = apps.get_app_config('yourapp').translated_labels

3. 结合模型/表单的Choices类(针对选项型常量)

如果常量是用于模型字段的选项,直接使用Django内置的TextChoices/IntegerChoices,这类原生实现会自动处理翻译时机:

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

class YourModel(models.Model):
    class StatusChoices(models.TextChoices):
        CODE = "code", _("some name to be translated")
        # 其他选项...
    status = models.CharField(max_length=20, choices=StatusChoices.choices)

这种方式完全符合Django规范,且不会出现导入阶段的加载问题。

4. 用类属性延迟加载常量

通过类的property实现延迟初始化,只有第一次访问时才创建带翻译的字典:

# constants.py
from django.utils.translation import gettext_lazy as _

class TranslatedLabels:
    @property
    def labels(self):
        return {
            "code": _("some name to be translated"),
            # 其他常量...
        }

translated_labels = TranslatedLabels()

使用时访问属性触发加载:

labels = translated_labels.labels

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:00:11