public static function handleMissingTranslation(MissingTranslationEvent $event) { \Yii::info("@DB: {$event->category}.{$event->message} FOR LANGUAGE {$event->language} @"); $driver = \Yii::$app->getDb()->getDriverName(); $caseInsensitivePrefix = $driver === 'mysql' ? 'binary' : ''; $sourceMessage = SourceMessage::find()->where('category = :category and message = ' . $caseInsensitivePrefix . ' :message', [':category' => $event->category, ':message' => $event->message])->with('messages')->one(); if (!$sourceMessage) { \Yii::info("@WRITE TO DB: {$event->category}.{$event->message} FOR LANGUAGE {$event->language} @"); $sourceMessage = new SourceMessage(); $sourceMessage->setAttributes(['category' => $event->category, 'message' => $event->message], false); $sourceMessage->save(false); } $sourceMessage->initMessages(); $sourceMessage->saveMessages(); $messages = $sourceMessage->messages; if (isset($messages[\Yii::$app->sourceLanguage])) { $message = $messages[\Yii::$app->sourceLanguage]; $message->translation = $sourceMessage->message; $message->save(false); } /** * @var $message Message */ $message = ArrayHelper::getValue($sourceMessage->messages, \Yii::$app->language); if ($message) { $event->translatedMessage = $message->translation; } }
/** * @param array|null $params * @return ActiveDataProvider */ public function search($params) { $query = SourceMessage::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } if ($this->status == static::STATUS_TRANSLATED) { $query->translated(); } if ($this->status == static::STATUS_NOT_TRANSLATED) { $query->notTranslated(); } $query->andFilterWhere(['like', 'category', $this->category])->andFilterWhere(['like', 'message', $this->message]); return $dataProvider; }
/** * @return array|SourceMessage[] */ public static function getCategories() { return SourceMessage::find()->select('category')->distinct('category')->asArray()->all(); }