如何在django中自动将用户重定向到特定语言

ni65a41a  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(108)

我已经添加了新的语言到我的网站,现在它是英语,法语和阿拉伯语一切正常,我不知道如何更改默认语言目前当用户不选择任何语言,该网站显示在英语。一些用户抱怨英语在我的国家没有广泛使用,网站应该用阿拉伯语,所以我想这样做:如果用户没有选择任何语言,它将被自动重定向到阿拉伯语。
所以当我这样访问我的网站时:**http://127.0.0.1:8000/i将自动重定向到:http://127.0.0.1:8000/ar/*
有没有可能做这样的事情,或者我必须改变整个网站的默认代码。
我在urls.py中有此代码

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('core.urls')),
    path('user/',include('users.urls')),
    path('dashboard/',include('dashboard.urls')),
    path('wallet/',include('wallet.urls')),
    path('administration/',include('administration.urls')),
    path('chaining/', include('smart_selects.urls')),
    path('__debug__/', include(debug_toolbar.urls)),

]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += i18n_patterns (
    path('',include('core.urls')),
    path('user/',include('users.urls')),
    path('dashboard/',include('dashboard.urls')),
    path('wallet/',include('wallet.urls')),
    path('administration/',include('administration.urls')),

)

字符串
这是我的设置

from django.utils.translation import gettext_lazy as _
LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), )
LANGUAGE_CODE = 'en'
LANGUAGES =(
('en', ('english')),
('ar', ('Arabic')),
('fr', ('french'))
)

cgh8pdjw

cgh8pdjw1#

如果更改默认语言代码,则必须重写代码中的所有字符串,因为基本语言不会进入po/mo文件。
这里有几个选择。
1.不要改变任何东西Django的locale中间件非常擅长发现语言偏好,并将用户重定向到他们的语言。它首先检查url,然后是任何cookie,然后是浏览器首选项。只有这样,如果没有找到任何东西,Django才会恢复到默认语言(Django如何发现语言偏好)。
1.编写custom middleware。您可以从内置的locale middleware开始,然后调整它,以便在结束时它不会恢复到默认语言,而是恢复到您的目标语言。
1.在服务器设置中处理。您可以指示您的服务器将发送到您的域的所有请求重定向到具有目标语言代码的域。但我不推荐这种方法,因为你会失去Django语言检测的好功能,如1.

kmbjn2e3

kmbjn2e32#

您只需在settings.py中添加这行代码即可

MIDDLEWARE = [

    'django.middleware.locale.LocaleMiddleware', # new

]

字符串

olqngx59

olqngx593#

问题是那些用户-在他们的浏览器设置中优先选择“英语”而不是“阿拉伯语”。我有一个类似的问题,我想只是添加一些代码,如果网站是用英语加载的,但用户在其浏览器中有我的本地语言(出现在request.Meta ['HTTP_ACCEPT_LANGUAGE'])然后问他是否想去本地版本(并设置一些cookie,以避免再次问它,如果他拒绝)。

相关问题