From 9b5d24fde5f8469618236a61db7caad0bde62c7b Mon Sep 17 00:00:00 2001 From: mamazu <14860264+mamazu@users.noreply.github.com> Date: Sun, 12 Jul 2026 15:15:01 +0200 Subject: [PATCH 1/2] Respecting enabled locales in translator --- .../config/services/integrations/translations.php | 1 + src/Translation/Translator.php | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Resources/config/services/integrations/translations.php b/src/Resources/config/services/integrations/translations.php index 027069d..ad47f83 100644 --- a/src/Resources/config/services/integrations/translations.php +++ b/src/Resources/config/services/integrations/translations.php @@ -44,6 +44,7 @@ 'cache_dir' => '%kernel.cache_dir%/translations', 'debug' => '%kernel.debug%', ], + '%kernel.enabled_locales%', ]) ; diff --git a/src/Translation/Translator.php b/src/Translation/Translator.php index 17aa623..0cdd05f 100644 --- a/src/Translation/Translator.php +++ b/src/Translation/Translator.php @@ -32,17 +32,22 @@ final class Translator extends BaseTranslator implements WarmableInterface private bool $resourcesLoaded = false; + /** @var array */ + private array $enabledLocales = []; + public function __construct( TranslatorLoaderProviderInterface $loaderProvider, TranslatorResourceProviderInterface $resourceProvider, MessageFormatterInterface $messageFormatter, string $locale, array $options = [], + array $enabledLocales = [], ) { $this->assertOptionsAreKnown($options); $this->loaderProvider = $loaderProvider; $this->resourceProvider = $resourceProvider; + $this->enabledLocales = $enabledLocales; $this->options = array_merge($this->options, $options); if (null !== $this->options['cache_dir'] && $this->options['debug']) { @@ -59,7 +64,7 @@ public function warmUp($cacheDir, ?string $buildDir = null): array return []; } - $locales = array_merge( + $locales = $this->enabledLocales ?: array_merge( $this->getFallbackLocales(), [$this->getLocale()], $this->resourceProvider->getResourcesLocales(), From da764b40946577325be04e93573fa676c6f9d7c3 Mon Sep 17 00:00:00 2001 From: mamazu <14860264+mamazu@users.noreply.github.com> Date: Sun, 12 Jul 2026 15:41:30 +0200 Subject: [PATCH 2/2] Adding a test --- src/Translation/Translator.php | 1 + tests/Translation/TranslatorTest.php | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Translation/Translator.php b/src/Translation/Translator.php index 0cdd05f..33c01f9 100644 --- a/src/Translation/Translator.php +++ b/src/Translation/Translator.php @@ -69,6 +69,7 @@ public function warmUp($cacheDir, ?string $buildDir = null): array [$this->getLocale()], $this->resourceProvider->getResourcesLocales(), ); + foreach (array_unique($locales) as $locale) { // reset catalogue in case it's already loaded during the dump of the other locales. if (isset($this->catalogues[$locale])) { diff --git a/tests/Translation/TranslatorTest.php b/tests/Translation/TranslatorTest.php index b924cc2..2b867b6 100644 --- a/tests/Translation/TranslatorTest.php +++ b/tests/Translation/TranslatorTest.php @@ -282,6 +282,18 @@ public function it_creates_a_nested_catalogue_with_fallback_translations(): void $this->assertEquals($catalogue, $translator->getCatalogue()); } + /** + * @test + */ + public function it_does_not_load_unused_locales(): void + { + $translator = $this->createTranslator('en', enabledLocales: ['en']); + $translator->setFallbackLocales(['en']); + + $this->assertNotNull($translator->getCatalogue()); + $this->assertCount(1, $translator->getCatalogues()); + } + public static function getInvalidLocalesTests(): array { return [ @@ -351,13 +363,14 @@ public static function getInvalidOptionsTests(): array /** * @param string[] $options + * @param string[] $enabledLocales */ - private function createTranslator(string $locale = 'en', array $options = []): Translator + private function createTranslator(string $locale = 'en', array $options = [], array $enabledLocales = []): Translator { $loaderProvider = new TranslatorLoaderProvider(); $resourceProvider = new SymfonyTranslatorResourceProvider(); $messageFormatter = new MessageFormatter(); - return new Translator($loaderProvider, $resourceProvider, $messageFormatter, $locale, $options); + return new Translator($loaderProvider, $resourceProvider, $messageFormatter, $locale, $options, $enabledLocales); } }