Django 有没有一种简单的方法来记住当前用户';什么语言?
我有一个多语言网站。更改语言很容易,Django可以完美地处理这一点。问题在于批次。这个但是我需要发送mail=batch=关于“网站新增功能”的命令行 因此:Django 有没有一种简单的方法来记住当前用户';什么语言?,django,Django,我有一个多语言网站。更改语言很容易,Django可以完美地处理这一点。问题在于批次。这个但是我需要发送mail=batch=关于“网站新增功能”的命令行 因此: 我需要知道当前用户的语言 我需要换成这种语言 第二点已在文件中解决。问题是#1。我想知道关于多语言,我是否遗漏了什么,Django是否还记得当前用户的语言,我们是否必须自己做。如果是这样,你能让我走上正轨吗 谢谢我的解决方案是:制作一个中间件,检查网站的当前语言以及数据库中用户的语言。如果它们不同,请记住数据库中的语言。仅供参考,我有自
谢谢我的解决方案是:制作一个中间件,检查网站的当前语言以及数据库中用户的语言。如果它们不同,请记住数据库中的语言。仅供参考,我有自己的
Langue
模型,其中包含有关特定语言的信息,包括locale
,它是两个字母的本地语言(例如en
,fr
,…)
当用户在您的站点上注册时,将其保存在数据库中。@Gocht用户可以在注册后随时更改其语言。这不是有效的解决方案。您不能在模型中创建任何可编辑字段。@Gocht我需要知道用户的选择,因为批处理是在凌晨2点运行的。看看我自己的答案,谢谢你的建议。
class CheckIfLanguageChangedMiddleware(object):
"""
Middleware to check if language has changed.
Used for remembering the user's choice for batchs files:
batchs files can't guess each user's language.
Adds a bit overhead but can't avoid that (I guess).
"""
@staticmethod
def process_request(request):
try:
p = Personne.objects.get(user__pk=request.user.pk)
langue = translation.get_language()
if not p.site_language or p.site_language.locale != langue:
try:
p.site_language = Langue.objects.get(locale__exact=langue)
p.save()
except Langue.DoesNotExist:
pass
except Personne.DoesNotExist:
pass