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

Laravel 10基础本地化功能失效,请求技术支持

排查Laravel 10本地化显示键名而非翻译内容的问题

以下是针对性的排查和解决步骤:

1. 检查语言文件的路径与命名

  • 确认lang/en/messages.php存在于项目根目录的lang文件夹中(Laravel 10默认语言文件目录为根目录下的lang,lang:publish命令生成的文件就在此路径)。
  • 核对文件内my_string键的拼写,包括大小写、空格,PHP数组键名区分大小写,必须完全匹配。

2. 验证中间件的执行顺序与逻辑

  • 打开app/Http/Kernel.php,确保web中间件组中LanguageManager放在StartSession中间件之后——Session未初始化时无法读取值,顺序错误会导致中间件无法正确设置语言。示例正确顺序:
    protected $middlewareGroups = [
        'web' => [
            // ...其他中间件
            \Illuminate\Session\Middleware\StartSession::class,
            \App\Http\Middleware\LanguageManager::class,
            // ...其他中间件
        ],
    ];
    
  • 检查LanguageManager中间件逻辑,确保正确读取Session并设置语言:
    public function handle(Request $request, Closure $next)
    {
        if (session()->has('locale')) {
            \App::setLocale(session('locale'));
        }
        return $next($request);
    }
    
    注意:若中间件存在覆盖locale的逻辑,可能会与控制器中的设置冲突。

3. 确认Locale设置的时机

  • 控制器中的\App::setLocale('en');若在中间件之后执行,会被中间件的设置覆盖。可暂时注释中间件,直接在控制器设置locale测试,排除中间件干扰。

4. 清理相关缓存

  • 执行php artisan config:clear清除配置缓存,确保config/app.php中的locale配置生效。
  • 执行php artisan view:clear清除视图缓存,避免Blade模板缓存导致翻译未更新。

5. 测试翻译函数的直接调用

  • 在控制器中添加dd(__('messages.my_string'));,查看输出结果:
    • 若输出仍为my_string,说明语言文件未被正确加载;
    • 若输出正确翻译文本,问题出在Blade模板渲染或缓存。

6. 检查语言加载机制

  • 在config/app.php中设置'fallback_locale' => 'en',确保当前locale无翻译时回退到英文。
  • 排查是否有自定义服务提供者修改了语言加载路径,导致默认lang目录未被识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:45:11