diff --git a/CHANGELOG.md b/CHANGELOG.md index 590eba1f41f..fbc328f2cd7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- Added Laravel event dispatching to Craft’s `Yiisoft\Translator\Translator` instance, enabling `Yiisoft\Translator\Event\MissingTranslationEvent` listeners. ([#18952](https://github.com/craftcms/cms/pull/18952)) - The default value for `GeneralConfig::$loginPath` is now `false`. - Fixed some errors that could occur when running Craft through Laravel Octane ([#18921](https://github.com/craftcms/cms/pull/18921)) - Fixed an error that occurred when Updates were cached and deserialized. diff --git a/src/Translation/LaravelEventDispatcher.php b/src/Translation/LaravelEventDispatcher.php new file mode 100644 index 00000000000..c8fac93ade7 --- /dev/null +++ b/src/Translation/LaravelEventDispatcher.php @@ -0,0 +1,23 @@ +events->dispatch($event); + + return $event; + } +} diff --git a/src/Translation/TranslationServiceProvider.php b/src/Translation/TranslationServiceProvider.php index b6148f3b167..b1aee2cbcea 100644 --- a/src/Translation/TranslationServiceProvider.php +++ b/src/Translation/TranslationServiceProvider.php @@ -20,6 +20,7 @@ public function register(): void locale: app()->getLocale(), fallbackLocale: $this->app->make(ConfigRepository::class)->get('app.fallback_locale'), defaultCategory: 'app', + eventDispatcher: $this->app->make(LaravelEventDispatcher::class), )); } diff --git a/tests/Unit/Translation/TranslationServiceProviderTest.php b/tests/Unit/Translation/TranslationServiceProviderTest.php new file mode 100644 index 00000000000..c4387fc22d5 --- /dev/null +++ b/tests/Unit/Translation/TranslationServiceProviderTest.php @@ -0,0 +1,34 @@ +forgetInstance(Translator::class); + + $translator = app(Translator::class); + $translator->addCategorySources(new CategorySource('custom', new class implements MessageReaderInterface + { + public function getMessage(string $id, string $category, string $locale, array $parameters = []): ?string + { + return null; + } + + public function getMessages(string $category, string $locale): array + { + return []; + } + })); + + $translator->translate('Unavailable message', category: 'custom', locale: 'nl'); + + Event::assertDispatched(fn (MissingTranslationEvent $event): bool => $event->getCategory() === 'custom' + && $event->getLanguage() === 'nl' + && $event->getMessage() === 'Unavailable message'); +});