예제 #1
0
 public function translate($category, $message, $language = null)
 {
     $returnedValue = null;
     if (is_object($category)) {
         if ($category->isNewRecord || $category->getPrimaryKey() === null) {
             return null;
         }
         if ($category->hasAttribute($message) || property_exists($category, $message)) {
             $category = '#.' . get_class($category) . '-' . $message . '.' . $category->getPrimaryKey();
             $message = null;
         } else {
             throw new TsTranslationException('The model ' . get_class($category) . ' have not attribute ' . $message);
         }
     } elseif ($category === null) {
         $category = '';
         if (Yii::app()->controller->module !== null) {
             $category .= Yii::app()->controller->module->id . '.';
         } else {
             $category .= 'root.';
         }
         $category .= Yii::app()->controller->id . '.' . Yii::app()->controller->action->id;
     }
     if ($language === null) {
         $language = Yii::app()->getLanguage();
     }
     if ($this->forceTranslation || $language !== $this->getLanguage() || strpos($category, '#.') === 0) {
         $returnedValue = $this->translateMessage($category, $message, $language);
     } else {
         $returnedValue = $message;
     }
     if ($this->ifNotTranslatedShowDefault && $language !== TsTranslationComponent::getDefaultLanguage('code2') && is_null($returnedValue)) {
         $returnedValue = $this->translate($category, $message, TsTranslationComponent::getDefaultLanguage('code2'));
     }
     return !is_null($returnedValue) ? $returnedValue : $this->notTranslatedMessage;
 }
 public static function getSourceColumn($data, $code2)
 {
     if (strpos($data->category, '#.') === 0) {
         echo '<span class="translates-list source-green">' . Yii::t($data->category, $data->message, array(), null, TsTranslationComponent::getDefaultLanguage('code2')) . '</span>';
     } elseif (empty($data->message)) {
         echo '<span class="translates-list source-red">This is empty message</span>';
     } else {
         echo $data->message;
     }
 }
예제 #3
0
 public function run()
 {
     if ($this->dynamicTranslate) {
         if (!TsTranslation::model()->isAccessEnabled()) {
             throw new CHttpException(403, 'You have no permission to use dynamic content save method!');
         }
         $languageArray = TsTranslationComponent::getAvailableLanguages(false);
         if (!$this->showIsOne && count($languageArray) <= 1) {
             return;
         }
         $assetsUrl = $this->registerClientScript();
         $templateArray = explode('{items}', $this->template);
         $params = $_GET;
         $items = '';
         $currentLang = '';
         $dtLang = TsTranslation::model()->getDtLanguage();
         foreach ($languageArray as $lang) {
             if ($lang->code2 == $dtLang) {
                 $currentLang = '<span class="ts-current-dt-lang btn" data-toggle="' . $this->type . '" href="#">' . strtr($this->itemTemplate, array('{flag}' => '<img src="' . $assetsUrl . '/images/flags/' . $lang->code2 . '.gif">', '{name}' => $lang->name, '{nativeName}' => $lang->nativeName, '{code}' => $lang->code2)) . '</span>';
             } else {
                 $item = strtr($this->itemTemplate, array('{flag}' => '<img src="' . $assetsUrl . '/images/flags/' . $lang->code2 . '.gif">', '{name}' => $lang->name, '{nativeName}' => $lang->nativeName, '{code}' => $lang->code2));
                 $params['_dtLang'] = $lang->code2;
                 $items .= '<li><a data-language="' . $lang->code2 . '" href="' . Yii::app()->createUrl(Yii::app()->controller->route, $params) . '">' . $item . '</a></li>';
             }
         }
         echo $templateArray[0] . '<div id="' . $this->_id . '" class="' . $this->type . ' ts-dt-language-widget">' . $currentLang . '<ul class="' . $this->type . '-menu ts-lang-changer-list">' . $items . '</ul></div>' . $templateArray[1];
     } else {
         $languageArray = TsTranslationComponent::getActiveLanguages(false);
         if (!$this->showIsOne && count($languageArray) <= 1) {
             return;
         }
         $assetsUrl = $this->registerClientScript();
         $urlManager = Yii::app()->getComponent('urlManager');
         $templateArray = explode('{items}', $this->template);
         $params = $_GET;
         $items = '';
         $currentLang = '<span class="ts-current-dt-lang btn" data-toggle="' . $this->type . '" href="#"><img src="' . $assetsUrl . '/images/flags/' . Yii::app()->language . '.gif"> ' . Yii::app()->language . ' (This language not active, please select other language)</span>';
         foreach ($languageArray as $lang) {
             $item = strtr($this->itemTemplate, array('{flag}' => '<img src="' . $assetsUrl . '/images/flags/' . $lang->code2 . '.gif">', '{name}' => $lang->name, '{nativeName}' => $lang->nativeName, '{code}' => $lang->code2));
             if ($lang->code2 == Yii::app()->language) {
                 $currentLang = '<span class="ts-current-lang btn" data-toggle="' . $this->type . '" href="#">' . strtr($this->itemTemplate, array('{flag}' => '<img src="' . $assetsUrl . '/images/flags/' . $lang->code2 . '.gif">', '{name}' => $lang->name, '{nativeName}' => $lang->nativeName, '{code}' => $lang->code2)) . '</span>';
                 $items .= '<li><a data-language="' . $lang->code2 . '" href="#" class="ts-current-lang-link" onclick="javascript:return false;">' . $item . '</a></li>';
             } else {
                 $params['_lang'] = $lang->code2;
                 $items .= '<li><a data-language="' . $lang->code2 . '" href="' . Yii::app()->createUrl(Yii::app()->controller->route, $params) . '">' . $item . '</a></li>';
             }
         }
         if ($this->type === 'inline') {
             $currentLang = '';
         }
         if ($urlManager->showLangInUrl) {
             echo $templateArray[0] . '<div id="' . $this->_id . '" class="' . $this->type . ' ts-language-widget">' . $currentLang . '<ul class="' . $this->type . '-menu ts-lang-changer-list">' . $items . '</ul></div>' . $templateArray[1];
         } else {
             echo $templateArray[0] . '<div id="' . $this->_id . '" class="' . $this->type . ' ts-language-widget"><form id="tsLangChangerForm" method="POST"><input type="hidden" name="_newLang" id="tsNewLang" value="">' . $currentLang . '<ul class="' . $this->type . '-menu ts-lang-changer-list">' . $items . '</ul></form></div>' . $templateArray[1];
         }
     }
 }
예제 #4
0
 /**
  * Save dynamic content in $language language,
  *      if $language is null uses value returned by TsTranslation::model()->getDtLanguage().
  * TsTranslation::model()->getDtLanguage() returns `dynamicTranslate` language,
  *      which select user by widget:
  *      <code>     
  *          $this->widget('tstranslation.widgets.TsLanguageWidget', array(
  *              'dynamicTranslate' => true,
  *          ));
  *      </code>
  * Example of use:
  * <code>
  *  if(isset($_POST['Articles'])) {
  *      $model->attributes = $_POST['Articles'];
  *      if($model->save()) {
  *           TsTranslation::save($model, array('title', 'introText', 'fullText'));
  *      }
  *  }
  * </code>
  *  
  * @param CModel or string $categoryOrModel
  * @param string or array $messageOrAttribute
  * @param string $language
  * @throws CHttpException if user have not permission
  * @throws TsTranslationException if CModel $categoryOrModel have not attribute $messageOrAttribute
  */
 public static function save($categoryOrModel, $messageOrAttribute, $language = null)
 {
     if (!self::model()->isAccessEnabled()) {
         throw new CHttpException(403, 'You have no permission to use dynamic content save method!');
     }
     $category = $categoryOrModel;
     $message = $messageOrAttribute;
     if ($language === null) {
         $language = self::model()->getDtLanguage();
     } elseif ($language === 'default') {
         $language = TsTranslationComponent::getDefaultLanguage('code2');
     }
     if (is_object($categoryOrModel)) {
         if ($categoryOrModel->isNewRecord || $categoryOrModel->getPrimaryKey() === null) {
             throw new TsTranslationException('The primary key of model ' . get_class($categoryOrModel) . ' is empty. Perhaps you call function TsTranslation::dt() before saving model');
         }
         if (is_array($messageOrAttribute)) {
             foreach ($messageOrAttribute as $m) {
                 if ($categoryOrModel->hasAttribute($m) || property_exists($categoryOrModel, $m)) {
                     $category = '#.' . get_class($categoryOrModel) . '-' . $m . '.' . $categoryOrModel->getPrimaryKey();
                     $message = $categoryOrModel->{$m};
                     self::model()->_save($category, $message, $language);
                 } else {
                     throw new TsTranslationException('The model ' . get_class($categoryOrModel) . ' have not attribute ' . $m);
                 }
             }
         } else {
             if ($categoryOrModel->hasAttribute($messageOrAttribute) || property_exists($categoryOrModel, $messageOrAttribute)) {
                 $category = '#.' . get_class($categoryOrModel) . '-' . $messageOrAttribute . '.' . $categoryOrModel->getPrimaryKey();
                 $message = $categoryOrModel->{$messageOrAttribute};
                 self::model()->_save($category, $message, $language);
             } else {
                 throw new TsTranslationException('The model ' . get_class($categoryOrModel) . ' have not attribute ' . $messageOrAttribute);
             }
         }
     } else {
         if (!is_string($category)) {
             throw new TsTranslationException('The first parameter of TsTranslation::save() method must be CActiveRecord model or string');
         }
         if (!is_string($message)) {
             throw new TsTranslationException('If the first parameter of TsTranslation::save() method is string, the second parameter also must be string');
         }
         $event = new CMissingTranslationEvent(self::getTsTranslation(), $category, $message, $language);
         self::addTranslation($event);
     }
 }
예제 #5
0
 /**
  * Save dynamic content in $language language,
  *      if $language is null uses value returned by TsTranslation::model()->getDtLanguage().
  * TsTranslation::model()->getDtLanguage() returns `dynamicTranslate` language,
  *      which select user by widget:
  *      <code>     
  *          $this->widget('tstranslation.widgets.TsLanguageWidget', array(
  *              'dynamicTranslate' => true,
  *          ));
  *      </code>
  * Example of use:
  * <code>
  *  if(isset($_POST['Articles'])) {
  *      $model->attributes = $_POST['Articles'];
  *      if($model->save()) {
  *           TsTranslation::save($model, array('title', 'introText', 'fullText'));
  *      }
  *  }
  * </code>
  *  
  * @param CModel or string $categoryOrModel
  * @param string or array $messageOrAttribute
  * @param string $language
  * @throws CHttpException if user have not permission
  * @throws TsTranslationException if CModel $categoryOrModel have not attribute $messageOrAttribute
  */
 public static function save($categoryOrModel, $messageOrAttribute, $language = null)
 {
     if (!self::model()->isAccessEnabled()) {
         throw new CHttpException(403, 'You have no permission to use dynamic content save method!');
     }
     $category = $categoryOrModel;
     $message = $messageOrAttribute;
     if ($language === null) {
         $language = self::model()->getDtLanguage();
     } elseif ($language === 'default') {
         $language = TsTranslationComponent::getDefaultLanguage('code2');
     }
     if (is_object($categoryOrModel)) {
         if ($categoryOrModel->isNewRecord || $categoryOrModel->getPrimaryKey() === null) {
             throw new TsTranslationException('The primary key of model ' . get_class($categoryOrModel) . ' is empty. Perhaps you call function TsTranslation::dt() before saving model');
         }
         if (is_array($messageOrAttribute)) {
             foreach ($messageOrAttribute as $m) {
                 if (property_exists($categoryOrModel, $m)) {
                     $category = '#.' . get_class($categoryOrModel) . '-' . $m . '.' . $categoryOrModel->getPrimaryKey();
                     $message = $categoryOrModel->{$m};
                     self::model()->_save($category, $message, $language);
                 } else {
                     throw new TsTranslationException('The model ' . get_class($categoryOrModel) . ' have not attribute ' . $m);
                 }
             }
         } else {
             if (property_exists($categoryOrModel, $messageOrAttribute)) {
                 $category = '#.' . get_class($categoryOrModel) . '-' . $messageOrAttribute . '.' . $categoryOrModel->getPrimaryKey();
                 $message = $categoryOrModel->{$messageOrAttribute};
                 self::model()->_save($category, $message, $language);
             } else {
                 throw new TsTranslationException('The model ' . get_class($categoryOrModel) . ' have not attribute ' . $messageOrAttribute);
             }
         }
     } else {
         self::model()->_save($category, $message, $language);
     }
 }