2016-07-04 44 views
-1

我有一个多语言网站。 Django可以很好地处理语言,这很容易改变语言。问题在于批次。 documentation is perfectly clear about this。但是我需要发送关于“网站新增功能”的mail = batch =命令行。有没有简单的方法来记住当前用户的语言?

所以:

  1. 我需要知道当前用户
  2. 我需要切换到该语言的语言。

第二点在文档中解决。问题是#1。我想知道是否有一些我错过了多语言,如果Django 确实记住当前用户他/她的语言,如果我们必须自己做。如果是这样,你能让我走上正轨吗?

谢谢

+0

保存在你的数据库时,您的网站用户注册。 – Gocht

+0

@Gocht用户可以随时在注册后更改他的语言。这不是一个有效的解决方案。 –

+0

您可以在模型中创建不可编辑的字段。 – Gocht

回答

0

这里是我的解决方案:作出这样的检查网站的当前语言中间件和用户的数据库语言。如果它们不同,请记住数据库中的语言。仅供参考,我有我自己的模型Langue其中包含有关特定语言的信息,包括locale这是两个字母的地方(如enfr,...)

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 
相关问题