Add additional lang exp/imp support e.g. Navigation lang files

This commit is contained in:
Dennis Eichhorn 2021-03-05 22:09:43 +01:00
parent adf2ed31fa
commit 8fa0eef5b7
2 changed files with 80 additions and 52 deletions

View File

@ -133,9 +133,16 @@ final class Exporter extends ExporterAbstract
} }
$components = \explode('.', $language); $components = \explode('.', $language);
if (\strlen($components[0]) === 2) { $len = \count($components);
if ($len === 3 || $len === 4) {
// normal language file // normal language file
if ($len === 3) {
$supportedLanguages[] = $components[0]; $supportedLanguages[] = $components[0];
} elseif ($len === 4) {
$supportedLanguages[] = $components[1];
}
$array = include $themePath . $theme . '/Lang/' . $language; $array = include $themePath . $theme . '/Lang/' . $language;
$array = \reset($array); $array = \reset($array);
@ -143,8 +150,14 @@ final class Exporter extends ExporterAbstract
continue; continue;
} }
if ($len === 3) {
foreach ($array as $key => $value) { foreach ($array as $key => $value) {
$languageArray[\trim($module, '/')][\trim($theme, '/')][$key][$components[0]] = $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); \preg_match_all('/(\$this\->getHtml\(\')([a-zA-Z:]+)(\'\))/', $template, $keys, \PREG_PATTERN_ORDER);
foreach ($keys[2] ?? [] as $key) { foreach ($keys[2] ?? [] as $key) {
if (!isset($languageArray[\trim($module, '/')][\trim($theme, '/')][$key])) { if (!isset($languageArray[''][\trim($module, '/')][\trim($theme, '/')][$key])) {
$languageArray[\trim($module, '/')][\trim($theme, '/')][$key]['en'] = ''; $languageArray[\trim($module, '/')][\trim($theme, '/')][''][$key]['en'] = '';
} }
} }
} }
@ -181,11 +194,12 @@ final class Exporter extends ExporterAbstract
$supportedLanguages = \array_unique($supportedLanguages); $supportedLanguages = \array_unique($supportedLanguages);
$content = '"Module";"Theme";"ID";"' . \implode('";"', $supportedLanguages) . '"'; $content = '"Module";"Theme";"File";"ID";"' . \implode('";"', $supportedLanguages) . '"';
foreach ($languageArray as $module => $themes) { foreach ($languageArray as $module => $themes) {
foreach ($themes as $theme => $keys) { foreach ($themes as $theme => $files) {
foreach ($files as $file => $keys) {
foreach ($keys as $key => $value) { foreach ($keys as $key => $value) {
$content .= "\n\"" . $module . '";"' . $theme . '";"' . $key . '"'; $content .= "\n\"" . $module . '";"' . $theme . '";"' . $file . '";"' . $key . '"';
foreach ($supportedLanguages as $language) { foreach ($supportedLanguages as $language) {
$content .= ';"' . ($value[$language] ?? '') . '"'; $content .= ';"' . ($value[$language] ?? '') . '"';
@ -193,6 +207,7 @@ final class Exporter extends ExporterAbstract
} }
} }
} }
}
return [ return [
'type' => 'file', 'type' => 'file',

View File

@ -131,14 +131,19 @@ final class Importer extends ImporterAbstract
$header = \fgetcsv($fp, 0, ';', '"'); $header = \fgetcsv($fp, 0, ';', '"');
$languageArray = []; $languageArray = [];
$supportedLanguages = \array_slice($header, 3); $supportedLanguages = \array_slice($header, 4);
$keyLengths = []; $keyLengths = [];
while(($line = \fgetcsv($fp, 0, ';', '"')) !== false) { 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]))) { $line[0] = \trim($line[0]);
$keyLengths[\trim($line[0])][\trim($line[1])] = \strlen(\trim($line[2])); $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) { foreach ($supportedLanguages as $index => $language) {
@ -146,7 +151,7 @@ final class Importer extends ImporterAbstract
continue; 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,9 +159,16 @@ final class Importer extends ImporterAbstract
\unlink($upload['file0']['path'] . '/' . $upload['file0']['filename']); \unlink($upload['file0']['path'] . '/' . $upload['file0']['filename']);
foreach ($languageArray as $module => $themes) { foreach ($languageArray as $module => $themes) {
foreach ($themes as $theme => $keys) { foreach ($themes as $theme => $files) {
foreach ($files as $file => $keys) {
foreach ($supportedLanguages as $language) { foreach ($supportedLanguages as $language) {
$langFile = __DIR__ . '/../../../' . $module . '/Theme/' . $theme . '/Lang/' . \trim($language) . '.lang.php'; $langFile = __DIR__ . '/../../../'
. $module . '/Theme/'
. $theme . '/Lang/'
. ($file === '' ? '' : $file . '.')
. \trim($language)
. '.lang.php';
if (\is_file($langFile)) { if (\is_file($langFile)) {
\unlink($langFile); \unlink($langFile);
} }
@ -180,14 +192,14 @@ final class Importer extends ImporterAbstract
. " * @link https://orange-management.org\n" . " * @link https://orange-management.org\n"
. " */\n" . " */\n"
. "declare(strict_types=1);\n\n" . "declare(strict_types=1);\n\n"
. "return ['" . $module . "' => [\n" . "return ['" . ($file === '' ? $module : $file) . "' => [\n"
); );
\ksort($keys); \ksort($keys);
foreach ($keys as $key => $values) { foreach ($keys as $key => $values) {
\fwrite($fp, \fwrite($fp,
" '" . $key . "'" . \str_repeat(' ', $keyLengths[$module][$theme] - \strlen($key)) . " => '" . \str_replace(['\'', '\\'], ['\\\'', '\\\\'], $values[$language] ?? '') . "',\n" " '" . $key . "'" . \str_repeat(' ', $keyLengths[$module][$theme][$file] - \strlen($key)) . " => '" . \str_replace(['\'', '\\'], ['\\\'', '\\\\'], $values[$language] ?? '') . "',\n"
); );
} }
@ -198,3 +210,4 @@ final class Importer extends ImporterAbstract
} }
} }
} }
}