[ZendBundle] added Zend\\Translator component

This commit is contained in:
Noël GUILBERT 2010-07-06 13:54:30 +02:00 committed by Fabien Potencier
parent 1e623469a9
commit bfb081fd96
3 changed files with 74 additions and 0 deletions

View File

@ -26,6 +26,7 @@ class ZendExtension extends Extension
{
protected $resources = array(
'logger' => 'logger.xml',
'i18n' => 'i18n.xml',
);
/**
@ -55,6 +56,42 @@ class ZendExtension extends Extension
}
}
/**
* Loads the i18n configuration.
*
* Usage example:
*
* <zend:i18n locale="en" adapter="xliff" data="/path/to/messages.xml" />
*
* @param array $config An array of configuration settings
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
*/
public function i18nLoad($config, ContainerBuilder $container)
{
if (!$container->hasDefinition('zend.i18n')) {
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
$loader->load($this->resources['i18n']);
$container->setAlias('i18n', 'zend.i18n');
}
if (isset($config['locale'])) {
$container->setParameter('zend.translator.locale', $config['locale']);
}
if (isset($config['adapter'])) {
$container->setParameter('zend.translator.adapter', constant($config['adapter']));
}
if (isset($config['translations']) && is_array($config['translations'])) {
foreach ($config['translations'] as $locale => $catalogue) {
if ($locale == $container->getParameter('zend.translator.locale')) {
$container->setParameter('zend.translator.catalogue', $catalogue);
}
$container->findDefinition('zend.translator')->addMethodCall('addTranslation', array($catalogue, $locale));
}
}
}
/**
* Returns the base path for the XSD files.
*

View File

@ -0,0 +1,24 @@
<?xml version="1.0" ?>
<container xmlns="http://www.symfony-project.org/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="zend.translator.class">Zend\Translator\Translator</parameter>
<parameter key="zend.translator.adapter" type="constant">Zend\Translator\Translator::AN_ARRAY</parameter>
<parameter key="zend.translator.catalogue" type="constant">null</parameter>
<parameter key="zend.translator.locale">en</parameter>
</parameters>
<services>
<service id="zend.translator" class="%zend.translator.class%">
<argument>%zend.translator.adapter%</argument>
<argument>%zend.translator.catalogue%</argument>
<argument>%zend.translator.locale%</argument>
<argument type="collection">
<argument key="log" type="service" id="zend.logger" on-invalid="ignore" />
</argument>
</service>
</services>
</container>

View File

@ -28,4 +28,17 @@ class ZendExtensionTest extends TestCase
$loader->loggerLoad(array('priority' => 3), $container);
$this->assertEquals(3, $container->getParameter('zend.logger.priority'), '->loggerLoad() overrides existing configuration options');
}
public function testI18nLoad()
{
$container = new ContainerBuilder();
$loader = new ZendExtension();
$loader->i18nLoad(array(), $container);
$this->assertEquals('Zend\\Translator\\Translator', $container->getParameter('zend.translator.class'), '->i&8nLoad() loads the i18n.xml file if not already loaded');
$loader->i18nLoad(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('fr', $container->getParameter('zend.translator.locale'), '->i18nLoad() overrides existing configuration options');
}
}