Skip to content

Commit

Permalink
[FrameworkBundle][config] allow multiple fallback locales.
Browse files Browse the repository at this point in the history
  • Loading branch information
aitboudad committed Jan 25, 2015
1 parent 51983d0 commit 1251f0e
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 7 deletions.
Expand Up @@ -364,8 +364,13 @@ private function addTranslatorSection(ArrayNodeDefinition $rootNode)
->arrayNode('translator')
->info('translator configuration')
->canBeEnabled()
->fixXmlConfig('fallback')
->children()
->scalarNode('fallback')->defaultValue('en')->end()
->arrayNode('fallbacks')
->beforeNormalization()->ifString()->then(function ($v) { return array($v); })->end()
->prototype('scalar')->end()
->defaultValue(array('en'))
->end()
->end()
->end()
->end()
Expand Down
Expand Up @@ -226,7 +226,7 @@ private function registerProfilerConfiguration(array $config, ContainerBuilder $
'memcached' => 'Symfony\Component\HttpKernel\Profiler\MemcachedProfilerStorage',
'redis' => 'Symfony\Component\HttpKernel\Profiler\RedisProfilerStorage',
);
list($class,) = explode(':', $config['dsn'], 2);
list($class, ) = explode(':', $config['dsn'], 2);
if (!isset($supported[$class])) {
throw new \LogicException(sprintf('Driver "%s" is not supported for the profiler.', $class));
}
Expand Down Expand Up @@ -534,10 +534,7 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder
// Use the "real" translator instead of the identity default
$container->setAlias('translator', 'translator.default');
$translator = $container->findDefinition('translator.default');
if (!is_array($config['fallback'])) {
$config['fallback'] = array($config['fallback']);
}
$translator->addMethodCall('setFallbackLocales', array($config['fallback']));
$translator->addMethodCall('setFallbackLocales', array($config['fallbacks']));

// Discover translation directories
$dirs = array();
Expand Down
Expand Up @@ -125,6 +125,9 @@
</xsd:complexType>

<xsd:complexType name="translator">
<xsd:sequence>
<xsd:element name="fallback" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="enabled" type="xsd:boolean" />
<xsd:attribute name="fallback" type="xsd:string" />
</xsd:complexType>
Expand Down
Expand Up @@ -115,7 +115,7 @@ protected static function getBundleDefaultConfig()
),
'translator' => array(
'enabled' => false,
'fallback' => 'en',
'fallbacks' => array('en'),
),
'validation' => array(
'enabled' => false,
Expand Down
@@ -0,0 +1,7 @@
<?php

$container->loadFromExtension('framework', array(
'translator' => array(
'fallbacks' => array('en', 'fr'),
),
));
@@ -0,0 +1,15 @@
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">

<framework:config secret="s3cr3t">
<framework:translator enabled="true">
<framework:fallback>en</framework:fallback>
<framework:fallback>fr</framework:fallback>
</framework:translator>
</framework:config>
</container>
@@ -0,0 +1,3 @@
framework:
translator:
fallbacks: [en, fr]
Expand Up @@ -206,6 +206,14 @@ public function testTranslator()
$this->assertEquals(array('fr'), $calls[0][1][0]);
}

public function testTranslatorMultipleFullback()
{
$container = $this->createContainerFromFile('translator_fallbacks');

$calls = $container->getDefinition('translator.default')->getMethodCalls();
$this->assertEquals(array('en', 'fr'), $calls[0][1][0]);
}

/**
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
*/
Expand Down

0 comments on commit 1251f0e

Please sign in to comment.