Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Testwork / Translator / ServiceContainer / TranslatorExtension.php
1 <?php
2
3 /*
4  * This file is part of the Behat Testwork.
5  * (c) Konstantin Kudryashov <ever.zet@gmail.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 namespace Behat\Testwork\Translator\ServiceContainer;
12
13 use Behat\Testwork\Cli\ServiceContainer\CliExtension;
14 use Behat\Testwork\ServiceContainer\Extension;
15 use Behat\Testwork\ServiceContainer\ExtensionManager;
16 use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
17 use Symfony\Component\DependencyInjection\ContainerBuilder;
18 use Symfony\Component\DependencyInjection\Definition;
19 use Symfony\Component\DependencyInjection\Reference;
20
21 /**
22  * Provides translator service.
23  *
24  * @author Konstantin Kudryashov <ever.zet@gmail.com>
25  */
26 final class TranslatorExtension implements Extension
27 {
28     /*
29      * Available services
30      */
31     const TRANSLATOR_ID = 'translator';
32
33     /**
34      * {@inheritdoc}
35      */
36     public function getConfigKey()
37     {
38         return 'translation';
39     }
40
41     /**
42      * {@inheritdoc}
43      */
44     public function initialize(ExtensionManager $extensionManager)
45     {
46     }
47
48     /**
49      * {@inheritdoc}
50      */
51     public function configure(ArrayNodeDefinition $builder)
52     {
53         $defaultLanguage = $this->getDefaultLanguage() ?: 'en';
54
55         $builder
56             ->addDefaultsIfNotSet()
57             ->children()
58                 ->scalarNode('locale')
59                     ->info('Sets output locale for the tester')
60                     ->defaultValue($defaultLanguage)
61                 ->end()
62                 ->scalarNode('fallback_locale')
63                     ->info('Sets fallback output locale for the tester')
64                     ->defaultValue('en')
65                 ->end()
66             ->end();
67     }
68
69     /**
70      * {@inheritdoc}
71      */
72     public function load(ContainerBuilder $container, array $config)
73     {
74         $this->loadTranslator($container, $config['locale'], $config['fallback_locale']);
75         $this->loadController($container);
76     }
77
78     /**
79      * {@inheritdoc}
80      */
81     public function process(ContainerBuilder $container)
82     {
83     }
84
85     /**
86      * Loads translator service.
87      *
88      * @param ContainerBuilder $container
89      * @param string           $locale
90      * @param string           $fallbackLocale
91      */
92     private function loadTranslator(ContainerBuilder $container, $locale, $fallbackLocale)
93     {
94         $definition = new Definition('Symfony\Component\Translation\Translator', array($locale));
95         $container->setDefinition(self::TRANSLATOR_ID, $definition);
96
97         $definition->addMethodCall('setFallbackLocales', array(array($fallbackLocale)));
98         $definition->addMethodCall(
99             'addLoader', array(
100                 'xliff',
101                 new Definition('Symfony\Component\Translation\Loader\XliffFileLoader')
102             )
103         );
104         $definition->addMethodCall(
105             'addLoader', array(
106                 'yaml',
107                 new Definition('Symfony\Component\Translation\Loader\YamlFileLoader')
108             )
109         );
110         $definition->addMethodCall(
111             'addLoader', array(
112                 'php',
113                 new Definition('Symfony\Component\Translation\Loader\PhpFileLoader')
114             )
115         );
116         $definition->addMethodCall(
117             'addLoader', array(
118                 'array',
119                 new Definition('Symfony\Component\Translation\Loader\ArrayLoader')
120             )
121         );
122         $container->setDefinition(self::TRANSLATOR_ID, $definition);
123     }
124
125     /**
126      * Loads translator controller.
127      *
128      * @param ContainerBuilder $container
129      */
130     private function loadController(ContainerBuilder $container)
131     {
132         $definition = new Definition('Behat\Testwork\Translator\Cli\LanguageController', array(
133             new Reference(self::TRANSLATOR_ID)
134         ));
135         $definition->addTag(CliExtension::CONTROLLER_TAG, array('priority' => 800));
136         $container->setDefinition(CliExtension::CONTROLLER_TAG . '.translator', $definition);
137     }
138
139     /**
140      * Tries to guess default user cli language.
141      *
142      * @return null|string
143      */
144     private function getDefaultLanguage()
145     {
146         $defaultLanguage = null;
147         if (($locale = getenv('LANG')) && preg_match('/^([a-z]{2})/', $locale, $matches)) {
148             $defaultLanguage = $matches[1];
149
150             return $defaultLanguage;
151         }
152
153         return $defaultLanguage;
154     }
155 }