diff --git a/src/Plugins/TranslatorPlugin.php b/src/Plugins/TranslatorPlugin.php index 57b19fe..043006d 100644 --- a/src/Plugins/TranslatorPlugin.php +++ b/src/Plugins/TranslatorPlugin.php @@ -2,8 +2,8 @@ namespace InterNACHI\Modular\Plugins; +use Illuminate\Contracts\Translation\Translator; use Illuminate\Support\Collection; -use Illuminate\Translation\Translator; use InterNACHI\Modular\Plugins\Attributes\AfterResolving; use InterNACHI\Modular\Support\FinderFactory; use InterNACHI\Modular\Support\ModuleFileInfo; @@ -31,8 +31,13 @@ public function discover(FinderFactory $finders): iterable public function handle(Collection $data): void { $data->each(function(array $row) { - $this->translator->addNamespace($row['namespace'], $row['path']); - $this->translator->addJsonPath($row['path']); + if (method_exists($this->translator, 'addNamespace')) { + $this->translator->addNamespace($row['namespace'], $row['path']); + } + + if (method_exists($this->translator, 'addJsonPath')) { + $this->translator->addJsonPath($row['path']); + } }); } } diff --git a/tests/Plugins/TranslatorPluginTest.php b/tests/Plugins/TranslatorPluginTest.php index fa3bf5e..a705852 100644 --- a/tests/Plugins/TranslatorPluginTest.php +++ b/tests/Plugins/TranslatorPluginTest.php @@ -2,6 +2,7 @@ namespace InterNACHI\Modular\Tests\Plugins; +use Illuminate\Contracts\Translation\Translator as TranslatorContract; use Illuminate\Support\Facades\Lang; use InterNACHI\Modular\Tests\Concerns\PreloadsAppModules; use InterNACHI\Modular\Tests\TestCase; @@ -41,4 +42,39 @@ public function test_json_translations_are_loaded(): void $translator->get('Hello') ); } + + public function test_custom_translators_that_do_not_extend_the_base_translator_are_supported(): void + { + $this->app->forgetInstance('translator'); + $this->app->singleton('translator', fn() => new CustomTranslator()); + + $translator = $this->app->make('translator'); + + $this->assertInstanceOf(CustomTranslator::class, $translator); + } +} + +class CustomTranslator implements TranslatorContract +{ + protected string $locale = 'en'; + + public function get($key, array $replace = [], $locale = null) + { + return $key; + } + + public function choice($key, $number, array $replace = [], $locale = null) + { + return $key; + } + + public function getLocale() + { + return $this->locale; + } + + public function setLocale($locale) + { + $this->locale = $locale; + } }