gpt4 book ai didi

django - 使用翻译后的 url 重定向在 Django 中切换语言

转载 作者:行者123 更新时间:2023-12-03 20:35:53 30 4
gpt4 key购买 nike

我已经正确安装了国际化。

它适用于以下网址:

/en/bookings/ #English
/es/reservas/ #Spanish

在主页中,语言切换也能正常工作。

- 有什么问题吗?

当我更改翻译页面中的语言时,例如/en/bookings/,如果我将语言转换为西类牙语 (es),我将再次重定向到/en/bookings/并看到英文页面。

如果我更改前缀( like this answer ),重定向将转到不存在的/es/bookings/。

我不想被重定向到主页。

- 我喜欢什么?

如果我在/en/bookings/并切换到西类牙语,我想重定向到/es/reservas/,所有翻译的 url。

什么是最好的方法?

谢谢。

最佳答案

我遇到了类似的问题,所以我发送了我的决议以节省您的时间。

主要(网址.py)

from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns

urlpatterns = [
url(r'^i18n/', include('django.conf.urls.i18n')),
]

urlpatterns += i18n_patterns(
url(r'^', include('index.urls', namespace='index')),
)

(index.urls.py)
from django.conf.urls import url
from django.views.generic import TemplateView
from django.utils.translation import ugettext_lazy as _


urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='index/index.html'), name='index'),
url(_(r'^python-programming/$'), TemplateView.as_view(template_name='index/new_page.html'),
name='new_page'),
]

创建模板标签以在我们支持的所有语言中返回当前位置的 url (index.templatetags.helper_tags.py)
from django.template import Library
from django.core.urlresolvers import resolve, reverse
from django.utils.translation import activate, get_language

register = Library()


@register.simple_tag(takes_context=True)
def change_lang(context, lang=None, *args, **kwargs):
"""
Get active page's url by a specified language
Usage: {% change_lang 'en' %}
"""

path = context['request'].path
url_parts = resolve(path)

url = path
cur_language = get_language()
try:
activate(lang)
url = reverse(url_parts.view_name, kwargs=url_parts.kwargs)
finally:
activate(cur_language)

return "%s" % url

创建中间件以在用户单击此子站点的替代链接时更改站点语言但使用不同的语言
(中间件.py)
from django.utils import translation
from django.conf import settings
from django.utils.deprecation import MiddlewareMixin


class LangBasedOnUrlMiddleware(MiddlewareMixin):

@staticmethod
def process_request(request):

if hasattr(request, 'session'):
active_session_lang = request.session.get(translation.LANGUAGE_SESSION_KEY)

if active_session_lang == request.LANGUAGE_CODE:
return

if any(request.LANGUAGE_CODE in language for language in settings.LANGUAGES):
translation.activate(request.LANGUAGE_CODE)
request.session[translation.LANGUAGE_SESSION_KEY] = request.LANGUAGE_CODE

在 LocaleMiddleware 之后将它添加到 (settings.py)
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'our_app.middleware.LangBasedOnUrlMiddleware',
]

模板中的示例用法:
{% load i18n %}
{% load helper_tags %}
{% get_available_languages as languages %}
{% for lang_code, lang_name in languages %}
<a href="{{ request.scheme }}://{{ request.META.HTTP_HOST }}{% change_lang lang_code %}">
{% endfor %}

关于django - 使用翻译后的 url 重定向在 Django 中切换语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28675442/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com