如何在django_language
会话中明确设置Django
?
非常感谢...
答案 0 :(得分:32)
如果您希望用户能够指定语言,请确保已启用LocaleMiddleware
:
MIDDLEWARE_CLASSES = (
...
'django.middleware.locale.LocaleMiddleware',
...
)
然后Django会按顺序查找用户的语言偏好(请参阅trans_real.py中的get_language_from_request
):
request.path_info
中的request.session[settings.LANGUAGE_SESSION_KEY]
; request.COOKIES[settings.LANGUAGE_COOKIE_NAME]
; request.META['HTTP_ACCEPT_LANGUAGE']
中的所有语言,直到被接受为止; settings.LANGUAGE_CODE
。因此,在Django会话中显式设置语言的最简单方法是重写request.session[settings.LANGUAGE_SESSION_KEY]
:
def someview (request):
...
request.session[settings.LANGUAGE_SESSION_KEY] = 'en'
...
答案 1 :(得分:17)
如果您使用版本>= Django 1.8
。这就是我们如何使用它:
from django.utils.translation import LANGUAGE_SESSION_KEY
def someview (request):
...
request.session[LANGUAGE_SESSION_KEY] = 'en'
答案 2 :(得分:1)
我认为最好的方法是遵循 Django 文档:
在您的 urls.py 文件中:
urlpatterns = [
# other libraries
path('i18n/', include('django.conf.urls.i18n')),
]
并且在您的模板文件(例如:“/core.html”)中调用标准的“set_language”视图。我会去找一个 boostrap 切换器:
{% load i18n %}
<ul class="navbar-nav">
<li class="dropdown nav-item">
<a href="#" class="dropdown-toggle nav-link" data-toggle="dropdown">
<i class="nc-icon nc-planet"></i>
</a>
<ul class="dropdown-menu">
<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for lang in languages %}
<button type="submit"
name="language"
value="{{ lang.code }}"
class="dropdown-item">
{{ lang.name_local }}
</button>
{% endfor %}
</form>
</ul>
</li>
</ul>
答案 3 :(得分:0)
考虑使用django.views.i18n.set_language()。通过在URLconf中添加以下行来激活此视图:
# This example makes the view available at /i18n/setlang/
url(r'^i18n/', include('django.conf.urls.i18n')),
为方便起见,Django提出了一个观点,
django.views.i18n.set_language()
,用于设置用户的语言 首选项和重定向到给定的URL,或者,默认情况下,返回到 上一页。视图期望通过POST方法使用语言调用 请求中的参数集。如果启用了会话支持,则视图 将语言选择保存在用户的会话中。否则,它会节省 默认情况下命名的cookie中的语言选择
django_language
。 (名称可以通过改变LANGUAGE_COOKIE_NAME
设置。)