Laravel лучший способ использования setlocale с углеродом

Я новичок в фреймворке laravel и ООП. Я создаю небольшое веб-приложение.

Одна из вещей, которая каждый раз возвращается на веб-сайт, — это сегодняшняя дата. Чтобы сгенерировать сегодняшнюю дату, я использую Carbon вот так

{{ carbon\carbon::today()->formatLocalized(' %d %B %Y') }} на мой взгляд.

Это отлично работает и возвращает мне следующее: «1 марта 2017 года». Поскольку мое приложение должно быть на голландском языке, я искал функцию для установки дат на голландский язык. Я нашел это: setlocale(LC_ALL, 'nl_NL'); Что работает просто отлично, за исключением того, что я должен добавить его к каждому методу контроллера, который я использую для представлений, где мне нужна дата.

Есть ли лучшее/более чистое решение для этого? Например, где-то я могу установить его глобально.


person Giesburts    schedule 01.03.2017    source источник
comment
в config/app.php вы можете установить локаль и часовой пояс.   -  person Khoon    schedule 01.03.2017
comment
Это не работает, когда я меняю значение по умолчанию en на nl, поэтому я думаю, что это не поддерживается для голландского языка.   -  person Giesburts    schedule 01.03.2017
comment
Вы пытаетесь NL_nl или просто nl?   -  person Amarnasan    schedule 01.03.2017
comment
Оба, 'locale' => 'NL_nl',, 'locale' => 'nl',, а также `'locale' =› 'nl_NL',`. Оба для локали как fallback_locale   -  person Giesburts    schedule 01.03.2017


Ответы (1)


Два пути:

1) класс BaseController, в __construct() вы можете использовать setlocale(), затем вы получаете каждый локализованный контроллер из класса BaseController. 2) в промежуточном программном обеспечении

Не знаю, может ли ваша локаль меняться по запросу (например, ?locale=xx), хранится ли пользователь с аутентификацией или другим способом, но 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);
}
person dparoli    schedule 01.03.2017
comment
Поэтому я попытался использовать первый вариант. В контроллере по умолчанию я добавил метод __construct, а внутри него добавил код. Кажется, это работает. Это чистый способ? - person Giesburts; 01.03.2017
comment
если вы используете только контроллер для маршрутов разрешения, в котором вы хотите, чтобы локализованные даты были чистым способом - person dparoli; 01.03.2017
comment
Первый вариант не чистый. Второй вроде как, но вы действительно должны попытаться исправить это через конфигурацию приложения. - person Amarnasan; 01.03.2017