i18next部分语言切换失效自动回退至fallbackLng问题求助
问题分析与修复方案
嘿,我一眼就发现了导致你部分语言切换失效的核心原因,还有几个小细节也需要调整,咱们一步步来:
核心问题:命名空间键名错误
i18next默认使用translation(单数)作为默认命名空间,但你在配置fr、de、it、pt这些语言的资源时,错误地写成了translations(复数)!
对比一下你的代码:
- 正常工作的
en/es配置:en: { translation: { 'landing.main.title': 'EN ENGLISH', }, }, - 失效的
de/fr等配置:de: { translations: { // 这里是复数,和默认命名空间不匹配! 'landing.main.title': 'EN ALEMANNNN', }, },
因为i18next找不到对应translation命名空间的翻译内容,所以自动触发了回退逻辑,切换到fallbackLng设置的语言。
修复方式
把所有失效语言的translations改成translation(单数),示例如下:
fr: { translation: { 'landing.main.title': 'en FRANCES', }, }, de: { translation: { 'landing.main.title': 'EN ALEMANNNN', }, }, it: { translation: { 'landing.main.title': 'EN ITALIANO', }, }, pt: { translation: { 'landing.main.title': 'EN PORTUGUES', }, },
次要问题:几个容易忽略的拼写/路径错误
虽然这些暂时没影响当前功能,但后续可能会引发其他问题,建议一起修正:
- 德语翻译文件路径错误:你导入的是
gr.json(希腊语代码是gr),但德语的正确文件应该是de.json,对应变量名germanTranslationObject。 - 变量名拼写错误:
italianishTranslationObject→ 应该改为italianTranslationObjectportugeseTranslationObject→ 正确拼写是portugueseTranslationObject(多一个u)
- 控制台错误
"rejecting language code not found in supportedLngs: dev":看起来像是某个地方把de误写成了dev,检查一下调用changeLanguage的代码或者其他配置有没有拼写错误。
修复完核心问题后,你再测试切换de、fr等语言,应该就能正常工作了。此时再调用i18n.getDataByLanguage('de'),也会正确返回德语的翻译对象,不会再出现混淆的情况。
内容的提问来源于stack exchange,提问作者Dante Allievi
相关产品推荐
相关产品推荐

