diff --git a/inc/Translator.php b/inc/Translator.php index 508cabe..b4774e7 100755 --- a/inc/Translator.php +++ b/inc/Translator.php @@ -15,8 +15,9 @@ class Translator extends PhpObject private $asLanguages; private $asTranslations; // [lang][key_word] = translation - const LANG_FOLDER = '../i18n/'; - const LANG_EXT = '.json'; + const TRANS_FOLDER = '../i18n/'; + const TRANS_FILE_EXT = '.json'; + const TRANS_SEP = '.'; const DEFAULT_LANG = 'en'; /** @@ -106,7 +107,7 @@ class Translator extends PhpObject { //List all available languages $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 array_walk($this->asLanguages, array($this, 'loadLanguageFile')); @@ -119,7 +120,7 @@ class Translator extends PhpObject $sData = file_get_contents(self::getLangPath($sLang)); $asData = json_decode($sData, true); - if(is_array($asData)) $this->asTranslations[$sLang] = $asData; + if(is_array($asData)) $this->asTranslations[$sLang] = self::flattenTranslations($asData); else { $this->asTranslations[$sLang] = array(); $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) { - return self::LANG_FOLDER.$sLang.self::LANG_EXT; + return self::TRANS_FOLDER.$sLang.self::TRANS_FILE_EXT; } -} \ No newline at end of file +}