0

我想通过从数据库中加载值来动态设置我的 LANGUAGES 变量。

假设我有一张这样的桌子

COLUMN_NAME
-----------
id
name
identifier
active

我想定义这些语言:

LANGUAGES = (
    ('en', _('English')),
    ('de', _('German')),
    ('fr', _('French')),
)

我需要从表中加载所有语言并在设置文件中定义它们。现在我不认为在设置文件中运行查询是一个好主意。

这种方式还允许我即时激活和禁用语言(例如,如果语言文件包含语法错误)。

我真的不知道如何开始。我在谷歌上搜索了很多,但我找不到需要这个系统的人(可能这也是不必要的)

对此有何建议?

4

1 回答 1

1

至此:

这种方式还允许我即时激活和禁用语言(例如,如果语言文件包含语法错误)。

我建议不要这样做,因为您不应该在运行时更改设置:https ://docs.djangoproject.com/en/1.7/topics/settings/#altering-settings-at-runtime 。

您可能要考虑的一种策略是覆盖 django.middleware.locale.LocaleMiddleware 中的 process_request 以将 LANGUAGE_CODE 设置为默认值,例如 EN,如果它不是您表中的活动语言。

class CustomLocaleMiddleware(LocaleMiddleware):
    def process_request(self, request):
        ...
        lang = languages.objects.get(identifier=translation.get_language())
        if lang:
            if not lang.active:
                request.LANGUAGE_CODE = 'en'
            else:
                request.LANGUAGE_CODE = translation.get_language()
        else:
            request.LANGUAGE_CODE = translation.get_language()

您需要补偿喜欢的语言代码,例如 en-us、de-at

于 2014-09-05T21:19:42.303 回答