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

React+i18next项目中通过Axios向Django REST Framework传递语言信息

React + i18next + Axios 传递语言信息到后端及Django DRF获取方案

前端实现:全局Axios自动注入语言头

利用Axios请求拦截器,每次发起请求前动态添加当前语言到请求头,这是最简便的全局统一处理方式:

  1. 确保已通过i18next获取当前语言(i18next.language为全局可用的语言标识)
  2. 给你的全局Axios实例添加拦截器:
import i18next from 'i18next';

// 你的全局Axios实例
const client = axios.create({
  baseURL: CONSTANTS.API.BASE,
  headers: {
    "Content-Type": "application/json",
  },
  timeout: TIME_OUT,
});

// 请求拦截器:自动注入语言头
client.interceptors.request.use(
  (config) => {
    // 优先用标准的Accept-Language头,符合HTTP规范
    config.headers['Accept-Language'] = i18next.language;
    // 若需自定义头,可添加:config.headers['X-Language'] = i18next.language;
    return config;
  },
  (error) => Promise.reject(error)
);

注意:如果是在组件内使用,确保i18next已完成初始化,避免获取到空值。

后端Django REST Framework 获取语言信息

方式1:利用Django内置Locale中间件(推荐)

Django默认支持解析Accept-Language请求头,只需配置好相关中间件即可直接获取:

  1. 配置settings.py:
# settings.py
MIDDLEWARE = [
    # 注意顺序:LocaleMiddleware需放在SessionMiddleware和CommonMiddleware之后
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    # ... 其他中间件
]

# 配置支持的语言列表
LANGUAGES = [
    ('zh-hans', '简体中文'),
    ('en', 'English'),
]

# 配置翻译文件路径
LOCALE_PATHS = [
    BASE_DIR / 'locale',
]
  1. 在视图中获取语言:
from rest_framework.views import APIView
from rest_framework.response import Response

class DemoView(APIView):
    def get(self, request):
        # request.LANGUAGE_CODE会自动根据Accept-Language头返回匹配的语言代码
        current_lang = request.LANGUAGE_CODE
        return Response({"current_language": current_lang})

方式2:读取自定义请求头

如果前端使用了自定义头(如X-Language),直接从request的META属性中读取:

class DemoView(APIView):
    def get(self, request):
        # HTTP头在Django中会被转成大写并添加HTTP_前缀
        current_lang = request.META.get('HTTP_X_LANGUAGE', 'en')
        return Response({"current_language": current_lang})

常见问题排查(之前后端未获取到值的可能原因)

  • 前后端头名不匹配:比如前端用X-Language,后端误读HTTP_X_LANG
  • 跨域限制:自定义头需在Django的corsheaders配置中加入CORS_ALLOW_HEADERS列表
  • 前端初始化问题:i18next未完成初始化时,语言值为空,导致注入空的请求头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:05:37