Skip to content

Commit bd68a10

Browse files
committed
Make sure importer is aware of ICU domain format
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). #300
1 parent ab6631d commit bd68a10

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

Service/Importer.php

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ public function extractToCatalogues(Finder $finder, array $catalogues, array $co
7878
$this->convertSourceLocationsToMessages($target, $sourceCollection, $catalogue);
7979

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

94+
$resultMessages = NSA::getProperty($result, 'messages');
95+
9496
// Mark new messages as new/obsolete
9597
foreach ($domains as $domain) {
98+
$intlDomain = $domain . '+intl-icu' /* MessageCatalogueInterface::INTL_DOMAIN_SUFFIX */;
99+
96100
foreach ($merge->getNewMessages($domain) as $key => $translation) {
97-
$meta = $this->getMetadata($result, $key, $domain);
101+
$messageDomain = array_key_exists($key, $resultMessages[$intlDomain] ?? []) ? $intlDomain : $domain;
102+
103+
$meta = $this->getMetadata($result, $key, $messageDomain);
98104
$meta->setState('new');
99-
$this->setMetadata($result, $key, $domain, $meta);
105+
$this->setMetadata($result, $key, $messageDomain, $meta);
100106

101107
// Add custom translations that we found in the source
102108
if (null === $translation) {
103109
if (null !== $newTranslation = $meta->getTranslation()) {
104-
$result->set($key, $newTranslation, $domain);
110+
$result->set($key, $newTranslation, $messageDomain);
105111
// We do not want "translation" key stored anywhere.
106112
$meta->removeAllInCategory('translation');
107113
} elseif (null !== ($newTranslation = $meta->getDesc()) && $catalogue->getLocale() === $this->defaultLocale) {
108-
$result->set($key, $newTranslation, $domain);
114+
$result->set($key, $newTranslation, $messageDomain);
109115
}
110116
}
111117
}
112118
foreach ($merge->getObsoleteMessages($domain) as $key => $translation) {
113-
$meta = $this->getMetadata($result, $key, $domain);
119+
$messageDomain = array_key_exists($key, $resultMessages[$intlDomain] ?? []) ? $intlDomain : $domain;
120+
121+
$meta = $this->getMetadata($result, $key, $messageDomain);
114122
$meta->setState('obsolete');
115-
$this->setMetadata($result, $key, $domain, $meta);
123+
$this->setMetadata($result, $key, $messageDomain, $meta);
116124
}
117125
}
118126
$results[] = $result;

0 commit comments

Comments
 (0)