public function translate(Request $request) { // валидация $paramsToValidate = array('phrase' => Input::get('phrase')); $validatorRules = array('phrase' => ['required']); $validator = Validator::make($paramsToValidate, $validatorRules); if ($validator->fails()) { return $this->response->validatorError($validator->messages()); } // лог Stat::log('translation query'); // форматируем фразу для дальнейшей работы $phraseFormatted = urldecode($request->phrase); $phraseFormatted = strtolower($phraseFormatted); // поиск в базе только в том случае, если длина фразы < @idiomMaxWordLength слов // в @idiomMaxWordLength слов может вписаться идиома $phraseWordsCount = count(explode(' ', $phraseFormatted)); if ($phraseWordsCount < $this->idiomMaxWordLength) { $translation = Phrase::findByPhrase($phraseFormatted); if ($translation) { return $this->response->onSuccess(array('translation' => $translation->translate, 'meaning' => $translation->meaning)); } } // если перевод не найден, ищем в гугле, и если гугл не находит перевод то выйдем $googleTranslation = GoogleApi::translate($phraseFormatted, 'enru'); if (!$googleTranslation) { return $this->response->onError('no translation for:' . $request->phrase); } // поиск описания слова в vocabulary.com $translationVoc = false; if ($phraseWordsCount < $this->idiomMaxWordLength) { $translationVoc = VocabularyApi::translation($phraseFormatted); } // перед тем как вернуть результат, внесем его в базу $phraseMeaning = ''; if ($translationVoc) { $phraseMeaning = "<p class=\"short\"> {$translationVoc['short']} </p><p class=\"long\"> {$translationVoc['long']} </p>"; } $newPhrase = Phrase::create(array('phrase' => $phraseFormatted, 'translate' => $googleTranslation, 'meaning' => $phraseMeaning)); // вернем результат return $this->response->onSuccess(array('translation' => $newPhrase->translate, 'meaning' => $newPhrase->meaning)); }