| <?php |
| |
| namespace Carbon\Laravel; |
| |
| use Carbon\Carbon; |
| use Carbon\CarbonImmutable; |
| use Carbon\CarbonInterval; |
| use Carbon\CarbonPeriod; |
| use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; |
| use Illuminate\Events\Dispatcher; |
| use Illuminate\Events\EventDispatcher; |
| use Illuminate\Support\Carbon as IlluminateCarbon; |
| use Illuminate\Support\Facades\Date; |
| use Throwable; |
| |
| class ServiceProvider extends \Illuminate\Support\ServiceProvider |
| { |
| public function boot() |
| { |
| $this->updateLocale(); |
| |
| if (!$this->app->bound('events')) { |
| return; |
| } |
| |
| $service = $this; |
| $events = $this->app['events']; |
| |
| if ($this->isEventDispatcher($events)) { |
| $events->listen(class_exists('Illuminate\Foundation\Events\LocaleUpdated') ? 'Illuminate\Foundation\Events\LocaleUpdated' : 'locale.changed', function () use ($service) { |
| $service->updateLocale(); |
| }); |
| } |
| } |
| |
| public function updateLocale() |
| { |
| $app = $this->app && method_exists($this->app, 'getLocale') ? $this->app : app('translator'); |
| $locale = $app->getLocale(); |
| Carbon::setLocale($locale); |
| CarbonImmutable::setLocale($locale); |
| CarbonPeriod::setLocale($locale); |
| CarbonInterval::setLocale($locale); |
| |
| if (class_exists(IlluminateCarbon::class)) { |
| IlluminateCarbon::setLocale($locale); |
| } |
| |
| if (class_exists(Date::class)) { |
| try { |
| $root = Date::getFacadeRoot(); |
| $root->setLocale($locale); |
| } catch (Throwable $e) { |
| // Non Carbon class in use in Date facade |
| } |
| } |
| } |
| |
| public function register() |
| { |
| // Needed for Laravel < 5.3 compatibility |
| } |
| |
| protected function isEventDispatcher($instance) |
| { |
| return $instance instanceof EventDispatcher |
| || $instance instanceof Dispatcher |
| || $instance instanceof DispatcherContract; |
| } |
| } |