You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何实现无指定语言偏好时自动重定向到阿拉伯语站点

解决方案

这个需求可以直接实现,不需要修改全站业务代码,仅需调整3处Django配置即可:


1. 修改settings.py配置

首先把默认语言改为阿拉伯语,同时补全多语言相关必填配置:

from django.utils.translation import gettext_lazy as _
import os

LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), )
# 把默认语言从英文改为阿拉伯语
LANGUAGE_CODE = 'ar'
LANGUAGES =(
    ('en', _('english')),
    ('ar', _('Arabic')),
    ('fr', _('french'))
)
# 确保以下两个配置为True(默认一般是开启的,没加的话补上即可)
USE_I18N = True
# 按你的跳转需求保持默认值True即可,默认语言也会展示语言前缀
PREFIX_DEFAULT_LANGUAGE = True

同时检查MIDDLEWARE配置中存在LocaleMiddleware,且位置在SessionMiddleware之后、CommonMiddleware之前:

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware', # 确保这行存在且位置正确
    'django.middleware.common.CommonMiddleware',
    ...
]

2. 调整urls.py配置

你当前的urls.py同时配置了不带语言前缀的业务路径和带前缀的多语言路径,导致访问根路径时不会触发多语言重定向逻辑,修改如下:

urlpatterns = [
    path('admin/', admin.site.urls),
    # 仅保留不需要多语言的系统路径,业务路径全部移到i18n_patterns里
    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')),
)

3. 效果验证

修改完成后重启Django服务即可:

  • 用户首次访问未主动选择语言时,访问http://127.0.0.1:8000/会自动重定向到http://127.0.0.1:8000/ar/
  • 用户主动切换过其他语言后,浏览器会保存语言偏好cookie,后续访问会优先使用用户选过的语言,不会被强制覆盖

内容的提问来源于stack exchange,提问作者YahyaST18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:36:04