Make translations multi-leveled
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user