Rgf*_*Iff 5 python django django-i18n
当用户单击 Django 中的按钮时,我试图更改网站的语言。
\n\n我有一个基础项目,网址是:
\n\nurlpatterns += i18n_patterns(\n # Ecommerce is the app where I want to change the language\n url(r\'^\', include("ecommerce.urls")),\n)\nRun Code Online (Sandbox Code Playgroud)\n\nEcommerce.urls 内的 url 是:
\n\nurlpatterns = [\n url(r\'^testing/$\', views.test, name=\'url_testing\'),\n ... other urls\n]\nRun Code Online (Sandbox Code Playgroud)\n\n当我访问上面的网址时,我首先访问:http://localhost/en/testing/。
我想设置一个链接<a href="{% url \'url_testing\' %}">Change Language</a>,以便当用户单击它时,它会将语言更改为http://localhost/zh-hans/testing/. 如何在我的模板中执行此操作?
编辑
\n\n我现在可以使用以下代码更改语言,但问题是它只能工作一次:
\n\n<form id="languageForm" action="/i18n/setlang/" method="post">\n {% csrf_token %}\n <input name="next" type="hidden" value="{% url \'url_testing\' %}" /> \n <input id="newLanguageInput" type="hidden" name="language"/>\n</form>\nRun Code Online (Sandbox Code Playgroud)\n\n我的链接是:
\n\n<li><a onclick="changeLanguage(\'zh-hans\')">\xe7\xae\x80\xe4\xbd\x93</a></li>\n<li><a onclick="changeLanguage(\'zh-hant\')">\xe7\xb9\x81\xe9\xab\x94</a></li>\nRun Code Online (Sandbox Code Playgroud)\n\n函数changeLanguage定义如下:
\n\nfunction changeLanguage(newLanguage) {\n $(\'input[name="newLanguageInput"]\').val(newLanguage);\n $(\'#languageForm\').submit();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当我第一次单击这 2 个链接中的任何一个时,该代码就会起作用,并且我将被重定向到 urlhttp://localhost/zh-hans/testing/或http://localhost/zh-hant/testing/. 问题是我改变一次语言后,它就不再改变了。我的提交有问题吗?
小智 6
当用户单击链接(无网址翻译,无帖子)时,您可以更改网站的语言,如下所示:
navigation.html(带有 bootstrap4 和很棒的字体)
<li class="nav-item dropdown">
{% get_current_language as LANGUAGE_CODE %}
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">{{ LANGUAGE_CODE }}</a>
<div class="dropdown-menu dropdown-menu-right">
{% get_available_languages as languages %}
{% for lang_code, lang_name in languages %}
<a href="{% url 'main:activate_language' lang_code %}" class="dropdown-item">
{% if lang_code == LANGUAGE_CODE %}
<i class="fas fa-check-circle"></i>
{% else %}
<i class="far fa-circle"></i>
{% endif %}
{{ lang_name }} ({{ lang_code }})
</a>
{% endfor %}
</div>
</li>
Run Code Online (Sandbox Code Playgroud)
视图.py
from django.shortcuts import redirect
from django.utils import translation
from django.views.generic.base import View
class ActivateLanguageView(View):
language_code = ''
redirect_to = ''
def get(self, request, *args, **kwargs):
self.redirect_to = request.META.get('HTTP_REFERER')
self.language_code = kwargs.get('language_code')
translation.activate(self.language_code)
request.session[translation.LANGUAGE_SESSION_KEY] = self.language_code
return redirect(self.redirect_to)
Run Code Online (Sandbox Code Playgroud)
urls.py
from django.urls import path
from .views import ActivateLanguageView
app_name = 'main'
urlpatterns = [
path('language/activate/<language_code>/', ActivateLanguageView.as_view(), name='activate_language'),
]
Run Code Online (Sandbox Code Playgroud)
这对我来说是工作。