32 private $directoryReadFactory;
39 private $componentRegistrar;
44 private $configFactory;
49 private $packList = [];
61 $this->directoryReadFactory = $directoryReadFactory;
76 public function getDictionary($languageCode)
80 foreach ($this->paths as
$path) {
81 $directoryRead = $this->directoryReadFactory->create(
$path);
82 if ($directoryRead->isExist(
'language.xml')) {
83 $xmlSource = $directoryRead->readFile(
'language.xml');
85 $languageConfig = $this->configFactory->create([
'source' => $xmlSource]);
86 }
catch (\
Magento\Framework\
Config\Dom\ValidationException $e) {
87 throw new \Magento\Framework\Exception\LocalizedException(
89 'The XML in file "%1" is invalid:' .
"\n%2\nVerify the XML and try again.",
90 [
$path .
'/language.xml', $e->getMessage()]
95 $this->packList[$languageConfig->getVendor()][$languageConfig->getPackage()] = $languageConfig;
96 if ($languageConfig->getCode() === $languageCode) {
97 $languages[] = $languageConfig;
104 foreach ($languages as $languageConfig) {
105 $this->collectInheritedPacks($languageConfig, $packs);
107 uasort($packs, [$this,
'sortInherited']);
111 foreach ($packs as $packInfo) {
113 $languageConfig = $packInfo[
'language'];
114 $dictionary = $this->readPackCsv($languageConfig->getVendor(), $languageConfig->getPackage());
131 private function collectInheritedPacks($languageConfig, &
$result, $level = 0, array &$visitedPacks = [])
133 $packKey = implode(
'|', [$languageConfig->getVendor(), $languageConfig->getPackage()]);
134 if (!isset($visitedPacks[$packKey]) &&
135 (!isset(
$result[$packKey]) ||
$result[$packKey][
'inheritance_level'] < $level)
137 $visitedPacks[$packKey] =
true;
139 'inheritance_level' => $level,
140 'sort_order' => $languageConfig->getSortOrder(),
141 'language' => $languageConfig,
144 foreach ($languageConfig->getUses() as $reuse) {
145 if (isset($this->packList[$reuse[
'vendor']][$reuse[
'package']])) {
146 $parentLanguageConfig = $this->packList[$reuse[
'vendor']][$reuse[
'package']];
147 $this->collectInheritedPacks($parentLanguageConfig,
$result, $level + 1, $visitedPacks);
163 private function sortInherited($current, $next)
165 if ($current[
'inheritance_level'] > $next[
'inheritance_level']) {
167 }
elseif ($current[
'inheritance_level'] < $next[
'inheritance_level']) {
170 if ($current[
'sort_order'] > $next[
'sort_order']) {
172 }
elseif ($current[
'sort_order'] < $next[
'sort_order']) {
175 return strcmp($current[
'key'], $next[
'key']);
187 private function readPackCsv($vendor, $package)
192 $directoryRead = $this->directoryReadFactory->create(
$path);
193 $foundCsvFiles = $directoryRead->search(
"*.csv");
194 foreach ($foundCsvFiles as $foundCsvFile) {
195 $file = $directoryRead->openFile($foundCsvFile);
196 while ((
$row = $file->readCsv()) !==
false) {
197 if (is_array(
$row) && count(
$row) > 1) {
elseif(isset( $params[ 'redirect_parent']))
__construct(ReadFactory $directoryReadFactory, ComponentRegistrar $componentRegistrar, ConfigFactory $configFactory)