lng->myVar will return $this->lng->$module->$controller->myVar if ($this->$module->$controller) foreach ($this->$module->$controller as $elemName => $elemValue) { if (empty($this->$elemName) || is_string($this->$elemName)) { $this->$elemName = $elemValue; } } $this->manager = $this->quilium; } } class Plugin_SetupI18n extends Zend_Controller_Plugin_Abstract { protected $queryLanguage = false; protected $allLanguages = false; protected $locales = false; public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { $registry = Zend_Registry::getInstance(); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $allowedLanguages = array_keys($registry->settings->allLanguages->ToArray()); $model = Model_Factory::getInstance('Config'); $config = $model->fetch(); if (APPLICATION_DEFAULT_MODULE == 'manager') { $lang = $registry->settings->defaultBackendLanguage; $interface = 'backend'; } else { $interface = 'frontend'; if ($request->getParam('lang') && in_array($request->getParam('lang'), $allowedLanguages)) { if ($config->getLanguageActive($request->getParam('lang')) || $request->getParam('workspace') || ($_COOKIE['fePreview']&&$_COOKIE['adm']&&$registry->isAdmin)) { $lang = $request->getParam('lang'); } else { Quilium_Handler_Cache::getInstance()->getPageCache()->cancel(); $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); $redirector->setCode(302); $redirector->gotoAndExit('index','index','default',array( 'id'=> $config->getDefaultNavId(), 'lang' => $registry->settings->defaultFrontendLanguage )); } } elseif(!is_null($registry->settings->langAutoRedirect) && !$registry->settings->langAutoRedirect) { if (($this->_request->getControllerName() != 'media' || $this->_request->getActionName() != 'download') && $this->_request->getControllerName() != 'cron' && $this->_request->getControllerName() != 'rss' && $this->_request->getModuleName() != 'api' && $this->_request->getModuleName() != 'logout') { Quilium_Handler_Cache::getInstance()->getPageCache()->cancel(); $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); $redirector->setCode(302); $redirector->gotoAndExit('index','index','default',array( 'id'=> $config->getDefaultNavId(), 'lang' => $registry->settings->defaultFrontendLanguage )); } } else { $acceptLanguages = $this->getAcceptLanguages($request); foreach ($acceptLanguages as $acceptLanguage) { if (in_array($acceptLanguage, $allowedLanguages) && $config->getLanguageActive($acceptLanguage)) { $lang = $acceptLanguage; break; } } if (empty($lang)) { $lang = $registry->settings->defaultFrontendLanguage;; } } } // get lang file for each module $cache_id = "Lang_".$interface."_".$lang; if ((!$lang_ini=$registry->cache->getServiceCache()->load($cache_id))) { $helper_modules = Quilium_Handler_Modules::getInstance(); $modules = $helper_modules->getModules(true); $lang_ini = new LanguageFile(); //Load manager (default quilium) lang file try { $lang_ini->quilium = new Zend_Config_Ini( APPLICATION_ROOT.'/application/manager/lang/'.$interface.'/'.$lang.'.ini',null,array('allowModifications'=>true) ); } catch (Zend_Exception $e) { $lang_ini->quilium = new LanguageFile(); } try { $common = new Zend_Config_Ini( APPLICATION_ROOT.'/application/manager/lang/common/'.$lang.'.ini',null,array('allowModifications'=>true) ); $this->replaceRecursive($lang_ini->quilium, $common); } catch (Exception $e) { } try { // adding (and overwriting) custom language file if (file_exists( APPLICATION_ROOT.'/public/themes/'.$registry->default->theme.'/lang/'.$lang.'.ini' )) { $custom = new Zend_Config_Ini( APPLICATION_ROOT.'/public/themes/'.$registry->default->theme.'/lang/'.$lang.'.ini', null, array('allowModifications'=>true) ); $this->replaceRecursive($lang_ini->quilium, $custom); } } catch (Zend_Exception $e) { //default don't have custom lang file } // Load modules foreach ($modules as $module => $moduleName) { try { $lang_ini->$module = new Zend_Config_Ini( APPLICATION_PATH.'/'.$module.'/lang/'.$interface.'/'.$lang.'.ini',null,array('allowModifications'=>true) ); // adding _content_element in default(quilium) section if ($lang_ini->$module && $lang_ini->$module->_content_elements) { if (!$lang_ini->quilium->_content_elements) { $lang_ini->quilium->_content_elements = new LanguageFile(); } foreach ($lang_ini->$module->_content_elements as $key=>$value) { if (!$lang_ini->quilium->_content_elements->$key) { $lang_ini->quilium->_content_elements->$key = $value; } } } } catch(Zend_Exception $e) { //module don't have lang file $lang_ini->$module = new LanguageFile(); } try { $common = new Zend_Config_Ini( APPLICATION_PATH.'/'.$module.'/lang/common/'.$lang.'.ini',null,array('allowModifications'=>true) ); $this->replaceRecursive($lang_ini->$module, $common); } catch(Zend_Exception $e) { //module don't have common lang file } try { // adding (and overwriting) custom language file $custom = new Zend_Config_Ini( APPLICATION_ROOT.'/public/themes/'.$registry->default->theme.'/lang/'.$module.'/'.$lang.'.ini', null, array('allowModifications'=>true) ); $this->replaceRecursive($lang_ini->$module, $custom); } catch (Zend_Exception $e) { //module don't have custom lang file } } $registry->cache->getServiceCache()->save($lang_ini, $cache_id); } // set some vars $viewRenderer->view->lng = $lang_ini; $viewRenderer->view->currentLanguage = $lang; $registry->currentLanguage = $lang; $registry->lng = $lang_ini; //Get session variable $session = new Quilium_Session_Namespace('session'); $session->language = array('code' => $lang, 'name' => $registry->settings->allLanguages->$lang, 'locales' => $registry->settings->locales->$lang); $local_tmp = explode(',',$registry->settings->locales->$lang); setlocale(LC_TIME, $local_tmp[0]); Zend_Registry::set('Zend_Locale',new Zend_Locale('en')); } protected function replaceRecursive(&$src, $replace) { if (is_object($replace)) { foreach ($replace as $key=>$value) { if (is_object($value) || is_array($value)) { if ($src->$key===null) $src->$key=new LanguageFile(); $this->replaceRecursive($src->$key, $value); } else { $src->$key=$value; } } } elseif (is_array($replace)) { foreach ($replace as $key=>$value) { $this->replaceRecursive($src[$key], $value); if (is_array($value)) { $this->replaceRecursive($src[$key], $value); } else { $src[$key]=$value; } } } else { $src = $replace; } } protected function getAcceptLanguages(Zend_Controller_Request_Http $request) { $headerAcceptLanguages = $request->getHeader('Accept-Language'); $acceptLanguages = array(); foreach (explode(';', $headerAcceptLanguages) as $dataAcceptLanguage) { foreach (explode(',', $dataAcceptLanguage) as $availableLanguageFormat) { if (2 == strlen($availableLanguageFormat)) { $acceptLanguages[] = $availableLanguageFormat; } } } return $acceptLanguages; } }