diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/DictionaryTest.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/DictionaryTest.php index 363f84627350f..bc299053bd4fe 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/App/Language/DictionaryTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/DictionaryTest.php @@ -63,7 +63,9 @@ public function dictionaryDataProvider() // Second case with inheritance of package with the same language code 'a case with inheritance similar language code' => $this->getDataInheritanceWitSimilarCode(), // Third case with circular inheritance, when two packages depend on each other - 'a case with circular inheritance' => $this->getDataCircularInheritance() + 'a case with circular inheritance' => $this->getDataCircularInheritance(), + // Fourth case with multiple inheritance from dev docs + 'a case with multiple inheritance from dev docs' => $this->getDataMultipleInheritanceFromDevDocs() ]; } @@ -113,7 +115,7 @@ private function getDataCircularInheritance() { return [ // Dictionary that will be requested - 'language_code' => 'en_US', + 'language_code' => 'en_AZ', // Expected merged dictionary data 'expectation' => [ 'one' => '1.0', @@ -123,4 +125,48 @@ private function getDataCircularInheritance() ] ]; } + + /** + * If a language package inherits from two packages: + * ... + * en_AK + * ... + * + * + * ... + * + * In the preceding example: + * language_package_one inherits from en_au_package and en_au_package inherits from en_ie_package + * language_package_two inherits from en_ca_package and en_ca_package inherits from en_us_package + * + * If the Magento application cannot find word or phrase in the en_AK package, + * it looks in other packages in following sequence: + * parent-package-one/language_package_one + * /en_au_package + * /en_ie_package + * parent-package-two/language_package_two + * /en_ca_package + * /en_us_package + * + * @return array + */ + private function getDataMultipleInheritanceFromDevDocs() + { + return [ + // Dictionary that will be requested + 'language_code' => 'en_AK', + // Expected merged dictionary data + 'expectation' => [ + 'one' => 'en_us_package_one', + 'two' => 'en_ca_package_two', + 'three' => 'language_package_two_three', + 'four' => 'en_ie_package_four', + 'five' => 'en_au_package_five', + 'six' => 'language_package_one_six', + 'seven' => 'en_ak_seven', + 'eight' => 'en_ak_eight', + 'nine' => 'en_ak_nine', + ] + ]; + } } diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/a.csv b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/a.csv similarity index 100% rename from dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/a.csv rename to dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/a.csv diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/b.csv b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/b.csv similarity index 100% rename from dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/b.csv rename to dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/b.csv diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/language.xml b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/language.xml similarity index 86% rename from dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/language.xml rename to dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/language.xml index a4c5630d5fcd9..3cc5d8965c2e8 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/language.xml +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/language.xml @@ -6,8 +6,8 @@ */ --> - en_US + en_AZ bar - en_us + en_az 0 diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/registration.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/registration.php similarity index 92% rename from dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/registration.php rename to dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/registration.php index 7f792bf5941ca..41e17fbcf515d 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_us/registration.php +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_az/registration.php @@ -6,4 +6,4 @@ use Magento\Framework\Component\ComponentRegistrar; -ComponentRegistrar::register(ComponentRegistrar::LANGUAGE, 'bar_en_us', __DIR__); +ComponentRegistrar::register(ComponentRegistrar::LANGUAGE, 'bar_en_az', __DIR__); diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/language.xml b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/language.xml index faf531fbf5cc2..736e9dbe738d7 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/language.xml +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/language.xml @@ -10,5 +10,5 @@ bar en_gb 100 - + diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/baz/en_gb/1.csv b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/baz/en_gb/1.csv index ea501f9d96944..61ef9dd8a49b3 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/baz/en_gb/1.csv +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/baz/en_gb/1.csv @@ -1 +1,5 @@ -four and 5/10,4.5 \ No newline at end of file +one,1.00 +two,2.00 +three,3.00 +four,4.00 +four and 5/10,4.5 diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/devdoc/en_ak/1.csv b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/devdoc/en_ak/1.csv new file mode 100644 index 0000000000000..8ed274ad7d886 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/devdoc/en_ak/1.csv @@ -0,0 +1,3 @@ +seven,en_ak_seven +eight,en_ak_eight +nine,en_ak_nine diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/devdoc/en_ak/language.xml b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/devdoc/en_ak/language.xml new file mode 100644 index 0000000000000..d0db854f329d0 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/devdoc/en_ak/language.xml @@ -0,0 +1,15 @@ + + + + en_AK + devdoc + en_ak + 0 + + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/devdoc/en_ak/registration.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/devdoc/en_ak/registration.php new file mode 100644 index 0000000000000..13b498edcd0aa --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/devdoc/en_ak/registration.php @@ -0,0 +1,9 @@ + - en_US + en_AZ first - en_us + en_az 0 diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/first/en_us/registration.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/first/en_az/registration.php similarity index 91% rename from dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/first/en_us/registration.php rename to dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/first/en_az/registration.php index 48dfbf20c9f26..85e88eb4546ce 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/first/en_us/registration.php +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/first/en_az/registration.php @@ -6,4 +6,4 @@ use Magento\Framework\Component\ComponentRegistrar; -ComponentRegistrar::register(ComponentRegistrar::LANGUAGE, 'first_en_us', __DIR__); +ComponentRegistrar::register(ComponentRegistrar::LANGUAGE, 'first_en_az', __DIR__); diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_au_package/1.csv b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_au_package/1.csv new file mode 100644 index 0000000000000..f1d7dc7c106c7 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_au_package/1.csv @@ -0,0 +1,5 @@ +five,en_au_package_five +six,en_au_package_six +seven,en_au_package_seven +eight,en_au_package_eight +nine,en_au_package_nine diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_au_package/language.xml b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_au_package/language.xml new file mode 100644 index 0000000000000..64d558d9c1d63 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_au_package/language.xml @@ -0,0 +1,14 @@ + + + + en_US + parent-package-one + en_au_package + 0 + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_au_package/registration.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_au_package/registration.php new file mode 100644 index 0000000000000..664a6d34a814b --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_au_package/registration.php @@ -0,0 +1,9 @@ + + + + en_US + parent-package-one + en_ie_package + 0 + diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_ie_package/registration.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_ie_package/registration.php new file mode 100644 index 0000000000000..81ae45c3d5a40 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/en_ie_package/registration.php @@ -0,0 +1,9 @@ + + + + en_US + parent-package-one + language_package_one + 0 + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/language_package_one/registration.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/language_package_one/registration.php new file mode 100644 index 0000000000000..0432f835f0849 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-one/language_package_one/registration.php @@ -0,0 +1,9 @@ + + + + en_US + parent-package-two + en_ca_package + 0 + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-two/en_ca_package/registration.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-two/en_ca_package/registration.php new file mode 100644 index 0000000000000..b87032884f7db --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-two/en_ca_package/registration.php @@ -0,0 +1,9 @@ + + + + en_US + parent-package-two + en_us_package + 0 + diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-two/en_us_package/registration.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-two/en_us_package/registration.php new file mode 100644 index 0000000000000..48ed54033a96e --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-two/en_us_package/registration.php @@ -0,0 +1,9 @@ + + + + en_US + parent-package-two + language_package_two + 0 + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-two/language_package_two/registration.php b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-two/language_package_two/registration.php new file mode 100644 index 0000000000000..f7eb7d2373a29 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/parent-package-two/language_package_two/registration.php @@ -0,0 +1,9 @@ +second en_gb 0 - + diff --git a/lib/internal/Magento/Framework/App/Language/Dictionary.php b/lib/internal/Magento/Framework/App/Language/Dictionary.php index 9aaafc23c9e49..b4a6fdc1b5ce3 100644 --- a/lib/internal/Magento/Framework/App/Language/Dictionary.php +++ b/lib/internal/Magento/Framework/App/Language/Dictionary.php @@ -195,6 +195,10 @@ private function collectInheritedPacks($languageConfig, &$result, $level = 0, ar */ private function addInheritedPacks($packs, $pack, &$sortedPacks) { + if (isset($sortedPacks[$pack['key']])) { + return; + } + $sortedPacks[$pack['key']] = $pack; foreach ($pack['language']->getUses() as $reuse) { $packKey = implode('|', [$reuse['vendor'], $reuse['package']]);