asLanguages = array(); $this->asTranslations = array(); $this->loadLanguages(); $this->setLanguage($sLang, $sDefaultLang); } public function setLanguage($sLang, $sDefaultLang) { $this->sDefaultLang = $sDefaultLang; $this->sLang = ($sLang=='')?ToolBox::getUserLanguage($this->asLanguages, $this->sDefaultLang):$sLang; } public function getTranslation($sTransKey='', $sLang='') { $oTransText = false; //Select language & Scope if($sLang=='') $sLang = $this->sLang; $bAllTrans = ($sTransKey==''); //Look up in the selected language dictionary if(in_array($sLang, $this->asLanguages) && ($bAllTrans || array_key_exists($sTransKey, $this->asTranslations[$sLang]))) { $oTransText = $bAllTrans?$this->asTranslations[$sLang]:$this->asTranslations[$sLang][$sTransKey]; } //Look up in the default language dictionary elseif(array_key_exists($sTransKey, $this->asTranslations[$this->sDefaultLang])) { $this->addWarning('Missing translation in "'.$sLang.'" for the key "'.$sTransKey.'", falling back to "'.$this->sDefaultLang.'"'); $oTransText = $this->asTranslations[$this->sDefaultLang][$sTransKey]; } else $this->addWarning($bAllTrans?'Missing language "'.$sLang.'"':'Missing translation in "'.$sLang.'" for the key "'.$sTransKey.'"'); return $oTransText; } public function getTranslations($sLang='') { return $this->getTranslation('', $sLang); } public function getHashToPage($asMenuPages) { $asHashToPage = array(); foreach($asMenuPages as $sHash) { foreach($this->asLanguages as $sLang) { $asHashToPage[$this->getTranslation('menu_'.$sHash.'_key', $sLang)] = $sHash; } } return $asHashToPage; } public function getPageToHash($asMenuPages) { $asPageToHash = array(); foreach($asMenuPages as $sHash) { $asPageToHash[$sHash] = $this->getTranslation('menu_'.$sHash.'_key'); } return $asPageToHash; } private function loadLanguages() { //List all available languages $asLangPaths = glob(self::getLangPath('*')); $this->asLanguages = array_map('basename', $asLangPaths, array_fill(1, count($asLangPaths), self::LANG_EXT)); //Load languages array_walk($this->asLanguages, array($this, 'loadLanguageFile')); } private function loadLanguageFile($sLang) { if(!in_array($sLang, $this->asTranslations)) { $sData = file_get_contents(self::getLangPath($sLang)); $asData = explode("\n", $sData); foreach($asData as $sTranslation) { $iSepPos = mb_stripos($sTranslation, self::LANG_SEP); if($iSepPos !== false) { $sTransKey = trim(mb_substr($sTranslation, 0, $iSepPos)); $sTransText = trim(mb_substr($sTranslation, $iSepPos+1)); $this->asTranslations[$sLang][$sTransKey] = $sTransText; } } } } private static function getLangPath($sLang) { return self::LANG_FOLDER.$sLang.self::LANG_EXT; } }