根据用户动态设置或更改默认语言 - Django

时间:2017-03-22 13:47:29

标签: django internationalization

有没有办法在点击按钮(发送请求)时动态更改settings.py中bash-4.2$ g++ --version g++ (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6) 变量的值?

我希望用户为他们的帐户设置自己的“默认语言”。

现在用户可以使用下拉列表选择他们的首选语言,并且网站得到完美翻译,并且由于Django选择了浏览器的语言,用户在重新打开网站后无需重新选择他们的语言来自同一浏览器。

但是,当他们从其他浏览器打开网站时,由于LANGUAGE_CODE变量在settings.py中设置为LANGUAGE_CODE,因此默认语言再次为“英语”。

所以我想做的是让每个用户都可以选择他们想要的语言作为默认语言。我想通过制作另一个(类似的)下拉菜单并要求用户选择他们想要的语言作为“默认”并点击en-us按钮,然后保存,我想要更改{{1} }的值是用户选择的值(即动态更改)。但我不知道如何动态更改save的值。

此外,这种方法还有一个问题。即使我能够动态更改此LANGUAGE_CODE变量,也会使网站将所选语言作为所有用户的默认语言,而不仅仅是针对那个更改它的特定用户,根据Django的文档:

  

LANGUAGE_CODE:

     
      
  • 如果未使用区域设置中间件,则会决定向所有用户提供哪种翻译。
  •   

我研究了很多,但找不到适合我的解决方案。我对国际化很新。请帮忙。

3 个答案:

答案 0 :(得分:5)

当然有,这就是翻译的全部要点。你通过思考“默认”语言而迷惑自己;根据定义,他们选择的东西不是默认的。

Django文档明确解释了如何为用户set the active language。您可以按照描述完全保存设置。

您可能还想在登录时重新设置此值,再次通过传递用户个人资料中的值。

答案 1 :(得分:2)

参考问题中所述的内容:

  

我希望用户为他们设置自己的“默认语言”   帐户。

使用中间件django-user-language-middleware可以使用注册用户选择的首选语言翻译Django应用程序。通过查看user.language字段中的所选语言(或问题定义为用户的“默认语言”),可以轻松翻译Django应用程序。

用法:

  1. 为您的用户模型添加语言字段:

    class User(auth_base.AbstractBaseUser, auth.PermissionsMixin):
        # ...
        language = models.CharField(max_length=10,
                                    choices=settings.LANGUAGES,
                                    default=settings.LANGUAGE_CODE)
    
  2. 从pip安装中间件:

    pip install django-user-language-middleware

  3. 将其添加到设置中的中间件类列表以侦听请求:

    MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
        ...
        'user_language_middleware.UserLanguageMiddleware',
        ...
    ]
    
  4. 我希望将来可以帮助人们登陆这个问题。

答案 2 :(得分:0)

您需要在每个模板文件中包含{%load i18n%},并且text / var必须使用合适的语言传递给它{%trans%}

<强> example.html的

{% load i18n %}
... 
... 
<title>{% trans "This is the title." %}</title>
<title>{% trans myvar %}</title>

请参阅django docs: https://docs.djangoproject.com/en/1.10/topics/i18n/