You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.1 KiB
58 lines
2.1 KiB
<?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\Catalogue; |
|
|
|
use Symfony\Component\Translation\MessageCatalogueInterface; |
|
|
|
/** |
|
* Merge operation between two catalogues as follows: |
|
* all = source ∪ target = {x: x ∈ source ∨ x ∈ target} |
|
* new = all ∖ source = {x: x ∈ target ∧ x ∉ source} |
|
* obsolete = source ∖ all = {x: x ∈ source ∧ x ∉ source ∧ x ∉ target} = ∅ |
|
* Basically, the result contains messages from both catalogues. |
|
* |
|
* @author Jean-François Simon <contact@jfsimon.fr> |
|
*/ |
|
class MergeOperation extends AbstractOperation |
|
{ |
|
/** |
|
* {@inheritdoc} |
|
*/ |
|
protected function processDomain($domain) |
|
{ |
|
$this->messages[$domain] = [ |
|
'all' => [], |
|
'new' => [], |
|
'obsolete' => [], |
|
]; |
|
$intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX; |
|
|
|
foreach ($this->source->all($domain) as $id => $message) { |
|
$this->messages[$domain]['all'][$id] = $message; |
|
$this->result->add([$id => $message], $this->source->defines($id, $intlDomain) ? $intlDomain : $domain); |
|
if (null !== $keyMetadata = $this->source->getMetadata($id, $domain)) { |
|
$this->result->setMetadata($id, $keyMetadata, $domain); |
|
} |
|
} |
|
|
|
foreach ($this->target->all($domain) as $id => $message) { |
|
if (!$this->source->has($id, $domain)) { |
|
$this->messages[$domain]['all'][$id] = $message; |
|
$this->messages[$domain]['new'][$id] = $message; |
|
$this->result->add([$id => $message], $this->target->defines($id, $intlDomain) ? $intlDomain : $domain); |
|
if (null !== $keyMetadata = $this->target->getMetadata($id, $domain)) { |
|
$this->result->setMetadata($id, $keyMetadata, $domain); |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|