Я использую 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.