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
相关产品推荐
相关产品推荐

