Laravel中mcamara/laravel-localization在ServiceProvider与视图返回结果不一致问题
问题原因分析
核心原因是代码执行时机的差异,导致LaravelLocalization扩展的初始化状态不同:
AppServiceProvider::boot() 阶段:
Laravel的服务提供者boot方法在路由中间件执行前就会触发。这时候mcamara/laravel-localization的本地化中间件(比如setLocale、localizationRedirect)还没处理当前请求,无法解析URL中的en语言前缀来初始化正确的locale配置。此时调用本地化方法,返回的是系统默认的locale设置(或你配置文件中未经过请求解析的默认值)。dashboard.blade.php 渲染阶段:
视图渲染是在路由中间件执行完成后才进行的。这时候LaravelLocalization已经完成了locale的初始化:通过URL前缀en匹配到了你laravellocalization.php中supportedLocales里对应的完整配置(比如en_GB作为区域码、English作为显示名称),所以返回的是经过请求解析后的正确本地化信息。
验证方法
你可以在AppServiceProvider::boot()中手动触发locale初始化,再调用方法测试:
public function boot() { // 手动设置locale,模拟中间件的操作 \Mcamara\LaravelLocalization\Facades\LaravelLocalization::setLocale('en'); // 再输出本地化信息,结果会和blade中一致 }
内容的提问来源于stack exchange,提问作者ronrun
相关产品推荐
相关产品推荐

