有没有办法在点击一个按钮(发送一个请求)时动态地改变settings.py中LANGUAGE_CODE
变量的值?
我希望用户有自己的“默认语言”设置为他们的帐户。
现在,用户可以使用下拉列表选择他们喜欢的语言,网站得到完美的翻译,因为Django选择浏览器的语言,用户在从同一个浏览器重新打开网站后不需要重新选择他们的语言。
但是当他们从不同的浏览器打开网站**时,默认语言又是“英语”,因为settings.py中的LANGUAGE_CODE
变量设置为en-us
。
所以我想做的是让每个用户都有一个选项来选择他们想要的语言作为默认语言。我想通过另一个(类似的)下拉菜单来做到这一点,并要求用户选择一种语言,他们希望作为“默认”,并击中save
按钮,并在保存,我想改变LANGUAGE_CODE
的值为用户选择的一个(即动态改变它)。但是我不知道如何动态地改变LANGUAGE_CODE
的值。
此外,这种方法还有一个问题。假设即使我能够动态地更改这个LANGUAGE_CODE
变量,它也会使网站将所选语言作为 ALL THE USERS 的默认值,而不仅仅是针对更改它的某个特定用户,根据Django的文档:
语言代码:
- 如果没有使用语言环境中间件,它将决定向所有用户提供哪种翻译。
我研究了很多,但找不到适合我的解决方案。我对国际化非常陌生。请帮帮我
3条答案
按热度按时间zysjyyx41#
当然有,这就是翻译的全部意义。你已经被“默认”语言的想法弄糊涂了;他们选择的东西并不是默认的。
Django文档解释了如何显式地为用户设置活动语言。您可以完全按照您描述的方式在保存时设置此选项。
您可能还希望在登录时重新设置此值,同样是通过从用户的配置文件传递值。
ukqbszuj2#
提述问题所述:
我希望用户有自己的“默认语言”为他们的帐户设置。
使用注册用户选择的首选语言翻译Django应用程序可以通过中间件django-user-language-middleware完成。通过查看
user.language
字段中选择的语言(或者问题定义为用户的“默认语言”),可以轻松翻译Django应用。使用方法:
1.向用户模型添加语言字段:
字符串
1.从pip安装中间件:
pip install django-user-language-middleware
个1.将其添加到设置中的中间件类列表中以侦听请求:
型
我希望这可以帮助人们在未来的这个问题上着陆。
gev0vcfq3#
您可以使用i18 n切换器在
settings.py
中更改并保存LANGUAGE_CODE,这样即使使用不同的浏览器也不会更改语言。首先,你需要做以下三个步骤:
1.按照以下两种方法之一(我的答案)将
lang
字段添加到User
模型中,以创建自定义User
模型。* 我推荐更多可定制的方式(我的答案)比更少可定制的方式(我的答案)字符串
1.设置翻译(英语和法语)在我的回答。
1.分别在我的答案和我的答案之后为Django和/或 Django Admin创建i18 n切换器*。
接下来,创建包含
__init__.py
(空文件)的special/middleware/
、special/views/
和special/conf/urls/
文件夹,并将locale.py
、i18n.py
和i18n.py
分别从您的虚拟环境中的django/middleware/locale.py
、django/views/i18n.py
和django/conf/urls/i18n.py
复制到special/middleware/
、special/views/
和special/conf/urls/
文件夹,如下所示:型
然后,将
'django...LocaleMiddleware',
替换为'core...LocaleMiddleware',
中的'django...LocaleMiddleware',
,如下所示:型
然后,将
core/urls.py
中的path(... include("django..."))
替换为path(... include("core..."))
,如下所示:型
然后,将下面的代码添加到
core/special/middleware/locale.py
中,如下所示:型
然后,将下面的代码添加到
core/special/views/i18n.py
中,如下所示:型
最后,将
core/special/conf/urls/i18n.py
中的from django... import set_language
替换为from core... import set_language
,如下所示:型