/** * The method that is called by Alfred * * @param string $request User input string */ function googleTranslate($request, $languages = false) { if ($languages) { list($sourceLanguage, $targetLanguage) = $languages; $phrase = $request; } else { list($phrase, $sourceLanguage, $targetLanguage) = parseRequest($request); } $url = 'http://translate.google.com/translate_a/t?client=p&text=' . urlencode($phrase) . '&hl=en-EN&sl=' . $sourceLanguage . '&tl=' . $targetLanguage . '&multires=1&ssel=0&tsel=0&sc=1&ie=UTF-8&oe=UTF-8'; $userUrl = 'https://translate.google.com/#' . $sourceLanguage . '/' . $targetLanguage . '/' . urlencode($phrase); $defaults = array(CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => $url, CURLOPT_FRESH_CONNECT => true); $ch = curl_init(); curl_setopt_array($ch, $defaults); $out = curl_exec($ch); curl_close($ch); $xml = new AlfredResult(); $xml->setShared('uid', 'mtranslate'); $iconFilename = 'Icons/' . $targetLanguage . '.png'; if (!file_exists($iconFilename)) { $iconFilename = 'icon.png'; } $xml->setShared('icon', $iconFilename); //$stderr = fopen('php://stderr', 'w'); //fwrite($stderr, $out); //fclose($stderr); $json = json_decode($out); $sourceLanguage = $json->src; if (isset($json->dict)) { $googleResults = $json->dict[0]->entry; if (is_array($googleResults)) { foreach ($googleResults as $translatedData) { $xml->addItem(array('arg' => $userUrl . '|' . $translatedData->word, 'valid' => 'yes', 'title' => $translatedData->word . ' (' . languageMap($targetLanguage) . ')', 'subtitle' => implode(', ', $translatedData->reverse_translation) . ' (' . languageMap($sourceLanguage) . ')')); } } } elseif (isset($json->sentences)) { foreach ($json->sentences as $sentence) { $xml->addItem(array('arg' => $userUrl . '|' . $sentence->trans, 'valid' => 'yes', 'title' => $sentence->trans . ' (' . languageMap($targetLanguage) . ')', 'subtitle' => $sentence->orig . ' (' . languageMap($sourceLanguage) . ')')); } } else { $xml->addItem(array('title' => 'No results found')); } // var_dump($xml); echo $xml; }
protected function set($setting, $value) { $xml = new AlfredResult(); $xml->setShared('uid', 'setting'); $setLength = strlen($setting); $validOptionKeys = array_keys($this->validOptions); if (!in_array($setting, $validOptionKeys)) { // find valid options $valid = array_filter($validOptionKeys, function ($value) use($setting, $setLength) { return $setting == strtolower(substr($value, 0, $setLength)); }); if (count($valid) > 0) { foreach ($valid as $optionKey) { $xml->addItem(array('title' => $this->validOptions[$optionKey], 'subtitle' => $optionKey, 'autocomplete' => $optionKey)); } } else { $xml->addItem(array('title' => 'Unknown option ' . $value)); } } else { $item = array('title' => $setting); if (empty($value)) { $item['subtitle'] = 'Current value = ' . $this->settings[$setting]; } else { $trimmedValue = strtolower(trim($value)); if ($trimmedValue == 'default') { $trimmedValue = $this->defaultSettings[$setting]; } if ($this->languages->isAvailable($trimmedValue)) { $item['subtitle'] = 'New value = ' . $trimmedValue; $item['arg'] = $setting . ':' . $trimmedValue; } else { $requestedLanguages = explode(',', $trimmedValue); $validLanguages = array(); foreach ($requestedLanguages as $languageKey) { $trimmedKey = trim($languageKey); if ($this->languages->isAvailable($trimmedKey)) { $validLanguages[$trimmedKey] = $this->languages->map($trimmedKey); } } if (count($validLanguages) > 0) { $checkedValue = implode(',', array_keys($validLanguages)); $item['subtitle'] = 'New value = ' . implode(', ', $validLanguages) . ' (' . $checkedValue . ')'; $item['arg'] = $setting . ':' . $checkedValue; } else { $item['subtitle'] = 'Invalid value ' . $value; } } } $xml->addItem($item); } return $xml; }
protected function processGoogleResults(array $googleResults) { $xml = new AlfredResult(); $xml->setShared('uid', 'mtranslate'); foreach ($googleResults as $targetLanguage => $result) { $sourceLanguage = $result->src; if (isset($result->dict)) { $dictResults = $result->dict[0]->entry; if (is_array($dictResults)) { foreach ($dictResults as $translatedData) { $xml->addItem(array('arg' => $this->getUserURL($sourceLanguage, $targetLanguage, $translatedData->reverse_translation[0]) . '|' . $translatedData->word, 'valid' => 'yes', 'title' => $translatedData->word . ' (' . $this->languages->map($targetLanguage) . ')', 'subtitle' => implode(', ', $translatedData->reverse_translation) . ' (' . $this->languages->map($sourceLanguage) . ')', 'icon' => $this->getFlag($targetLanguage))); // // If more than one target language is set, break after the first entry if (count($googleResults) > 1) { break; } } } } elseif (isset($result->sentences)) { foreach ($result->sentences as $sentence) { $xml->addItem(array('arg' => $this->getUserURL($sourceLanguage, $targetLanguage, $sentence->orig) . '|' . $sentence->trans, 'valid' => 'yes', 'title' => $sentence->trans . ' (' . $this->languages->map($targetLanguage) . ')', 'subtitle' => $sentence->orig . ' (' . $this->languages->map($sourceLanguage) . ')', 'icon' => $this->getFlag($targetLanguage))); } } else { $xml->addItem(array('title' => 'No results found')); } } return $xml; }