Laravel使用setlocale和碳的最佳方式

时间:2017-03-01 10:23:44

标签: php laravel php-carbon

我是laravel框架和OOP的新手。我正在构建一个小型的webapp。

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

我认为

{{ carbon\carbon::today()->formatLocalized(' %d %B %Y') }}

工作正常,并给我回复以下内容:" 2017年3月1日"。因为我的应用程序假设是荷兰语,我已经搜索了将日期设置为荷兰语的功能。我发现了这个:setlocale(LC_ALL, 'nl_NL');什么工作正常,除了我必须将它添加到我用于需要日期的视图的每个控制器方法。

对此有更好/更清洁的解决方案吗?像某个地方我可以将它设置为全局。

1 个答案:

答案 0 :(得分:3)

两种方式:

1)一个BaseController类,在__construct()中可以使用setlocale(),接下来从BaseController类派生每个本地化控制器。 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);
}