2015-11-25 5 views
2

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

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

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

App::getLocale() 

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

setlocale(LC_TIME, 'de_DE.utf8') 

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

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

Определить следующее routes.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 (длинное и, возможно, лучшее решение? Ощущается правильное значение)

Так как я это определено в routes.php

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

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

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

в

'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 был implemented и выпущен как версия 1.0.12

ответ

0

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

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

+0

Но это решение изменило бы между 25.11.2015 и 11/25/2015, но не месяц или имя день. Но все же хорошее решение для этого, спасибо –

Смежные вопросы