Углерод с Laravellocalization не использует правильную локаль

Я использую mcamara/laravel-localization в своем проекте, и у меня возникла проблема с Carbon не распознает локаль. Когда я использую

$event->start_time->formatLocalized('%A %d %B %Y')

он всегда отображает английский формат, хотя я получаю «de», когда пытаюсь

App::getLocale()

Очевидно, это потому, что углерод использует локаль из операционной системы, а моя ОС имеет «de_DE.utf8», поэтому, если я этого не сделаю

setlocale(LC_TIME, 'de_DE.utf8')

это не работает. Я, очевидно, не могу использовать это таким образом, потому что я использую несколько языков.

  • Вариант 1 (плохой и простой, но работает):

Определите следующее в route.php (или где-то еще)

if(App::getLocale()=="de")
    setlocale(LC_TIME, 'de_DE.utf8');
else if(App::getLocale()=="hr")
    setlocale(LC_TIME, 'hr_HR.utf8');
else 
    setlocale(LC_TIME, 'en_EN.utf8');
  • Вариант 2 (длинное и, возможно, лучшее решение? Кажется правильным)

Поскольку я определил это в route.php

'prefix' => LaravelLocalization::setLocale(),

Я мог бы расширить setLocale(), чтобы установить LC_TIME на de_DE или что-то еще. Но для этого мне нужно было бы добавить «региональный» в config/laravellocalization.php из

'de' => ['name' => 'German','script' => 'Latn', 'native' => 'Deutsch'],

to

'de' => ['regional' => 'de_DE.utf8', 'name' => 'German','script' => 'Latn', 'native' => 'Deutsch'],

Мне также нужно было бы создать такой метод в LaravelLocalization.php (очевидно, я бы расширил класс)

public function getCurrentLocaleRegional()
{
    return $this->supportedLocales[ $this->getCurrentLocale() ][ 'regional' ];
}

Теперь хотелось бы узнать, какой способ лучше? Или есть другое (более простое) решение этой проблемы?

Я работаю над Ubuntu 15.10, если это имеет значение

---------EDIT---------

Для всех, кто читает это, вариант 2 был реализован и выпущен как версия 1.0.12.


person Bojan Kogoj    schedule 25.11.2015    source источник


Ответы (1)


Вы всегда можете создать ключ в файлах lang, чтобы указать Carbon, как писать формат.

Что-то вроде: $event->start_time->formatLocalized(trans('general.date_format'))

person mcamara    schedule 25.11.2015
comment
Но это решение изменится между 25.11.2015 и 25.11.2015, но не месяц или день. Но все же хорошее решение для этого, спасибо - person Bojan Kogoj; 25.11.2015