variable_get('tribune_googletranslate_name', "Translator"), ); if (variable_get('tribune_googletranslate_authentified', FALSE)) { $answer['login'] = $answer['info']; } if (preg_match(':^/'. t('translate') .'(.*)$:', $post['message'], $matches)) { $args = $matches[1]; if (preg_match(':\s([a-zA-Z-]+)\s([a-zA-Z-]+)\s(.*)$:', $args, $matches)) { $from = $matches[1]; $to = $matches[2]; $text = $matches[3]; if (preg_match("/((([01]?[0-9])|(2[0-3])):([0-5][0-9])(:([0-5][0-9]))?([:\^][0-9]|¹|²|³)?(@[0-9A-Za-z]+)?)/", $text, $matches)) { $answers = array(); $posts = tribune_get_posts_from_clock($matches[1]); if (count($posts) == 0) { $answer['message'] = t("Could not find referenced post: !clock", array('!clock' => $matches[1])); } else { foreach ($posts as $id) { $answer = array( 'info' => variable_get('tribune_googletranslate_name', "Translator"), ); if (variable_get('tribune_googletranslate_authentified', FALSE)) { $answer['login'] = $answer['info']; } $ref_post = tribune_get_post($id); $response = _tribune_googletranslate_translate_text($from, $to, $ref_post['message']); if ($response['error']) { $answer['message'] = t("Could not translate text: !text", array("!text" => $response['error'])); } else { $answer['message'] = $response['text']; if (count($posts) > 1) { $answer['message'] = format_clock($ref_post['clock'], $ref_post['post_rank']) ." ". $answer['message']; } } $answer['message'] = tribune_filters_print_clock($post) ." ". $answer['message']; $answers[] = $answer; } return $answers; } } else { $response = _tribune_googletranslate_translate_text($from, $to, $text); } if ($response['error']) { $answer['message'] = t("Could not translate text: !text", array("!text" => $response['error'])); } else { $answer['message'] = $response['text']; } } else { $answer['message'] = t("Bad syntax, syntax is: /translate from to text"); } $answer['message'] = tribune_filters_print_clock($post) ." ". $answer['message']; return array($answer); } } function tribune_googletranslate_help() { $user = array_shift(user_load_self(array())); $help = 'Type "/'. t('translate') .' from to text" to translate text.'; return $help; } function _tribune_googletranslate_translate_text($from, $to, $text) { $url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=". urlencode($text) ."&langpair=". urlencode($from) ."%7C". urlencode($to); if (variable_get("tribune_googletranslate_api_key", "")) { $url .= "&key=". urlencode(variable_get("tribune_googletranslate_api_key", "")); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_REFERER, url("tribune")); $result = curl_exec($ch); if (function_exists("json_decode")) { $result = json_decode($result); if ($result->responseStatus == 200) { return array('error' => FALSE, 'text' => html_entity_decode($result->responseData->translatedText, ENT_QUOTES, 'UTF-8')); } else { return array('error' => html_entity_decode($result->responseDetails, ENT_QUOTES, 'UTF-8')); } } else { // let's try to parse it by hand anyway $result = str_replace('\u0026', '&', $result); if (preg_match('/"translatedText" *: *"([^"]*)"/', $result, $matches)) { return array('error' => FALSE, 'text' => html_entity_decode($matches[1], ENT_QUOTES, 'UTF-8')); } else if (preg_match('/"responseDetails" *: *"([^"]*)"/', $result, $matches)) { return array('error' => html_entity_decode($matches[1], ENT_QUOTES, 'UTF-8')); } else { return array('error' => t("Could not parse Google response (server is lacking json_decode)")); } } } function tribune_googletranslate_settings() { $form = array(); $form['tribune_googletranslate_name'] = array( '#type' => "textfield", '#title' => t("Display name"), '#default_value' => variable_get('tribune_googletranslate_name', "Translator"), ); $form['tribune_googletranslate_authentified'] = array( '#type' => "checkbox", '#title' => t("Appear to be authentified"), '#default_value' => variable_get('tribune_googletranslate_authentified', FALSE), '#description' => t("Whether this filter will appear to be 'anonymous' or 'authentified'. Since the filter does not correspond to a real user, posting as authentified may result in 'nickname collisions'."), ); $form['tribune_googletranslate_api_key'] = array( '#type' => "textfield", '#title' => t("Google API key"), '#default_value' => variable_get('tribune_googletranslate_api_key', ""), '#description' => t("Your site's application key. Google prefers that you provide it, but it is not required."), ); return system_settings_form($form); } function tribune_googletranslate_get_available_languages() { $languages = array(); $languages["de"] = "German"; $languages["en"] = "English"; $languages["ar"] = "Arabic"; $languages["bg"] = "Bulgarian"; $languages["ca"] = "Catalan"; $languages["zh-CN"] = "Chinese (simplified)"; $languages["zh-TW"] = "Chinese (traditional)"; $languages["ko"] = "Korean"; $languages["hr"] = "Croatian"; $languages["da"] = "Danish"; $languages["es"] = "Spanish"; $languages["fi"] = "Finnish"; $languages["fr"] = "French"; $languages["el"] = "Greek"; $languages["iw"] = "Hebrew"; $languages["hi"] = "Hindi"; $languages["id"] = "Indonesian"; $languages["it"] = "Italian"; $languages["ja"] = "Japanese"; $languages["lv"] = "Latvian"; $languages["lt"] = "Lituanian"; $languages["nl"] = "Dutch"; $languages["no"] = "Norvegian"; $languages["pl"] = "Polish"; $languages["pt"] = "Portugese"; $languages["ro"] = "Romanian"; $languages["ru"] = "Russian"; $languages["sr"] = "Serbian"; $languages["sk"] = "Slovak"; $languages["sl"] = "Slovenian"; $languages["sv"] = "Swedish"; $languages["tl"] = "Filipino"; $languages["cs"] = "Czesh"; $languages["uk"] = "Ukrainian"; $languages["vi"] = "Vietnamese"; $strings[] = ""; foreach ($languages as $code => $name) { $strings[] = $code ." (". t($name) .")"; } return implode(", ", $strings); }