Каков наилучший способ локализовать дату на Laravel?

Возьмем следующий пример:

{{ $article->created_at->format('M') }} 

Он возвращает Nov . Мне нужно локализовать это на моем языке, поэтому выход должен быть Kas

Мы подумали о следующем:

 {{ trans("language.{$article->created_at->format('M')}") }} app/lang/tr/language.php -> 'nov' => 'kas' 

Это выглядит как изобретать колесо и программно довольно ужасно. Я уверен, что есть некоторые стандарты локализации. Что-то вроде:

 {{ $article->created_at->format('M')->localiseTo('tr_TR') }} 

Каков наилучший способ достичь этого?

Solutions Collecting From Web of "Каков наилучший способ локализовать дату на Laravel?"

Используя библиотеку Laravel-Date, вам просто нужно установить язык приложения в файле конфигурации приложения Laravel и использовать его функции для форматирования даты по своему желанию.

Задайте язык в /app/config/app.php

 'locale' => 'es', 

Я нашел эту библиотеку довольно полезной и чистой. Чтобы использовать его, вы можете написать что-то вроде примера в файле readme библиотеки. Я оставляю результаты на испанском языке.

 echo Date::now()->format('lj FYH:i:s'); // domingo 28 abril 2013 21:58:16 echo Date::parse('-1 day')->diffForHumans(); // 1 día atrás 

Это ссылка на репозиторий:

https://github.com/jenssegers/laravel-date

Чтобы установить эту библиотеку, вы можете следовать инструкциям, указанным в следующей ссылке:

https://github.com/jenssegers/laravel-date#installation

Когда вы получаете дату с модели в Laravel, вы возвращаете объект Carbon: https://github.com/briannesbitt/Carbon

Если вы ссылаетесь на документацию Carbon, она сообщает вам, как вы можете получить отформатированную локали Date:

К сожалению, базовый класс DateTime не поддерживает локализацию. Чтобы начать поддержку локализации, был добавлен метод formatLocalized ($ format). Реализация делает вызов strftime, используя текущую временную метку экземпляра. Если вы сначала установите текущую локаль с помощью setlocale (), возвращаемая строка будет отформатирована в правильной локали.

 setlocale(LC_TIME, 'German'); echo $dt->formatLocalized('%A %d %B %Y'); // Donnerstag 25 Dezember 1975 setlocale(LC_TIME, ''); echo $dt->formatLocalized('%A %d %B %Y'); // Thursday 25 December 1975 

В основном, просто используйте formatLocalized('M') вместо format('M')

Также рекомендуется устанавливать локаль в глобальном масштабе для каждого запроса (например, в filters.php) при использовании экземпляров даты Carbon.

 App::before(function($request) { setlocale(LC_TIME, 'sk_SK.utf8'); }); 

и затем, как обычно,

 $dt->formatLocalized('%b'); // $dt is carbon instance 

См. Здесь параметры формата и список локалей.

В дополнение к принятому ответу, я искал способ использовать это в Blade, используя экземпляр Carbon created_at, например. Класс в принятом ответе, похоже, не принимал экземпляр Carbon в качестве даты, а скорее разбирал дату из строки.

Я написал небольшую вспомогательную функцию, чтобы сократить код в шаблонах клинков:

 function localeDate($date, $format) { return Jenssegers\Date\Date::createFromFormat('dmY H:i:s', $date->format('dmY H:i:s'))->format($format); } 

Внутри Blade теперь вы можете использовать:

 {{ localeDate($model->created_at, 'F') }} 

Которая вернет полностью записанное имя месяца в локали, установленной в config / app.php

Если есть лучший способ (или я что-то пропустил в коде), пожалуйста, дайте мне знать. В противном случае это может быть полезно для других.

Думаю, вам следует проконсультироваться с man- страницей setlocale . Хотя я не уверен, что у Laravel есть обертка.