Skip to content

Commit

Permalink
Make sure importer is aware of ICU domain format
Browse files Browse the repository at this point in the history
Because of MessageCatalogue interface limitation we're using NSA to
access raw messages data.
Additionally because defines() method uses isset() were force to check
raw messages data directly to check if key exits (translations from
source collection are all set to NULL).

php-translation#300
  • Loading branch information
snpy committed Nov 24, 2022
1 parent 592b8f2 commit c3dbe3b
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions Service/Importer.php
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ public function extractToCatalogues(Finder $finder, array $catalogues, array $co
$this->convertSourceLocationsToMessages($target, $sourceCollection, $catalogue);

// Remove all SourceLocation and State form catalogue.
foreach ($catalogue->getDomains() as $domain) {
foreach ($catalogue->all($domain) as $key => $translation) {
foreach (NSA::getProperty($catalogue, 'messages') as $domain => $translations) {
foreach ($translations as $key => $translation) {
$meta = $this->getMetadata($catalogue, $key, $domain);
$meta->removeAllInCategory('file-source');
$meta->removeAllInCategory('state');
Expand All @@ -91,28 +91,36 @@ public function extractToCatalogues(Finder $finder, array $catalogues, array $co
$result = $merge->getResult();
$domains = $merge->getDomains();

$resultMessages = NSA::getProperty($result, 'messages');

// Mark new messages as new/obsolete
foreach ($domains as $domain) {
$intlDomain = $domain . '+intl-icu' /* MessageCatalogueInterface::INTL_DOMAIN_SUFFIX */;

foreach ($merge->getNewMessages($domain) as $key => $translation) {
$meta = $this->getMetadata($result, $key, $domain);
$messageDomain = array_key_exists($key, $resultMessages[$intlDomain] ?? []) ? $intlDomain : $domain;

$meta = $this->getMetadata($result, $key, $messageDomain);
$meta->setState('new');
$this->setMetadata($result, $key, $domain, $meta);
$this->setMetadata($result, $key, $messageDomain, $meta);

// Add custom translations that we found in the source
if (null === $translation) {
if (null !== $newTranslation = $meta->getTranslation()) {
$result->set($key, $newTranslation, $domain);
$result->set($key, $newTranslation, $messageDomain);
// We do not want "translation" key stored anywhere.
$meta->removeAllInCategory('translation');
} elseif (null !== ($newTranslation = $meta->getDesc()) && $catalogue->getLocale() === $this->defaultLocale) {
$result->set($key, $newTranslation, $domain);
$result->set($key, $newTranslation, $messageDomain);
}
}
}
foreach ($merge->getObsoleteMessages($domain) as $key => $translation) {
$meta = $this->getMetadata($result, $key, $domain);
$messageDomain = array_key_exists($key, $resultMessages[$intlDomain] ?? []) ? $intlDomain : $domain;

$meta = $this->getMetadata($result, $key, $messageDomain);
$meta->setState('obsolete');
$this->setMetadata($result, $key, $domain, $meta);
$this->setMetadata($result, $key, $messageDomain, $meta);
}
}
$results[] = $result;
Expand Down

0 comments on commit c3dbe3b

Please sign in to comment.