diff --git a/Interfaces/OMS/Exporter.php b/Interfaces/OMS/Exporter.php index e50c137..f282e39 100755 --- a/Interfaces/OMS/Exporter.php +++ b/Interfaces/OMS/Exporter.php @@ -133,18 +133,31 @@ final class Exporter extends ExporterAbstract } $components = \explode('.', $language); - if (\strlen($components[0]) === 2) { + $len = \count($components); + + if ($len === 3 || $len === 4) { // normal language file - $supportedLanguages[] = $components[0]; - $array = include $themePath . $theme . '/Lang/' . $language; - $array = \reset($array); + if ($len === 3) { + $supportedLanguages[] = $components[0]; + } elseif ($len === 4) { + $supportedLanguages[] = $components[1]; + } + + $array = include $themePath . $theme . '/Lang/' . $language; + $array = \reset($array); if ($array === false) { continue; } - foreach ($array as $key => $value) { - $languageArray[\trim($module, '/')][\trim($theme, '/')][$key][$components[0]] = $value; + if ($len === 3) { + foreach ($array as $key => $value) { + $languageArray[\trim($module, '/')][\trim($theme, '/')][''][$key][$components[0]] = $value; + } + } elseif ($len === 4) { + foreach ($array as $key => $value) { + $languageArray[\trim($module, '/')][\trim($theme, '/')][$components[0]][$key][$components[1]] = $value; + } } } } @@ -171,8 +184,8 @@ final class Exporter extends ExporterAbstract \preg_match_all('/(\$this\->getHtml\(\')([a-zA-Z:]+)(\'\))/', $template, $keys, \PREG_PATTERN_ORDER); foreach ($keys[2] ?? [] as $key) { - if (!isset($languageArray[\trim($module, '/')][\trim($theme, '/')][$key])) { - $languageArray[\trim($module, '/')][\trim($theme, '/')][$key]['en'] = ''; + if (!isset($languageArray[''][\trim($module, '/')][\trim($theme, '/')][$key])) { + $languageArray[\trim($module, '/')][\trim($theme, '/')][''][$key]['en'] = ''; } } } @@ -181,14 +194,16 @@ final class Exporter extends ExporterAbstract $supportedLanguages = \array_unique($supportedLanguages); - $content = '"Module";"Theme";"ID";"' . \implode('";"', $supportedLanguages) . '"'; + $content = '"Module";"Theme";"File";"ID";"' . \implode('";"', $supportedLanguages) . '"'; foreach ($languageArray as $module => $themes) { - foreach ($themes as $theme => $keys) { - foreach ($keys as $key => $value) { - $content .= "\n\"" . $module . '";"' . $theme . '";"' . $key . '"'; + foreach ($themes as $theme => $files) { + foreach ($files as $file => $keys) { + foreach ($keys as $key => $value) { + $content .= "\n\"" . $module . '";"' . $theme . '";"' . $file . '";"' . $key . '"'; - foreach ($supportedLanguages as $language) { - $content .= ';"' . ($value[$language] ?? '') . '"'; + foreach ($supportedLanguages as $language) { + $content .= ';"' . ($value[$language] ?? '') . '"'; + } } } } diff --git a/Interfaces/OMS/Importer.php b/Interfaces/OMS/Importer.php index f5d0755..3b4bcb5 100755 --- a/Interfaces/OMS/Importer.php +++ b/Interfaces/OMS/Importer.php @@ -131,14 +131,19 @@ final class Importer extends ImporterAbstract $header = \fgetcsv($fp, 0, ';', '"'); $languageArray = []; - $supportedLanguages = \array_slice($header, 3); + $supportedLanguages = \array_slice($header, 4); $keyLengths = []; while(($line = \fgetcsv($fp, 0, ';', '"')) !== false) { - $translations = \array_slice($line, 3); + $translations = \array_slice($line, 4); - if (($keyLengths[\trim($line[0])][\trim($line[1])] ?? 0) < \strlen(\trim($line[2]))) { - $keyLengths[\trim($line[0])][\trim($line[1])] = \strlen(\trim($line[2])); + $line[0] = \trim($line[0]); + $line[1] = \trim($line[1]); + $line[2] = \trim($line[2]); + $line[3] = \trim($line[3]); + + if (($keyLengths[$line[0]][$line[1]][$line[2]] ?? 0) < \strlen($line[3])) { + $keyLengths[$line[0]][$line[1]][$line[2]] = \strlen($line[3]); } foreach ($supportedLanguages as $index => $language) { @@ -146,7 +151,7 @@ final class Importer extends ImporterAbstract continue; } - $languageArray[\trim($line[0])][\trim($line[1])][\trim($line[2])][\trim($language)] = $translations[$index]; + $languageArray[$line[0]][$line[1]][$line[2]][$line[3]][\trim($language)] = $translations[$index]; } } @@ -154,45 +159,53 @@ final class Importer extends ImporterAbstract \unlink($upload['file0']['path'] . '/' . $upload['file0']['filename']); foreach ($languageArray as $module => $themes) { - foreach ($themes as $theme => $keys) { - foreach ($supportedLanguages as $language) { - $langFile = __DIR__ . '/../../../' . $module . '/Theme/' . $theme . '/Lang/' . \trim($language) . '.lang.php'; - if (\is_file($langFile)) { - \unlink($langFile); - } + foreach ($themes as $theme => $files) { + foreach ($files as $file => $keys) { + foreach ($supportedLanguages as $language) { + $langFile = __DIR__ . '/../../../' + . $module . '/Theme/' + . $theme . '/Lang/' + . ($file === '' ? '' : $file . '.') + . \trim($language) + . '.lang.php'; - $fp = \fopen($langFile, 'w+'); - if ($fp === false) { - continue; - } + if (\is_file($langFile)) { + \unlink($langFile); + } - \fwrite($fp, - " [\n" - ); + $fp = \fopen($langFile, 'w+'); + if ($fp === false) { + continue; + } - \ksort($keys); - - foreach ($keys as $key => $values) { \fwrite($fp, - " '" . $key . "'" . \str_repeat(' ', $keyLengths[$module][$theme] - \strlen($key)) . " => '" . \str_replace(['\'', '\\'], ['\\\'', '\\\\'], $values[$language] ?? '') . "',\n" + " [\n" ); - } - \fwrite($fp, "]];\n"); - \fclose($fp); + \ksort($keys); + + foreach ($keys as $key => $values) { + \fwrite($fp, + " '" . $key . "'" . \str_repeat(' ', $keyLengths[$module][$theme][$file] - \strlen($key)) . " => '" . \str_replace(['\'', '\\'], ['\\\'', '\\\\'], $values[$language] ?? '') . "',\n" + ); + } + + \fwrite($fp, "]];\n"); + \fclose($fp); + } } } }