Laravel 8.83.27翻译回退功能失效问题排查
Laravel本地化回退语言不生效问题(分组翻译场景)
问题原因
核心问题出在分组翻译的文件存在性检查逻辑:
当使用分组形式的翻译键(如tg.lang.answer)时,Laravel会先校验当前语言(es)目录下是否存在对应分组文件(resources/lang/es/tg.php)。如果该文件不存在,哪怕回退语言(en)有对应的分组文件,Translator也会直接返回键名,不会触发回退语言的查找流程。
你的场景里,resources/lang/es/下只有空的es.json,缺少tg.php分组文件,导致回退逻辑未被触发。
解决方案
方案1:创建对应语言的分组空文件(推荐)
在resources/lang/es/目录下新建tg.php文件,内容写空数组即可:
<?php return [];
这样Laravel会识别到es语言下存在tg分组,当找不到lang.answer键时,会自动去回退语言en的tg.php文件中查找对应值。
方案2:改用JSON格式翻译键(可选)
如果不需要使用分组翻译,可以将翻译键迁移到JSON文件中:
- 在
resources/lang/en.json中添加:"tg.lang.answer": "some answer text" - 确保
resources/lang/es.json保持存在(即使为空)
此时使用__('tg.lang.answer')会正常触发回退逻辑,因为JSON翻译的回退逻辑不依赖分组文件的存在性。
验证测试
执行原有测试代码:
\App::setLocale('en'); $en = __('tg.lang.answer'); // 返回'some answer text' \App::setLocale('es'); $es = __('tg.lang.answer'); // 现在会返回'some answer text'
内容的提问来源于stack exchange,提问作者Nick Kre
相关产品推荐
相关产品推荐

