Laravel 5.5中Carbon::setLocale()放置位置及全局本地化配置位置咨询
在Laravel 5.5中全局配置Carbon本地化的正确姿势
嘿,我来帮你搞定这个Carbon本地化的问题~ 在Laravel 5.5里,框架并没有提供专门的配置文件来直接设置Carbon的全局语言,但我们可以通过几个标准位置让Carbon::setLocale()全局生效,下面分场景说明:
1. 固定单语言场景:用AppServiceProvider的boot方法
这是最常用、最稳妥的方式,适合你的应用只使用一种语言的情况。
打开app/Providers/AppServiceProvider.php,在boot()方法里添加Carbon的本地化设置,直接复用Laravel的全局语言配置,不用硬编码:
public function boot() { // 同步Laravel应用的默认语言到Carbon \Carbon\Carbon::setLocale(config('app.locale')); }
这样每次应用启动(不管是Web请求还是Artisan命令行任务),Carbon都会自动使用你在.env或config/app.php里设置的APP_LOCALE值,实现全局生效。
2. 多语言动态切换场景:用全局中间件
如果你的应用是多语言站点,需要根据用户的请求动态切换Carbon的语言,那用全局中间件会更合适:
步骤1:创建中间件
运行Artisan命令生成中间件文件:
php artisan make:middleware SetCarbonLocale
打开生成的app/Http/Middleware/SetCarbonLocale.php,修改handle()方法:
public function handle($request, Closure $next) { // 优先从请求头获取用户偏好语言, fallback到应用默认语言 $locale = $request->header('Accept-Language') ?? config('app.locale'); \Carbon\Carbon::setLocale($locale); return $next($request); }
步骤2:注册全局中间件
打开app/Http/Kernel.php,把这个中间件添加到$middleware数组中:
protected $middleware = [ // ... 其他已存在的中间件 \App\Http\Middleware\SetCarbonLocale::class, ];
这样每个请求进来时,Carbon都会根据用户的语言偏好自动切换本地化设置。
测试验证
设置完成后,你可以在控制器或视图里快速验证效果:
// 中文环境会输出“5分钟前”,英文环境输出“5 minutes ago” dd(\Carbon\Carbon::now()->subMinutes(5)->diffForHumans());
内容的提问来源于stack exchange,提问作者mikro
相关产品推荐
相关产品推荐

