Laravel 结合 carbon 使用 setlocale 的最佳方式

Laravel best way of using setlocale with carbon

我是 laravel 框架和 OOP 的新手。我正在构建一个小型网络应用程序。

每次在网站上返回的内容之一就是今天的日期。为了生成今天的日期,我像这样使用 Carbon

{{ carbon\carbon::today()->formatLocalized(' %d %B %Y') }} 在我看来。

效果很好,并返回以下信息:“2017 年 3 月 1 日”。因为我的应用程序假设是荷兰语,所以我搜索了一个将日期设置为荷兰语的函数。我发现了这个:setlocale(LC_ALL, 'nl_NL');除了我必须将它添加到我用于需要日期的视图的每个控制器方法之外,什么工作得很好。

是否有 better/cleaner 解决方案?就像在某个地方我可以将其设置为全局。

两种方式:

1) 一个 BaseController class,在 __construct() 中你可以使用 setlocale(),接下来你从 BaseController class 派生每个本地化控制器。 2) 在一个中间件中

不知道您的区域设置是否可以根据请求更改(即?locale=xx),存储在 authenticad 用户或其他方式,但上面的 2 种方法应该适用于固定或更改的区域设置。

我使用中间件的方式:

 public function handle($request, Closure $next)
 {
    $locale = false;
    if(Auth::user()){
        $locale = Auth::user()->locale;
    }elseif(session()->has('locale')) {
        $locale = session('locale');
    }elseif($request->has('locale')) {
        $locale = request('locale');
    }
    if($locale && array_key_exists($locale, config('app.locales'))) {
        app()->setLocale($locale);
        setlocale(LC_ALL, $locale);
    }
    return $next($request);
}