diff --git a/app/Providers/LazyCarbonServiceProvider.php b/app/Providers/LazyCarbonServiceProvider.php new file mode 100644 index 00000000..a1d14a9b --- /dev/null +++ b/app/Providers/LazyCarbonServiceProvider.php @@ -0,0 +1,98 @@ +localeListenerRegistered) { + return; + } + + $this->localeListenerRegistered = true; + + $events->listen( + LocaleUpdated::class, + function (LocaleUpdated $event): void { + $this->synchronizeCarbonLocale($event->locale); + } + ); + }; + + if ($this->app->resolved('events')) { + $registerListener( + $this->app->make('events') + ); + + return; + } + + $this->app->afterResolving( + 'events', + $registerListener + ); + } + + private function synchronizeCarbonLocale(string $locale): void + { + $fallback = (string) $this->app['config']->get( + 'app.fallback_locale', + 'en' + ); + + Carbon::setLocale($locale); + CarbonImmutable::setLocale($locale); + CarbonPeriod::setLocale($locale); + CarbonInterval::setLocale($locale); + + Carbon::setFallbackLocale($fallback); + CarbonImmutable::setFallbackLocale($fallback); + CarbonPeriod::setFallbackLocale($fallback); + CarbonInterval::setFallbackLocale($fallback); + + IlluminateCarbon::setLocale($locale); + + if ( + method_exists( + IlluminateCarbon::class, + 'setFallbackLocale' + ) + ) { + IlluminateCarbon::setFallbackLocale($fallback); + } + + try { + $date = Date::getFacadeRoot(); + + if ($date && method_exists($date, 'setLocale')) { + $date->setLocale($locale); + } + + if ( + $date && + method_exists($date, 'setFallbackLocale') + ) { + $date->setFallbackLocale($fallback); + } + } catch (Throwable) { + // Preserve Carbon provider tolerance for custom Date drivers. + } + } +} diff --git a/bootstrap/providers.php b/bootstrap/providers.php index fe679b48..bd2c2900 100644 --- a/bootstrap/providers.php +++ b/bootstrap/providers.php @@ -4,6 +4,7 @@ return [ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, App\Providers\HorizonServiceProvider::class, + App\Providers\LazyCarbonServiceProvider::class, Klevze\ControlPanel\ServiceProvider::class, cPad\Plugins\Artworks\ServiceProvider::class, cPad\Plugins\Forum\ServiceProvider::class, diff --git a/composer.json b/composer.json index a518d5f2..4c009081 100644 --- a/composer.json +++ b/composer.json @@ -102,7 +102,9 @@ }, "extra": { "laravel": { - "dont-discover": [] + "dont-discover": [ + "nesbot/carbon" + ] } }, "config": {