我想通过加载数据库中的值来动态设置我的LANGUAGES变量。
我们说我有一张这样的表
COLUMN_NAME
-----------
id
name
identifier
active
我想定义这些语言:
LANGUAGES = (
('en', _('English')),
('de', _('German')),
('fr', _('French')),
)
我需要从表中加载所有语言并在设置文件中定义它们。现在我不认为在设置文件中运行查询是个好主意。
这种方式还允许我动态激活和禁用语言(例如语言文件包含语法错误)。
我真的不知道如何开始这个。我在谷歌搜索了很多,但我找不到任何需要这个系统的人(可能这也是不必要的)
对此有何建议?
答案 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