79 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			2.4 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\Command;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use Symfony\Component\Translation\MessageCatalogue;
							 | 
						||
| 
								 | 
							
								use Symfony\Component\Translation\MessageCatalogueInterface;
							 | 
						||
| 
								 | 
							
								use Symfony\Component\Translation\TranslatorBag;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @internal
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								trait TranslationTrait
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    private function readLocalTranslations(array $locales, array $domains, array $transPaths): TranslatorBag
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $bag = new TranslatorBag();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($locales as $locale) {
							 | 
						||
| 
								 | 
							
								            $catalogue = new MessageCatalogue($locale);
							 | 
						||
| 
								 | 
							
								            foreach ($transPaths as $path) {
							 | 
						||
| 
								 | 
							
								                $this->reader->read($path, $catalogue);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if ($domains) {
							 | 
						||
| 
								 | 
							
								                foreach ($domains as $domain) {
							 | 
						||
| 
								 | 
							
								                    $catalogue = $this->filterCatalogue($catalogue, $domain);
							 | 
						||
| 
								 | 
							
								                    $bag->addCatalogue($catalogue);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                $bag->addCatalogue($catalogue);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $bag;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private function filterCatalogue(MessageCatalogue $catalogue, string $domain): MessageCatalogue
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $filteredCatalogue = new MessageCatalogue($catalogue->getLocale());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // extract intl-icu messages only
							 | 
						||
| 
								 | 
							
								        $intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX;
							 | 
						||
| 
								 | 
							
								        if ($intlMessages = $catalogue->all($intlDomain)) {
							 | 
						||
| 
								 | 
							
								            $filteredCatalogue->add($intlMessages, $intlDomain);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // extract all messages and subtract intl-icu messages
							 | 
						||
| 
								 | 
							
								        if ($messages = array_diff($catalogue->all($domain), $intlMessages)) {
							 | 
						||
| 
								 | 
							
								            $filteredCatalogue->add($messages, $domain);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        foreach ($catalogue->getResources() as $resource) {
							 | 
						||
| 
								 | 
							
								            $filteredCatalogue->addResource($resource);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($metadata = $catalogue->getMetadata('', $intlDomain)) {
							 | 
						||
| 
								 | 
							
								            foreach ($metadata as $k => $v) {
							 | 
						||
| 
								 | 
							
								                $filteredCatalogue->setMetadata($k, $v, $intlDomain);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($metadata = $catalogue->getMetadata('', $domain)) {
							 | 
						||
| 
								 | 
							
								            foreach ($metadata as $k => $v) {
							 | 
						||
| 
								 | 
							
								                $filteredCatalogue->setMetadata($k, $v, $domain);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $filteredCatalogue;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |