[FrameworkBundle][config] allow multiple fallback locales.

This commit is contained in:
Abdellatif Ait boudad 2015-01-12 11:17:42 +00:00
parent 51983d0583
commit 1251f0e0b2
8 changed files with 45 additions and 7 deletions

View File

@ -364,8 +364,13 @@ class Configuration implements ConfigurationInterface
->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()

View File

@ -226,7 +226,7 @@ class FrameworkExtension extends Extension
'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));
}
@ -534,10 +534,7 @@ class FrameworkExtension extends Extension
// 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();

View File

@ -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>

View File

@ -115,7 +115,7 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase
),
'translator' => array(
'enabled' => false,
'fallback' => 'en',
'fallbacks' => array('en'),
),
'validation' => array(
'enabled' => false,

View File

@ -0,0 +1,7 @@
<?php
$container->loadFromExtension('framework', array(
'translator' => array(
'fallbacks' => array('en', 'fr'),
),
));

View File

@ -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>

View File

@ -0,0 +1,3 @@
framework:
translator:
fallbacks: [en, fr]

View File

@ -206,6 +206,14 @@ abstract class FrameworkExtensionTest extends TestCase
$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
*/