Django从数据库加载LANGUAGES参数

时间:2014-09-03 09:28:55

标签: django python-2.7 localization internationalization django-i18n

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

我们说我有一张这样的表

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

我想定义这些语言:

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

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

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

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

对此有何建议?

1 个答案:

答案 0 :(得分: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