Carbon setLocale не работает Laravel

#php #laravel #format #carbon

#php #laravel #php-carbon

Вопрос:

Я прочитал несколько stackoverflows о set locale. Я протестировал locale -a в терминале, чтобы проверить, есть ли там моя локаль, и она была. В AppServiceProvider добавлено следующее правило кода:

 public function boot()
{
    Carbon::setLocale($this->app->getLocale());
}
 

$this->app->getLocale() возвращает «nl»

Кто-нибудь знает, почему Carbon по-прежнему показывает воскресенье вместо Zondag, например?

Ответ №1:

Перевод углеродной даты с использованием глобального локализованного формата

Протестировано в: Laravel 5.8, Laravel 6, Laravel 8


В config/app.php

 'locale' => 'id', // The default is 'en', but this time I want localize them to Indonesian (ID)
 

Затем, чтобы сделать вывод локали, сделайте что-то вроде этого:

 // WITHOUT LOCALE
CarbonCarbon::parse('2019-03-01')->format('d F Y'); //Output: "01 March 2019"
now()->subMinute(5)->diffForHumans(); // Output: "5 minutes ago"

// WITH LOCALE
CarbonCarbon::parse('2019-03-01')->translatedFormat('d F Y'); // Output: "01 Maret 2019"
now()->subMinute(5)->diffForHumans(); // Output: "5 menit yang lalu"
 

Для получения дополнительной информации о преобразовании дат локализации вы можете посмотреть по ссылке ниже
https://carbon.nesbot.com/docs/#api-localization

Комментарии:

1. Это следует использовать для Laravel 8

2. Обратите внимание, что если вы используете Laravel 5.5 , локаль будет автоматически установлена в соответствии с текущим последним выполнением App:setLocale. Итак diffForHumans , isoFormat , translatedFormat и локализованные свойства, такие как ->dayName или ->monthName , будут локализованы прозрачно.

Ответ №2:

Возможно, вы захотите использовать setLocale(LC_TIME, $this->app->getLocale()) где-нибудь в начале вашего приложения.

Затем, если вы хотите иметь локализованный формат даты с локальными именами, используйте formatLocalized функцию

 Carbon::now()->formatLocalized('%d %B %Y');
 

См. http://php.net/manual/en/function.strftime.php для параметра для форматирования

Комментарии:

1. {{$var-> start_at->formatLocalized(‘d-m-Y’)}} похоже, это не работает, это просто echo d-m-y в виде строки

2. вы добавили параметр LC_TIME перед запуском этого шаблона?

3. Это в моем appserviceprovider, так что да, команда должна выполняться при запуске приложения

4. о, подождите, formatLocalized использует другой формат. Попробуйте %d %B %Y

5. Кажется, проблема была в Carbon::setLocale, когда я использовал только setLocale, это сработало, спасибо! перечитывал это в вашем сообщении

Ответ №3:

попробуйте это: setLocale(LC_TIME, app()-> getLocale());

Комментарии:

1. Правильный ответ был дан несколько месяцев назад. Нет необходимости повторять это.