当用户点击Django中的一个按钮时,我试图更改网站的语言。
我有一个基本项目和网址是:
urlpatterns += i18n_patterns(
# Ecommerce is the app where I want to change the language
url(r'^', include("ecommerce.urls")),
)
Ecommerce. url中的网址是:
urlpatterns = [
url(r'^testing/$', views.test, name='url_testing'),
... other urls
]
当我访问上面的网址时,我首先转到:http://localhost/en/testing/
.
我想设置一个链接<a href="{% url 'url_testing' %}">Change Language</a>
,这样当用户单击它时,它会将语言更改为http://localhost/zh-hans/testing/
。如何在我的模板中执行此操作?
编辑
我现在可以使用下面的代码更改语言,但问题是它只能工作一次:
<form id="languageForm" action="/i18n/setlang/" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{% url 'url_testing' %}" />
<input id="newLanguageInput" type="hidden" name="language"/>
</form>
我的链接是:
<li><a onclick="changeLanguage('zh-hans')">简体</a></li>
<li><a onclick="changeLanguage('zh-hant')">繁體</a></li>
函数changeLanguage的定义如下:
function changeLanguage(newLanguage) {
$('input[name="newLanguageInput"]').val(newLanguage);
$('#languageForm').submit();
}
当我第一次点击2个链接中的任何一个时,代码都可以工作,我会被重定向到url http://localhost/zh-hans/testing/
或http://localhost/zh-hant/testing/
。问题是我更改了一次语言后,它就不再更改了。我的提交有什么问题吗?
3条答案
按热度按时间zf9nrax11#
实际上,它不是一个简单的
<a>
链接,而是一个<form>
链接。阅读如何
set_language
重定向视图。此表单将负责更改语言。非常简单。请确保您已先设置了一些
LANGUAGES
。3gtaxfhh2#
您可以在用户单击链接时更改网站的语言(无网址翻译,无帖子),如下所示:
这是我的工作。
wko9yo5t3#
新的代码片段兼容新的API(Boostrap 5和Django〉= 4.0),更新自优秀的@Boris urkan答案。
Django已经放弃了对
translation.LANGUAGE_SESSION_KEY
的支持,所以基本上我们需要使用session cookie来进行设置。Boostrap已更改其下拉列表的jQuery绑定:
代码的其他部分基本保持不变。