Inheritance: extends yii\db\ActiveRecord
Ejemplo n.º 1
0
 /**
  * @param LanguageSource $languageSource
  * @return LanguageTranslate
  */
 private function _getTranslation($languageSource)
 {
     $languageId = Yii::$app->request->post('language_id', '');
     $languageTranslate = $languageSource->getLanguageTranslates()->andWhere(['language' => $languageId])->one();
     if (!$languageTranslate) {
         $languageTranslate = new LanguageTranslate(['id' => $languageSource->id, 'language' => $languageId]);
     }
     return $languageTranslate;
 }
Ejemplo n.º 2
0
 /**
  * Scanning project for text not stored in database.
  * @return integer The number of new language elements.
  */
 public function scanning()
 {
     $this->_scanningProject();
     $languageSources = LanguageSource::find()->all();
     foreach ($languageSources as $languageSource) {
         if (isset($this->_languageItems[$languageSource->category][$languageSource->message])) {
             unset($this->_languageItems[$languageSource->category][$languageSource->message]);
         }
     }
     $languageSource = new LanguageSource();
     return $languageSource->insertLanguageItems($this->_languageItems);
 }
Ejemplo n.º 3
0
 /**
  * Creating _languageSources array.
  */
 private function _createLanguageSource()
 {
     $languageSources = LanguageSource::find()->all();
     foreach ($languageSources as $languageSource) {
         $this->_languageSources[$languageSource->category][$languageSource->message] = $languageSource->id;
     }
 }
 /**
  * Deletes an existing LanguageSource model.
  * If deletion is successful, the browser will be redirected to the 'list' page.
  * @return json
  */
 public function run()
 {
     Yii::$app->response->format = Response::FORMAT_JSON;
     $ids = Yii::$app->request->post('ids');
     LanguageSource::deleteAll(['id' => (array) $ids]);
     return [];
 }
 /**
  * @param array $params Search conditions.
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $translateLanguage = Yii::$app->request->get('language_id', Yii::$app->sourceLanguage);
     $sourceLanguage = $this->_getSourceLanguage();
     $query = LanguageSource::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $dataProvider->setSort(['attributes' => ['id', 'category', 'message', 'translation' => ['asc' => ['lt.translation' => SORT_ASC], 'desc' => ['lt.translation' => SORT_DESC], 'label' => Yii::t('language', 'Translation')]]]);
     if (!($this->load($params) && $this->validate())) {
         $query->joinWith(['languageTranslate' => function ($query) use($translateLanguage) {
             $query->from(['lt' => LanguageTranslate::tableName()])->onCondition(['lt.language' => $translateLanguage]);
         }]);
         $query->joinWith(['languageTranslateByLanguage' => function ($query) use($sourceLanguage) {
             $query->from(['ts' => LanguageTranslate::tableName()])->onCondition(['ts.language' => $sourceLanguage]);
         }]);
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id, 'category' => $this->category]);
     $query->andFilterWhere(['or', $this->createLikeExpression('message', $this->message), $this->createLikeExpression('ts.translation', $this->message)]);
     $query->joinWith(['languageTranslate' => function ($query) use($translateLanguage) {
         $query->from(['lt' => LanguageTranslate::tableName()])->onCondition(['lt.language' => $translateLanguage])->andFilterWhere($this->createLikeExpression('lt.translation', $this->translation));
     }]);
     $query->joinWith(['languageTranslateByLanguage' => function ($query) use($sourceLanguage) {
         $query->from(['ts' => LanguageTranslate::tableName()])->onCondition(['ts.language' => $sourceLanguage]);
     }]);
     return $dataProvider;
 }
 /**
  * @return Array[] Generate a two dimensional array of the translation data for the exportLanguages:
  * 
  * ~~~
  * [
  *  'languages' => [],
  *  'languageSources' => [],
  *  'languageTranslations' => [],
  * ]
  * ~~~
  * 
  */
 public function getExportData()
 {
     $languages = Language::findAll($this->exportLanguages);
     $languageSources = LanguageSource::find()->all();
     $languageTranslations = LanguageTranslate::findAll(['language' => $this->exportLanguages]);
     $data = ['languages' => $languages, 'languageSources' => $languageSources, 'languageTranslations' => $languageTranslations];
     return $data;
 }
 /**
  * Creating dialogue box.
  * @return View
  */
 public function run()
 {
     $languageSource = LanguageSource::findOne(['category' => Yii::$app->request->post('category', ''), 'MD5(message)' => Yii::$app->request->post('hash', '')]);
     if (!$languageSource) {
         return '<div id="translate-manager-error">' . Yii::t('language', 'Text not found in database! Please run project scan before translating!') . '</div>';
     }
     $languageTranslate = $languageSource->getLanguageTranslateByLanguage(Yii::$app->request->post('language_id', ''))->one() ?: new \lajax\translatemanager\models\LanguageTranslate(['id' => $languageSource->id, 'language' => Yii::$app->request->post('language_id', '')]);
     return $this->controller->renderPartial('dialog', ['languageSource' => $languageSource, 'languageTranslate' => $languageTranslate]);
 }
Ejemplo n.º 8
0
 /**
  * Initializing $_languageElements array.
  * @param array $languageSourceIds
  */
 private function _initLanguageElements($languageSourceIds)
 {
     $languageSources = LanguageSource::findAll(['id' => $languageSourceIds]);
     foreach ($languageSources as $languageSource) {
         $this->_languageElements[$languageSource->category][$languageSource->message] = $languageSource->id;
         $category = Console::ansiFormat($languageSource->category, [Console::FG_RED]);
         $message = Console::ansiFormat($languageSource->message, [Console::FG_RED]);
         $this->_scanner->stdout('category: ' . $category . ', message: ' . $message);
     }
 }
 /**
  * Returning messages in the given language
  * @return string
  */
 public function run()
 {
     $languageTranslate = LanguageTranslate::findOne(['id' => Yii::$app->request->get('id', 0), 'language' => Yii::$app->request->get('language_id', '')]);
     if ($languageTranslate) {
         $translation = $languageTranslate->translation;
     } else {
         $languageSource = LanguageSource::findOne(['id' => Yii::$app->request->get('id', 0)]);
         $translation = $languageSource ? $languageSource->message : '';
     }
     return $translation;
 }
 public function search($params)
 {
     $this->_languageId = $params['language_id'];
     $query = LanguageSource::find()->with(['languageTranslate' => function ($query) {
         $query->andWhere(['language' => $this->_languageId]);
     }]);
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id]);
     $query->andFilterWhere(['like', 'category', $this->category])->andFilterWhere(['like', 'message', $this->message]);
     return $dataProvider;
 }
Ejemplo n.º 11
0
 /**
  * Returns an ArrayDataProvider consisting of language elements.
  * @param array $languageSourceIds
  * @return ArrayDataProvider
  */
 private function _createLanguageSourceDataProvider($languageSourceIds)
 {
     $languageSources = LanguageSource::find()->with('languageTranslates')->where(['id' => $languageSourceIds])->all();
     $data = [];
     foreach ($languageSources as $languageSource) {
         $languages = [];
         if ($languageSource->languageTranslates) {
             foreach ($languageSource->languageTranslates as $languageTranslate) {
                 $languages[] = $languageTranslate->language;
             }
         }
         $data[] = ['id' => $languageSource->id, 'category' => $languageSource->category, 'message' => $languageSource->message, 'languages' => implode(', ', $languages)];
     }
     return new ArrayDataProvider(['allModels' => $data, 'pagination' => false]);
 }
 /**
  * @param array $params Search conditions.
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     Yii::$app->session->setFlash('TM-language__id', $params['language_id']);
     $query = LanguageSource::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $dataProvider->setSort(['attributes' => ['id', 'category', 'message', 'translation' => ['asc' => ['translation' => SORT_ASC], 'desc' => ['translation' => SORT_DESC], 'label' => Yii::t('language', 'Translation')]]]);
     if (!($this->load($params) && $this->validate())) {
         $query->joinWith('languageTranslateByLanguage');
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id, 'category' => $this->category]);
     $query->andFilterWhere(['like', 'lower(message)', mb_strtolower($this->message, 'UTF-8')]);
     $query->joinWith(['languageTranslateByLanguage' => function ($query) {
         if ($this->translation) {
             $searchEmptyCommand = \Yii::$app->controller->module->searchEmptyCommand;
             if ($searchEmptyCommand && $this->translation == $searchEmptyCommand) {
                 $query->andWhere(['or', ['translation' => null], ['translation' => '']]);
             } else {
                 $query->andWhere(['like', 'lower(translation)', mb_strtolower($this->translation, 'UTF-8')]);
             }
         }
     }]);
     return $dataProvider;
 }
Ejemplo n.º 13
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getLanguageSources()
 {
     return $this->hasMany(LanguageSource::className(), ['id' => 'id'])->viaTable(LanguageTranslate::tableName(), ['language' => 'language_id']);
 }
Ejemplo n.º 14
0
 /**
  * Saveing new language element by category.
  * @param string $message Language element save in database.
  * @param string $category the message category.
  */
 public static function saveMessage($message, $category = 'database')
 {
     $languageSources = \lajax\translatemanager\models\LanguageSource::find()->where(['category' => $category])->all();
     $messages = [];
     foreach ($languageSources as $languageSource) {
         $messages[$languageSource->message] = $languageSource->id;
     }
     if (empty($messages[$message])) {
         $languageSource = new \lajax\translatemanager\models\LanguageSource();
         $languageSource->category = $category;
         $languageSource->message = $message;
         $languageSource->save();
     }
 }
Ejemplo n.º 15
0
 /**
  * Import the uploaded file. Existing languages and translations will be updated, new ones will be created.
  * Source messages won't be updated, only created if they not exist.
  * @return array
  * @throws BadRequestHttpException
  * @throws Exception
  */
 public function import()
 {
     $result = ['languages' => ['new' => 0, 'updated' => 0], 'languageSources' => ['new' => 0, 'updated' => 0], 'languageTranslations' => ['new' => 0, 'updated' => 0]];
     $data = $this->parseImportFile();
     /** @var Language[] $languages */
     $languages = Language::find()->indexBy('language_id')->all();
     foreach ($data['languages'] as $importedLanguage) {
         if (isset($languages[$importedLanguage['language_id']])) {
             $language = $languages[$importedLanguage['language_id']];
         } else {
             $language = new Language();
         }
         //cast integers
         $importedLanguage['status'] = (int) $importedLanguage['status'];
         $language->attributes = $importedLanguage;
         if (count($language->getDirtyAttributes())) {
             $saveType = $language->isNewRecord ? 'new' : 'updated';
             if ($language->save()) {
                 $result['languages'][$saveType]++;
             } else {
                 $this->throwInvalidModelException($language);
             }
         }
     }
     /** @var LanguageSource[] $languageSources */
     $languageSources = LanguageSource::find()->indexBy('id')->all();
     /** @var LanguageTranslate[] $languageTranslations */
     $languageTranslations = LanguageTranslate::find()->all();
     /*
      *  Create 2 dimensional array for current and imported translation, first index by LanguageSource->id
      *  and than indexed by LanguageTranslate->language.
      *  E.g.: [
      *      id => [
      *          language => LanguageTranslate (for $languageTranslations) / Array (for $importedLanguageTranslations)
      *          ...
      *      ]
      *      ...
      * ]
      */
     $languageTranslations = ArrayHelper::map($languageTranslations, 'language', function ($languageTranslation) {
         return $languageTranslation;
     }, 'id');
     $importedLanguageTranslations = ArrayHelper::map($data['languageTranslations'], 'language', function ($languageTranslation) {
         return $languageTranslation;
     }, 'id');
     foreach ($data['languageSources'] as $importedLanguageSource) {
         $languageSource = null;
         //check if id exist and if category and messages are matching
         if (isset($languageSources[$importedLanguageSource['id']]) && $languageSources[$importedLanguageSource['id']]->category == $importedLanguageSource['category'] && $languageSources[$importedLanguageSource['id']]->message == $importedLanguageSource['message']) {
             $languageSource = $languageSources[$importedLanguageSource['id']];
         }
         if (is_null($languageSource)) {
             //no match by id, search by message
             foreach ($languageSources as $languageSourceSearch) {
                 if ($languageSourceSearch->category == $importedLanguageSource['category'] && $languageSourceSearch->message == $importedLanguageSource['message']) {
                     $languageSource = $languageSourceSearch;
                     break;
                 }
             }
         }
         if (is_null($languageSource)) {
             //still no match, create new
             $languageSource = new LanguageSource(['category' => $importedLanguageSource['category'], 'message' => $importedLanguageSource['message']]);
             if ($languageSource->save()) {
                 $result['languageSources']['new']++;
             } else {
                 $this->throwInvalidModelException($languageSource);
             }
         }
         //do we have translations for the current source?
         if (isset($importedLanguageTranslations[$importedLanguageSource['id']])) {
             //loop through the translations for the current source
             foreach ($importedLanguageTranslations[$importedLanguageSource['id']] as $importedLanguageTranslation) {
                 $languageTranslate = null;
                 //is there already a translation for this souce
                 if (isset($languageTranslations[$languageSource->id]) && isset($languageTranslations[$languageSource->id][$importedLanguageTranslation['language']])) {
                     $languageTranslate = $languageTranslations[$languageSource->id][$importedLanguageTranslation['language']];
                 }
                 //no translation found, create a new one
                 if (is_null($languageTranslate)) {
                     $languageTranslate = new LanguageTranslate();
                 }
                 $languageTranslate->attributes = $importedLanguageTranslation;
                 //overwrite the id because the $languageSource->id might be different from the $importedLanguageTranslation['id']
                 $languageTranslate->id = $languageSource->id;
                 if (count($languageTranslate->getDirtyAttributes())) {
                     $saveType = $languageTranslate->isNewRecord ? 'new' : 'updated';
                     if ($languageTranslate->save()) {
                         $result['languageTranslations'][$saveType]++;
                     } else {
                         $this->throwInvalidModelException($languageTranslate);
                     }
                 }
             }
         }
     }
     return $result;
 }
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getLanguageSource()
 {
     return $this->hasOne(LanguageSource::className(), ['id' => 'id']);
 }
Ejemplo n.º 17
0
 /**
  * Returns the category of LanguageSource in an associative array.
  * @return array
  */
 public static function getCategories()
 {
     $languageSources = \lajax\translatemanager\models\LanguageSource::find()->select('category')->distinct()->all();
     $categories = [];
     foreach ($languageSources as $languageSource) {
         $categories[$languageSource->category] = $languageSource->category;
     }
     return $categories;
 }
Ejemplo n.º 18
0
 /**
  * Loads language elements in JavaScript category.
  */
 private function _loadLanguageItems()
 {
     $this->_languageItems = LanguageSource::find()->joinWith(['languageTranslate' => function ($query) {
         $query->where(['language' => $this->_languageId]);
     }])->where(['category' => Scanner::CATEGORY_JAVASCRIPT])->all();
 }
Ejemplo n.º 19
0
 /**
  * Initialising $_languageItems and $_removableLanguageSourceIds arrays.
  */
 private function _initLanguageArrays()
 {
     $this->_scanningProject();
     $languageSources = LanguageSource::find()->all();
     foreach ($languageSources as $languageSource) {
         if (isset($this->_languageElements[$languageSource->category][$languageSource->message])) {
             unset($this->_languageElements[$languageSource->category][$languageSource->message]);
         } else {
             $this->_removableLanguageSourceIds[$languageSource->id] = $languageSource->id;
         }
     }
 }
Ejemplo n.º 20
0
 /**
  * Loads language elements in JavaScript category.
  */
 private function _getLanguageItems()
 {
     $this->_languageItems = LanguageSource::find()->joinWith(['languageTranslate' => function ($query) {
         $query->where('language_translate.language = :language', [':language' => $this->_languageId]);
     }])->where('`category` = :category', [':category' => 'javascript'])->all();
 }