Laravel本地化无法返回翻译字符串问题求助
Laravel本地化翻译不生效排查方案
确认翻译文件位置与命名
- Laravel 9+版本:翻译文件需放在项目根目录的
lang文件夹下,文件名必须是np.json(全小写,无拼写错误) - Laravel 8及更早版本:文件需放在
resources/lang文件夹下 - 避免文件名错误,比如写成
nepali.json或NP.json
- Laravel 9+版本:翻译文件需放在项目根目录的
校验JSON文件语法
- 执行命令检查JSON语法是否合法:
php -r "json_decode(file_get_contents('lang/np.json')); if (json_last_error() !== JSON_ERROR_NONE) echo json_last_error_msg();" - 确保键名
"Candidate"与调用的__('Candidate')完全一致,包括大小写、空格,无隐形字符
- 执行命令检查JSON语法是否合法:
确认应用实际locale
- 在视图中直接输出
{{ app()->getLocale() }},验证当前生效的locale是否为np - 检查是否有中间件、服务提供者或业务逻辑动态覆盖了locale设置(比如从请求参数、cookie读取locale)
- 临时手动设置locale测试:
app()->setLocale('np'); dd(__('Candidate'));
- 在视图中直接输出
检查翻译优先级
- 确认不存在
lang/np/Candidate.php或resources/lang/np/Candidate.php这类PHP翻译文件,PHP翻译文件的优先级高于JSON文件
- 确认不存在
清理额外缓存
- 执行以下命令彻底清理缓存:
php artisan optimize:clear php artisan view:clear - 若使用OPcache,重启PHP服务或清除OPcache缓存(避免旧翻译文件被缓存)
- 执行以下命令彻底清理缓存:
测试最简场景
- 创建测试路由验证:
Route::get('/test-trans', function () { app()->setLocale('np'); return __('Candidate'); }); - 访问该路由,若返回正确翻译,则说明原视图/控制器存在其他逻辑干扰
- 创建测试路由验证:
内容的提问来源于stack exchange,提问作者Sambhav
相关产品推荐
相关产品推荐

