asLanguages = array(); $this->asTranslations = array(); $this->loadLanguages(); $this->setLanguage($sLang); } public function setLanguage($sLang) { $this->sLang = in_array($sLang, $this->asLanguages)?$sLang:self::DEFAULT_LANG; } public function getTranslation($sTransKey, $sLang='') { $sTransText = false; //Select language if($sLang=='') { $sLang = $this->sLang; } //Look up in the selected language dictionary if(in_array($sLang, $this->asLanguages) && array_key_exists($sTransKey, $this->asTranslations[$sLang])) { $sTransText = $this->asTranslations[$sLang][$sTransKey]; } //Look up in the default language dictionary elseif(array_key_exists($sTransKey, $this->asTranslations[self::DEFAULT_LANG])) { $this->addWarning('Missing translation in "'.$sLang.'" for the key "'.$sTransKey.'", falling back to "'.self::DEFAULT_LANG.'"'); $sTransText = $this->asTranslations[self::DEFAULT_LANG][$sTransKey]; } else $this->addWarning('Missing translation in "'.$sLang.'" for the key "'.$sTransKey.'"'); return $sTransText; } 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 = stripos($sTranslation, self::LANG_SEP); if($iSepPos!==false) { $sTransKey = trim(substr($sTranslation, 0, $iSepPos)); $sTransText = /*htmlspecialchars(*/trim(substr($sTranslation, $iSepPos+1))/*, ENT_QUOTES)*/; //TODO when all entities have been removed $this->asTranslations[$sLang][$sTransKey] = $sTransText; } } } } private static function getLangPath($sLang) { return self::LANG_FOLDER.$sLang.self::LANG_EXT; } } ?>