使用Vite+i18next后端加载语言文件时返回HTML而非JSON
问题分析与解决方案
核心问题是文件实际路径和i18next请求路径不匹配:
- 你把翻译文件放在了
public/en/translation.json - 但你的backend配置的
loadPath是/locales/{{lng}}/{{ns}}.json,导致i18next请求的是/locales/en/translation.json,这个路径下没有对应的静态文件,开发服务器就会返回SPA的入口HTML文件(这是单页应用开发服务器的默认行为:找不到静态资源时返回index.html)。
而favicon.png能正常加载,是因为它放在public根目录,请求路径/favicon.png和文件实际位置完全对应。
两种解决办法选其一:
办法1:调整文件结构(推荐,符合i18next常规规范)
在public目录下新建locales文件夹,然后把各语言的翻译文件放到对应子目录里:
public/ └── locales/ ├── en/ │ └── translation.json └── [其他语言目录]/ └── translation.json
这样请求路径/locales/en/translation.json就能匹配到对应的文件了。
办法2:修改backend的loadPath配置
如果不想调整文件结构,直接修改i18n初始化配置里的backend.loadPath:
backend: { overrideMimeType: 'application/json', loadPath: '/{{lng}}/{{ns}}.json' // 去掉配置里的locales/前缀 }
这样i18next会请求/en/translation.json,正好对应你现在的文件位置public/en/translation.json。
你可以直接在浏览器地址栏输入对应的JSON文件路径(比如http://localhost:5173/en/translation.json或/locales/en/translation.json,取决于你选的方案),如果能正常显示JSON内容,就说明路径配置正确了。
内容的提问来源于stack exchange,提问作者Benny Alex
相关产品推荐
相关产品推荐

