public function init() { $controller = $this->getActionController(); if (!($requestedLocale = $controller->getRequest()->getParam('language', false))) { $local = new Zend_Locale(); $requestedLocale = $local->getLanguage(); } if (is_array($requestedLocale)) { $requestedLocale = current($requestedLocale); } $requestedLocale = strtolower($requestedLocale); try { Centurion_Db::getSingleton('translation/language')->get(array('locale' => $requestedLocale)); } catch (Centurion_Db_Table_Row_Exception_DoesNotExist $e) { $requestedLocale = Translation_Traits_Common::getDefaultLanguage(); $requestedLocale = $requestedLocale->locale; } Zend_Registry::get('Zend_Translate')->setLocale($requestedLocale); Zend_Locale::setDefault($requestedLocale); Zend_Registry::set('Zend_Locale', $requestedLocale); $options = Centurion_Db_Table_Abstract::getDefaultFrontendOptions(); if (!isset($options['cache_id_prefix'])) { $options['cache_id_prefix'] = ''; } $options['cache_id_prefix'] = $requestedLocale . '_' . $options['cache_id_prefix']; Centurion_Db_Table_Abstract::setDefaultFrontendOptions($options); //TODO: fix this when in test unit environment if (!APPLICATION_ENV === 'testing') { $this->getActionController()->getFrontController()->getParam('bootstrap')->getResource('cachemanager')->addIdPrefix($requestedLocale . '_'); } if (Centurion_Config_Manager::get('translation.global_param')) { $this->getFrontController()->getRouter()->setGlobalParam('language', $requestedLocale); } }
public function getLanguageReference() { static $languageReference = false; if ($languageReference === false) { $filter = $this->_getParam('filter'); if (isset($filter['reference'])) { $languageReference = Centurion_Db::getSingleton('translation/language')->findOneById($filter['reference']); } if ($languageReference === false) { $languageReference = Translation_Traits_Common::getDefaultLanguage(); } } return $languageReference; }
public static function getCurrentLanguageInfo() { $currentLocale = Zend_Registry::get('Zend_Translate')->getLocale(); if (defined("PHPUNIT")) { //In case of test unit, we do not have access to session $languageRow = Centurion_Db::getSingleton('translation/language')->get(array('locale' => $currentLocale)); return $languageRow->toArray(); } $session = new Zend_Session_Namespace('translation_current'); if (!isset($session->language) || $session->language['locale'] != $currentLocale) { try { $languageRow = Centurion_Db::getSingleton('translation/language')->get(array('locale' => $currentLocale)); } catch (Centurion_Db_Table_Row_Exception_DoesNotExist $e) { $languageRow = Translation_Traits_Common::getDefaultLanguage(); } $session->language = $languageRow->toArray(); } return $session->language; }
public function preGenerate() { $f = new Zend_Form_Element_Hidden(array('disableTranslator' => true, 'name' => Translation_Traits_Model_DbTable::ORIGINAL_FIELD)); $f->setAttrib('hidden', true); $this->addElement($f, Translation_Traits_Model_DbTable::ORIGINAL_FIELD); $this->addElement($this->_generateInfoField(Translation_Traits_Model_DbTable::ORIGINAL_FIELD, $this->getView()->translate('Translated from'), '')); $this->addElement($this->_generateInfoField(Translation_Traits_Model_DbTable::LANGUAGE_FIELD, $this->getView()->translate('Language'), (string) Translation_Traits_Common::getDefaultLanguage()->name)); if ($this->getModel()->isOriginalForcedToDefaultLanguage()) { $f = new Zend_Form_Element_Hidden(array('disableTranslator' => true, 'name' => Translation_Traits_Model_DbTable::LANGUAGE_FIELD, 'value' => Translation_Traits_Common::getDefaultLanguage()->id)); $f->setAttrib('hidden', true); $this->addElement($f, Translation_Traits_Model_DbTable::LANGUAGE_FIELD); } else { $langues = Centurion_Db::getSingleton('translation/language')->fetchAll(); foreach ($langues as $lang) { $languages[$lang->id] = $lang->name; } $f = new Zend_Form_Element_Select(array('disableTranslator' => true, 'name' => Translation_Traits_Model_DbTable::LANGUAGE_FIELD, 'value' => Translation_Traits_Common::getDefaultLanguage()->id, 'multiOptions' => $languages, 'label' => $this->getView()->translate('Select a language: '))); $this->addElement($f, Translation_Traits_Model_DbTable::LANGUAGE_FIELD); } }
public function preSave() { $behavior = Centurion_Signal::BEHAVIOR_CONTINUE; $spec = $this->getTable()->getTranslationSpec(); if ($this->{Translation_Traits_Model_DbTable::ORIGINAL_FIELD}) { $parent = $this->getTable()->find($this->{Translation_Traits_Model_DbTable::ORIGINAL_FIELD})->current(); $this->_processSpecialFields($spec[Translation_Traits_Model_DbTable::DUPLICATED_FIELDS], $parent); $this->_processSpecialFields($spec[Translation_Traits_Model_DbTable::SET_NULL_FIELDS]); $behavior = Centurion_Signal::BEHAVIOR_STOP_PROPAGATION; } else { if (!$this->{Translation_Traits_Model_DbTable::LANGUAGE_FIELD}) { $this->{Translation_Traits_Model_DbTable::LANGUAGE_FIELD} = Translation_Traits_Common::getDefaultLanguage()->pk; } $translations = $this->getTable()->filter(array(Translation_Traits_Model_DbTable::ORIGINAL_FIELD => $this->pk)); foreach ($translations as $translation) { $this->_processSpecialFields($spec[Translation_Traits_Model_DbTable::DUPLICATED_FIELDS], $this, $translation); //@todo do we reset translated field if original data changes ? //$this->_processSpecialFields($spec[Translation_Traits_Model_DbTable::TRANSLATED_FIELDS], $this, $translation); } } return $behavior; }