Skip to content

Commit

Permalink
IBX-2301: Added configuration to enable translations from i18n pack…
Browse files Browse the repository at this point in the history
…age (#78)

* IBX-2301: Added onfiguration to enable translations from `i18n` package

* IBX-1821: Fixed docblock
  • Loading branch information
mikadamczyk authored Feb 18, 2022
1 parent e3cd9f0 commit 49c5741
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,15 @@ public function process(ContainerBuilder $container)
$collector = new GlobCollector($container->getParameterBag()->get('kernel.project_dir'));

$availableTranslations = [self::ORIGINAL_TRANSLATION];
foreach ($collector->collect() as $file) {
/* TODO - to remove when translation files will have proper names. */
if (isset(self::LOCALES_MAP[$file['locale']])) {
$file['locale'] = self::LOCALES_MAP[$file['locale']];

if ($container->getParameter('ibexa.ui.translations.enabled')) {
foreach ($collector->collect() as $file) {
/* TODO - to remove when translation files will have proper names. */
if (isset(self::LOCALES_MAP[$file['locale']])) {
$file['locale'] = self::LOCALES_MAP[$file['locale']];
}
$availableTranslations[] = $file['locale'];
}
$availableTranslations[] = $file['locale'];
}

$container->setParameter('available_translations', array_values(array_unique($availableTranslations)));
Expand Down
34 changes: 34 additions & 0 deletions src/bundle/Core/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public function getConfigTreeBuilder()
$this->addImagePlaceholderSection($rootNode);
$this->addUrlWildcardsSection($rootNode);
$this->addOrmSection($rootNode);
$this->addUITranslationsSection($rootNode);

// Delegate SiteAccess config to configuration parsers
$this->mainSiteAccessConfigParser->addSemanticConfig($this->generateScopeBaseNode($rootNode));
Expand Down Expand Up @@ -529,6 +530,39 @@ private function addOrmSection($rootNode): ArrayNodeDefinition
->end()
->end();
}

/**
* Defines configuration for UI Translations.
*
* The configuration is available at:
* <code>
* ibexa:
* ui:
* translations:
* enabled: true
*
* </code>
*
* @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode
*/
private function addUITranslationsSection($rootNode): ArrayNodeDefinition
{
return $rootNode
->children()
->arrayNode('ui')
->children()
->arrayNode('translations')
->children()
->booleanNode('enabled')
->defaultFalse()
->info('When enabled UI will be translated based on translations from i18n package')
->end()
->end()
->end()
->end()
->end()
->end();
}
}

class_alias(Configuration::class, 'eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration');
6 changes: 6 additions & 0 deletions src/bundle/Core/DependencyInjection/IbexaCoreExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ public function load(array $configs, ContainerBuilder $container)
$this->registerUrlAliasConfiguration($config, $container);
$this->registerUrlWildcardsConfiguration($config, $container);
$this->registerOrmConfiguration($config, $container);
$this->registerUITranslationsConfiguration($config, $container);

// Routing
$this->handleRouting($config, $container, $loader);
Expand Down Expand Up @@ -320,6 +321,11 @@ private function registerOrmConfiguration(array $config, ContainerBuilder $conta
$container->setParameter('ibexa.orm.entity_mappings', $entityMappings);
}

private function registerUITranslationsConfiguration(array $config, ContainerBuilder $container): void
{
$container->setParameter('ibexa.ui.translations.enabled', $config['ui']['translations']['enabled'] ?? false);
}

/**
* Handle routing parameters.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,20 @@ protected function registerCompilerPass(ContainerBuilder $container): void
$container->addCompilerPass(new TranslationCollectorPass());
}

public function testTranslationCollector(): void
{
/**
* @dataProvider translationCollectorProvider
*/
public function testTranslationCollector(
bool $translationsEnabled,
array $availableTranslations
): void {
$this->setDefinition('translator.default', new Definition());
$this->setParameter('kernel.project_dir', __DIR__ . $this->normalizePath('/../Fixtures'));
$this->setParameter('ibexa.ui.translations.enabled', $translationsEnabled);

$this->compile();

$this->assertContainerBuilderHasParameter('available_translations', ['en', 'hi', 'nb']);
$this->assertContainerBuilderHasParameter('available_translations', $availableTranslations);
}

/**
Expand All @@ -37,6 +43,22 @@ private function normalizePath($path)
{
return str_replace('/', \DIRECTORY_SEPARATOR, $path);
}

/**
* @return iterable<string,array{bool,array{string}}>
*/
public function translationCollectorProvider(): iterable
{
yield 'translations enabled' => [
true,
['en', 'hi', 'nb'],
];

yield 'translations disabled' => [
false,
['en'],
];
}
}

class_alias(TranslationCollectorPassTest::class, 'eZ\Bundle\EzPublishCoreBundle\Tests\DependencyInjection\Compiler\TranslationCollectorPassTest');
38 changes: 38 additions & 0 deletions tests/bundle/Core/DependencyInjection/IbexaCoreExtensionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,44 @@ public function testImageMagickConfigurationBasic()
$this->assertContainerBuilderHasParameter('ibexa.image.imagemagick.executable', basename($_ENV['imagemagickConvertPath']));
}

/**
* @dataProvider translationsConfigurationProvider
*/
public function testUITranslationsConfiguration(
bool $enabled,
bool $expectedParameterValue
): void {
if (is_bool($enabled)) {
$this->load(
[
'ui' => [
'translations' => [
'enabled' => $enabled,
],
],
]
);
}

$this->assertContainerBuilderHasParameter('ibexa.ui.translations.enabled', $expectedParameterValue);
}

/**
* @return iterable<string,array{bool,array{string}}>
*/
public function translationsConfigurationProvider(): iterable
{
yield 'translations enabled' => [
true,
true,
];

yield 'translations disabled' => [
false,
false,
];
}

public function testImageMagickConfigurationFilters()
{
if (!isset($_ENV['imagemagickConvertPath']) || !is_executable($_ENV['imagemagickConvertPath'])) {
Expand Down

0 comments on commit 49c5741

Please sign in to comment.