Преглед изворни кода

[ZendBundle] added Zend\\Translator component

Noël GUILBERT пре 15 година
родитељ
комит
bfb081fd96

+ 37 - 0
src/Symfony/Bundle/ZendBundle/DependencyInjection/ZendExtension.php

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

+ 24 - 0
src/Symfony/Bundle/ZendBundle/Resources/config/i18n.xml

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

+ 13 - 0
src/Symfony/Bundle/ZendBundle/Tests/DependencyInjection/ZendExtensionTest.php

@@ -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');
+    }
 }