Make translations multi-leveled

This commit is contained in:
2026-04-29 22:40:54 +02:00
parent 670a014cf8
commit c0c0b21290

View File

@@ -15,8 +15,9 @@ class Translator extends PhpObject
private $asLanguages; private $asLanguages;
private $asTranslations; // [lang][key_word] = translation private $asTranslations; // [lang][key_word] = translation
const LANG_FOLDER = '../i18n/'; const TRANS_FOLDER = '../i18n/';
const LANG_EXT = '.json'; const TRANS_FILE_EXT = '.json';
const TRANS_SEP = '.';
const DEFAULT_LANG = 'en'; const DEFAULT_LANG = 'en';
/** /**
@@ -106,7 +107,7 @@ class Translator extends PhpObject
{ {
//List all available languages //List all available languages
$asLangPaths = glob(self::getLangPath('*')); $asLangPaths = glob(self::getLangPath('*'));
$this->asLanguages = array_map('basename', $asLangPaths, array_fill(1, count($asLangPaths), self::LANG_EXT)); $this->asLanguages = array_map('basename', $asLangPaths, array_fill(1, count($asLangPaths), self::TRANS_FILE_EXT));
//Load languages //Load languages
array_walk($this->asLanguages, array($this, 'loadLanguageFile')); array_walk($this->asLanguages, array($this, 'loadLanguageFile'));
@@ -119,7 +120,7 @@ class Translator extends PhpObject
$sData = file_get_contents(self::getLangPath($sLang)); $sData = file_get_contents(self::getLangPath($sLang));
$asData = json_decode($sData, true); $asData = json_decode($sData, true);
if(is_array($asData)) $this->asTranslations[$sLang] = $asData; if(is_array($asData)) $this->asTranslations[$sLang] = self::flattenTranslations($asData);
else { else {
$this->asTranslations[$sLang] = array(); $this->asTranslations[$sLang] = array();
$this->addWarning('Invalid JSON translation file for language "'.$sLang.'": '.json_last_error_msg()); $this->addWarning('Invalid JSON translation file for language "'.$sLang.'": '.json_last_error_msg());
@@ -127,8 +128,21 @@ class Translator extends PhpObject
} }
} }
private static function flattenTranslations($asData, $sParentKey='')
{
$asTranslations = array();
foreach($asData as $sKey=>$oValue) {
$sKey = ($sParentKey==''?'':$sParentKey.self::TRANS_SEP).$sKey;
if(is_array($oValue)) $asTranslations += self::flattenTranslations($oValue, $sKey);
else $asTranslations[$sKey] = $oValue;
}
return $asTranslations;
}
private static function getLangPath($sLang) private static function getLangPath($sLang)
{ {
return self::LANG_FOLDER.$sLang.self::LANG_EXT; return self::TRANS_FOLDER.$sLang.self::TRANS_FILE_EXT;
} }
} }