<?php
// vim:filetype=php expandtab tabstop=2 softtabstop=2 shiftwidth=2 autoindent smartindent
// $Id$
function tribune_googletranslate_info() {
return t('Translates messages.');
}
function tribune_googletranslate_filter(&$post) {
'info' => 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)) {
$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) {
'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'];
$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'];
}
}
function tribune_googletranslate_help() {
$help = 'Type "/'. t('translate') .' <em>from</em> <em>to</em> <em>text</em>" to translate <em>text</em>.';
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);
$result = json_decode($result);
if ($result->responseStatus == 200) {
return array('error' => FALSE, 'text' => html_entity_decode($result->responseData->translatedText, ENT_QUOTES
, 'UTF-8'));
} else {
}
} else {
// let's try to parse it by hand anyway
if (preg_match('/"translatedText" *: *"([^"]*)"/', $result, $matches)) {
} else if (preg_match('/"responseDetails" *: *"([^"]*)"/', $result, $matches)) {
} else {
return array('error' => t
("Could not parse Google response (server is lacking <tt>json_decode</tt>)"));
}
}
}
function tribune_googletranslate_settings() {
$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["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) .")";
}
}