[ZendBundle] fixed translator configuration

This commit is contained in:
Fabien Potencier 2010-09-25 07:52:56 +02:00
parent 0b98a2861e
commit eb942c8f18
4 changed files with 31 additions and 17 deletions

View File

@ -40,8 +40,8 @@ class ZendExtension extends Extension
$this->registerLoggerConfiguration($config, $container);
}
if (isset($config['i18n'])) {
$this->registerI18nConfiguration($config, $container);
if (isset($config['translator'])) {
$this->registerTranslatorConfiguration($config, $container);
}
}
@ -85,23 +85,23 @@ class ZendExtension extends Extension
}
/**
* Loads the i18n configuration.
* Loads the translator configuration.
*
* Usage example:
*
* <zend:i18n locale="en" adapter="xliff" data="/path/to/messages.xml" />
* <zend:translator locale="en" adapter="Zend\Translator\Adapter\Xliff" />
*
* @param array $config An array of configuration settings
* @param ContainerBuilder $container A ContainerBuilder instance
*/
protected function registerI18nConfiguration($config, ContainerBuilder $container)
protected function registerTranslatorConfiguration($config, ContainerBuilder $container)
{
$config = $config['i18n'];
$config = $config['translator'];
if (!$container->hasDefinition('zend.i18n')) {
if (!$container->hasDefinition('zend.translator')) {
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
$loader->load('i18n.xml');
$container->setAlias('i18n', 'zend.i18n');
$loader->load('translator.xml');
$container->setAlias('translator', 'zend.translator');
}
if (isset($config['locale'])) {
@ -109,11 +109,11 @@ class ZendExtension extends Extension
}
if (isset($config['adapter'])) {
$container->setParameter('zend.translator.adapter', constant($config['adapter']));
$container->setParameter('zend.translator.adapter', $config['adapter']);
}
if (isset($config['translations']) && is_array($config['translations'])) {
foreach ($config['translations'] as $locale => $catalogue) {
if (isset($config['translation']) && is_array($config['translation'])) {
foreach ($config['translation'] as $locale => $catalogue) {
if ($locale == $container->getParameter('zend.translator.locale')) {
$container->setParameter('zend.translator.catalogue', $catalogue);
}

View File

@ -10,6 +10,7 @@
<xsd:complexType name="config">
<xsd:sequence>
<xsd:element name="logger" type="logger" minOccurs="0" maxOccurs="1" />
<xsd:element name="translator" type="translator" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
@ -39,4 +40,17 @@
<xsd:enumeration value="7" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="translator">
<xsd:sequence>
<xsd:element name="translation" type="translation" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="locale" type="xsd:string" />
<xsd:attribute name="adapter" type="xsd:string" />
</xsd:complexType>
<xsd:complexType name="translation">
<xsd:attribute name="key" type="xsd:string" />
<xsd:attribute name="catalog" type="xsd:string" />
</xsd:complexType>
</xsd:schema>

View File

@ -29,12 +29,12 @@ class ZendExtensionTest extends TestCase
$loader->configLoad(array('logger' => array('priority' => 3)), $container);
$this->assertEquals(3, $container->getParameter('zend.logger.priority'), '->loggerLoad() overrides existing configuration options');
// i18n
$loader->configLoad(array('i18n' => array()), $container);
$this->assertEquals('Zend\\Translator\\Translator', $container->getParameter('zend.translator.class'), '->i&8nLoad() loads the i18n.xml file if not already loaded');
// translator
$loader->configLoad(array('translator' => array()), $container);
$this->assertEquals('Zend\\Translator\\Translator', $container->getParameter('zend.translator.class'), '->i18nLoad() loads the translator.xml file if not already loaded');
$loader->configLoad(array('i18n' => array('adapter' => 'Zend\\Translator\\Translator::AN_XLIFF', 'locale' => 'fr')), $container);
$this->assertEquals('Xliff', $container->getParameter('zend.translator.adapter'), '->i18nLoad() overrides existing configuration options');
$loader->configLoad(array('translator' => array('adapter' => 'Zend\\Translator\\Translator::AN_XLIFF', 'locale' => 'fr')), $container);
$this->assertEquals('Zend\\Translator\\Translator::AN_XLIFF', $container->getParameter('zend.translator.adapter'), '->i18nLoad() overrides existing configuration options');
$this->assertEquals('fr', $container->getParameter('zend.translator.locale'), '->i18nLoad() overrides existing configuration options');
}
}