Пример #1
0
 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);
     }
 }
Пример #2
0
 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;
 }
Пример #3
0
 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;
 }
Пример #4
0
 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);
     }
 }
Пример #5
0
 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;
 }