[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); $this->registerLoggerConfiguration($config, $container);
} }
if (isset($config['i18n'])) { if (isset($config['translator'])) {
$this->registerI18nConfiguration($config, $container); $this->registerTranslatorConfiguration($config, $container);
} }
} }
@ -85,23 +85,23 @@ class ZendExtension extends Extension
} }
/** /**
* Loads the i18n configuration. * Loads the translator configuration.
* *
* Usage example: * 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 array $config An array of configuration settings
* @param ContainerBuilder $container A ContainerBuilder instance * @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 = new XmlFileLoader($container, __DIR__.'/../Resources/config');
$loader->load('i18n.xml'); $loader->load('translator.xml');
$container->setAlias('i18n', 'zend.i18n'); $container->setAlias('translator', 'zend.translator');
} }
if (isset($config['locale'])) { if (isset($config['locale'])) {
@ -109,11 +109,11 @@ class ZendExtension extends Extension
} }
if (isset($config['adapter'])) { 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'])) { if (isset($config['translation']) && is_array($config['translation'])) {
foreach ($config['translations'] as $locale => $catalogue) { foreach ($config['translation'] as $locale => $catalogue) {
if ($locale == $container->getParameter('zend.translator.locale')) { if ($locale == $container->getParameter('zend.translator.locale')) {
$container->setParameter('zend.translator.catalogue', $catalogue); $container->setParameter('zend.translator.catalogue', $catalogue);
} }

View File

@ -10,6 +10,7 @@
<xsd:complexType name="config"> <xsd:complexType name="config">
<xsd:sequence> <xsd:sequence>
<xsd:element name="logger" type="logger" minOccurs="0" maxOccurs="1" /> <xsd:element name="logger" type="logger" minOccurs="0" maxOccurs="1" />
<xsd:element name="translator" type="translator" minOccurs="0" maxOccurs="1" />
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
@ -39,4 +40,17 @@
<xsd:enumeration value="7" /> <xsd:enumeration value="7" />
</xsd:restriction> </xsd:restriction>
</xsd:simpleType> </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> </xsd:schema>

View File

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