forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.9 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\Loader; | ||
|  | 
 | ||
|  | use Symfony\Component\Translation\MessageCatalogue; | ||
|  | 
 | ||
|  | /** | ||
|  |  * ArrayLoader loads translations from a PHP array. | ||
|  |  * | ||
|  |  * @author Fabien Potencier <fabien@symfony.com> | ||
|  |  */ | ||
|  | class ArrayLoader implements LoaderInterface | ||
|  | { | ||
|  |     /** | ||
|  |      * {@inheritdoc} | ||
|  |      */ | ||
|  |     public function load($resource, $locale, $domain = 'messages') | ||
|  |     { | ||
|  |         $this->flatten($resource); | ||
|  |         $catalogue = new MessageCatalogue($locale); | ||
|  |         $catalogue->add($resource, $domain); | ||
|  | 
 | ||
|  |         return $catalogue; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Flattens an nested array of translations. | ||
|  |      * | ||
|  |      * The scheme used is: | ||
|  |      *   'key' => array('key2' => array('key3' => 'value')) | ||
|  |      * Becomes: | ||
|  |      *   'key.key2.key3' => 'value' | ||
|  |      * | ||
|  |      * This function takes an array by reference and will modify it | ||
|  |      * | ||
|  |      * @param array  &$messages The array that will be flattened | ||
|  |      * @param array  $subnode   Current subnode being parsed, used internally for recursive calls | ||
|  |      * @param string $path      Current path being parsed, used internally for recursive calls | ||
|  |      */ | ||
|  |     private function flatten(array &$messages, array $subnode = null, $path = null) | ||
|  |     { | ||
|  |         if (null === $subnode) { | ||
|  |             $subnode = &$messages; | ||
|  |         } | ||
|  |         foreach ($subnode as $key => $value) { | ||
|  |             if (is_array($value)) { | ||
|  |                 $nodePath = $path ? $path.'.'.$key : $key; | ||
|  |                 $this->flatten($messages, $value, $nodePath); | ||
|  |                 if (null === $path) { | ||
|  |                     unset($messages[$key]); | ||
|  |                 } | ||
|  |             } elseif (null !== $path) { | ||
|  |                 $messages[$path.'.'.$key] = $value; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |