Hook_Run('lang_init_start'); $this->sCurrentLang = Config::Get('lang.current'); $this->sDefaultLang = Config::Get('lang.default'); $this->sLangPath = Config::Get('lang.path'); $this->InitLang(); } /** * Инициализирует языковой файл * * @return null */ protected function InitLang() { /** * Если используется кеширование через memcaсhed, то сохраняем данные языкового файла в кеш */ if (Config::Get('sys.cache.type')=='memory') { if (false === ($this->aLangMsg = $this->Cache_Get("lang_{$this->sCurrentLang}"))) { $this->aLangMsg=array(); $this->LoadLangFiles($this->sDefaultLang); if($this->sCurrentLang!=$this->sDefaultLang) $this->LoadLangFiles($this->sCurrentLang); $this->Cache_Set($this->aLangMsg, "lang_{$this->sCurrentLang}", array(), 60*60); } } else { $this->LoadLangFiles($this->sDefaultLang); if($this->sCurrentLang!=$this->sDefaultLang) $this->LoadLangFiles($this->sCurrentLang); } /** * Загружаем в шаблон */ $this->Viewer_Assign('aLang',$this->aLangMsg); } /** * Загружает текстовки из языковых файлов * * @return null */ protected function LoadLangFiles($sLangName) { $sLangFilePath = $this->sLangPath.'/'.$sLangName.'.php'; if(file_exists($sLangFilePath)) { $this->aLangMsg = (count($this->aLangMsg)==0) ? include($sLangFilePath) : array_merge($this->aLangMsg,include($sLangFilePath)); } /** * Ищет языковые файлы модулей и объединяет их с текущим */ $sDirConfig=$this->sLangPath.'/modules/'; if ($hDirConfig = opendir($sDirConfig)) { while (false !== ($sDirModule = readdir($hDirConfig))) { if ($sDirModule !='.' and $sDirModule !='..' and is_dir($sDirConfig.$sDirModule)) { $sFileConfig=$sDirConfig.$sDirModule.'/'.$sLangName.'.php'; if (file_exists($sFileConfig)) { $aLangModule=include($sFileConfig); $this->aLangMsg=array_merge($this->aLangMsg,$aLangModule); } } } closedir($hDirConfig); } /** * Ищет языковые файлы актвиированных плагинов */ if($aPluginList = @file(Config::Get('path.root.server').'/plugins/plugins.dat')) { $sDir=Config::Get('path.root.server').'/plugins/'; foreach ($aPluginList as $sPluginName) { $aFiles=glob($sDir.$sPluginName.'/templates/language/'.$sLangName.'.php'); if($aFiles and count($aFiles)) { foreach ($aFiles as $sFile) { if (file_exists($sFile)) { $aLangModule=include($sFile); $this->aLangMsg=array_merge($this->aLangMsg,$aLangModule); } } } } } } /** * Установить текущий язык * * @param string $sLang */ public function SetLang($sLang) { $this->sCurrentLang=$sLang; $this->InitLang(); } /** * Получить текущий язык * * @return string */ public function GetLang() { return $this->sCurrentLang; } /** * Получить дефолтный язык * * @return string */ public function GetLangDefault() { return $this->sDefaultLang; } /** * Получить список текстовок * * @return unknown */ public function GetLangMsg() { return $this->aLangMsg; } /** * Получает текстовку по её имени * * @param string $sName * @param array $aReplace * @return string */ public function Get($sName,$aReplace=array()) { if (isset($this->aLangMsg[$sName])) { $sTranslate=$this->aLangMsg[$sName]; if(is_array($aReplace)&&count($aReplace)&&is_string($sTranslate)) { foreach ($aReplace as $sFrom => $sTo) { $aReplacePairs["%%{$sFrom}%%"]=$sTo; } $sTranslate=strtr($sTranslate,$aReplacePairs); } if(Config::Get('module.lang.delete_undefined') and is_string($sTranslate)) { $sTranslate=preg_replace("/\%\%[\S]+\%\%/U",'',$sTranslate); } return $sTranslate; } return 'NOT_FOUND_LANG_TEXT'; } /** * Завершаем работу модуля * */ public function Shutdown() { } } ?>