Skip to content

Commit

Permalink
bug #1965 Disable cache warmup when translator is identity translator…
Browse files Browse the repository at this point in the history
… (SanderVerkuil)

This PR was squashed before being merged into the 2.x branch.

Discussion
----------

Disable cache warmup when translator is identity translator

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| Issues        | Fix #1962
| License       | MIT

If the present `translator` does not implement the `TranslatorBag` interface, which is the case if the framework bundle is enabled and either the form, or the validator are enabled, removes the warmup phase.

Commits
-------

b75e5d5 Disable cache warmup when translator is identity translator
  • Loading branch information
kbond committed Jul 8, 2024
2 parents d2347b7 + b75e5d5 commit 280e95d
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/Translator/doc/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ For a better developer experience, TypeScript types definitions are also generat
Then, you will be able to import those JavaScript translations in your assets.
Don't worry about your final bundle size, only the translations you use will be included in your final bundle, thanks to the `tree shaking <https://webpack.js.org/guides/tree-shaking/>`_.

.. note::

This package requires the `translator` to be enabled in your Symfony application. If you don't use the `translator` service, the warmup command will not generate any translations.

Configuring the default locale
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
30 changes: 30 additions & 0 deletions src/Translator/src/DependencyInjection/TranslatorCompilerPass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Symfony\UX\Translator\DependencyInjection;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Translation\TranslatorBagInterface;

class TranslatorCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container): void
{
if (!$this->hasValidTranslator($container)) {
$container->removeDefinition('ux.translator.cache_warmer.translations_cache_warmer');
}
}

private function hasValidTranslator(ContainerBuilder $containerBuilder): bool
{
if (!$containerBuilder->hasDefinition('translator')) {
return false;
}

$translator = $containerBuilder->getDefinition('translator');
if (!is_subclass_of($translator->getClass(), TranslatorBagInterface::class)) {
return false;
}
return true;
}
}
7 changes: 7 additions & 0 deletions src/Translator/src/UxTranslatorBundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@

namespace Symfony\UX\Translator;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\UX\Translator\DependencyInjection\TranslatorCompilerPass;

/**
* @author Hugo Alliaume <[email protected]>
Expand All @@ -26,4 +28,9 @@ public function getPath(): string
{
return \dirname(__DIR__);
}

public function build(ContainerBuilder $container): void
{
$container->addCompilerPass(new TranslatorCompilerPass());
}
}
4 changes: 4 additions & 0 deletions src/Translator/tests/Kernel/FrameworkAppKernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ public function registerContainerConfiguration(LoaderInterface $loader)
'secret' => '$ecret',
'test' => true,
'translator' => [
'enabled' => match ($this->environment) {
'test_without_translator' => false,
default => true,
},
'fallbacks' => ['en'],
],
'http_method_override' => false,
Expand Down
1 change: 1 addition & 0 deletions src/Translator/tests/UxTranslatorBundleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public static function provideKernels()
{
yield 'empty' => [new EmptyAppKernel('test', true)];
yield 'framework' => [new FrameworkAppKernel('test', true)];
yield 'framework without translator' => [new FrameworkAppKernel('test_without_translator', true)];
}

/**
Expand Down

0 comments on commit 280e95d

Please sign in to comment.