58 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
|  * This file is part of the Symfony package.
 | |
|  *
 | |
|  * (c) Fabien Potencier <fabien@symfony.com>
 | |
|  *
 | |
|  * For the full copyright and license information, please view the LICENSE
 | |
|  * file that was distributed with this source code.
 | |
|  */
 | |
| 
 | |
| namespace Symfony\Component\Translation\Provider;
 | |
| 
 | |
| use Symfony\Component\Translation\Exception\UnsupportedSchemeException;
 | |
| 
 | |
| /**
 | |
|  * @author Mathieu Santostefano <msantostefano@protonmail.com>
 | |
|  */
 | |
| class TranslationProviderCollectionFactory
 | |
| {
 | |
|     private iterable $factories;
 | |
|     private array $enabledLocales;
 | |
| 
 | |
|     /**
 | |
|      * @param iterable<mixed, ProviderFactoryInterface> $factories
 | |
|      */
 | |
|     public function __construct(iterable $factories, array $enabledLocales)
 | |
|     {
 | |
|         $this->factories = $factories;
 | |
|         $this->enabledLocales = $enabledLocales;
 | |
|     }
 | |
| 
 | |
|     public function fromConfig(array $config): TranslationProviderCollection
 | |
|     {
 | |
|         $providers = [];
 | |
|         foreach ($config as $name => $currentConfig) {
 | |
|             $providers[$name] = $this->fromDsnObject(
 | |
|                 new Dsn($currentConfig['dsn']),
 | |
|                 !$currentConfig['locales'] ? $this->enabledLocales : $currentConfig['locales'],
 | |
|                 !$currentConfig['domains'] ? [] : $currentConfig['domains']
 | |
|             );
 | |
|         }
 | |
| 
 | |
|         return new TranslationProviderCollection($providers);
 | |
|     }
 | |
| 
 | |
|     public function fromDsnObject(Dsn $dsn, array $locales, array $domains = []): ProviderInterface
 | |
|     {
 | |
|         foreach ($this->factories as $factory) {
 | |
|             if ($factory->supports($dsn)) {
 | |
|                 return new FilteringProvider($factory->create($dsn), $locales, $domains);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         throw new UnsupportedSchemeException($dsn);
 | |
|     }
 | |
| }
 |