使用Google API进行翻译 支持大数据量的文字翻译

来源:互联网 发布:网络拓扑的分层结构 编辑:程序博客网 时间:2024/05/21 22:42

今天同事要写程序翻译点东西,找到了一个封装了的class,但是有些内容翻译出来不对。仔细看了下,主要是大数据量的和一些带html代码的数据,遂对代码做了细微的更改,并把api的参数等等的说明都收集放在了文件末尾,方便查看。

<?php
/**
* @author bombworm@gmail.com
* @联系方式 QQ 79194034
* @link http://www.codingall.com
* @version 1.0
* @license remain this copyright when using
* @abstract Translate a large piece of text with the Google Translate API
* @tutorial http://code.google.com/intl/en/apis/ajaxlanguage/documentation/reference.html
* @example
* Google_Translate_API::translate('write codes, go " http://www.codingall.com "', 'en', 'zh-cn');
*/

/**
* Translating language with Google API
* @author gabe@fijiwebdesign.com
* @version $id$
* @license - Share-Alike 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)
*
* Google requires attribution for their Language API, please see: http://code.google.com/apis/ajaxlanguage/documentation/#Branding
*
*/
class Google_Translate_API {

/**
* Translate a piece of text with the Google Translate API
* @return String
* @param $text String
* @param $from String[optional] Original language of $text. An empty String will let google decide the language of origin
* @param $to String[optional] Language to translate $text to
*/
static function translate($text, $from = 'zh-cn', $to = 'en') {
   $url = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair='.rawurlencode($from.'|'.$to);
   $response = file_get_contents(
    $url,
    null,
    stream_context_create(
     array(
      'http'=>array(
      'method'=>"POST",
      'header'=>"Referer: http://".$_SERVER['HTTP_HOST']."//r/n",
      'content'=>'q=' . rawurlencode($text)
      )
     )
    )
   );
   if (preg_match("/{/"translatedText/":/"([^/"]+)/"/i", $response, $matches)) {
    return self::_unescapeUTF8EscapeSeq($matches[1]);
   }
   return false;
}

/**
* Convert UTF-8 Escape sequences in a string to UTF-8 Bytes
* @return UTF-8 String
* @param $str String
*/
function _unescapeUTF8EscapeSeq($str) {
   return preg_replace_callback("////u([0-9a-f]{4})/i", create_function('$matches', 'return html_entity_decode(/'&#x/'.$matches[1]./';/', ENT_NOQUOTES, /'UTF-8/');'), $str);
}
}

// example usage
$text = 'write codes, go "http://www.codingall.com"';
$trans_text = Google_Translate_API::translate($text, 'en', 'zh-cn');
if ($trans_text !== false) {
echo $trans_text;
}

/**
* language defined :
* var google.language.Languages = {
   'AFRIKAANS' : 'af',
   'ALBANIAN' : 'sq',
   'AMHARIC' : 'am',
   'ARABIC' : 'ar',
   'ARMENIAN' : 'hy',
   'AZERBAIJANI' : 'az',
   'BASQUE' : 'eu',
   'BELARUSIAN' : 'be',
   'BENGALI' : 'bn',
   'BIHARI' : 'bh',
   'BULGARIAN' : 'bg',
   'BURMESE' : 'my',
   'CATALAN' : 'ca',
   'CHEROKEE' : 'chr',
   'CHINESE' : 'zh',
   'CHINESE_SIMPLIFIED' : 'zh-CN',
   'CHINESE_TRADITIONAL' : 'zh-TW',
   'CROATIAN' : 'hr',
   'CZECH' : 'cs',
   'DANISH' : 'da',
   'DHIVEHI' : 'dv',
   'DUTCH': 'nl',  
   'ENGLISH' : 'en',
   'ESPERANTO' : 'eo',
   'ESTONIAN' : 'et',
   'FILIPINO' : 'tl',
   'FINNISH' : 'fi',
   'FRENCH' : 'fr',
   'GALICIAN' : 'gl',
   'GEORGIAN' : 'ka',
   'GERMAN' : 'de',
   'GREEK' : 'el',
   'GUARANI' : 'gn',
   'GUJARATI' : 'gu',
   'HEBREW' : 'iw',
   'HINDI' : 'hi',
   'HUNGARIAN' : 'hu',
   'ICELANDIC' : 'is',
   'INDONESIAN' : 'id',
   'INUKTITUT' : 'iu',
   'ITALIAN' : 'it',
   'JAPANESE' : 'ja',
   'KANNADA' : 'kn',
   'KAZAKH' : 'kk',
   'KHMER' : 'km',
   'KOREAN' : 'ko',
   'KURDISH': 'ku',
   'KYRGYZ': 'ky',
   'LAOTHIAN': 'lo',
   'LATVIAN' : 'lv',
   'LITHUANIAN' : 'lt',
   'MACEDONIAN' : 'mk',
   'MALAY' : 'ms',
   'MALAYALAM' : 'ml',
   'MALTESE' : 'mt',
   'MARATHI' : 'mr',
   'MONGOLIAN' : 'mn',
   'NEPALI' : 'ne',
   'NORWEGIAN' : 'no',
   'ORIYA' : 'or',
   'PASHTO' : 'ps',
   'PERSIAN' : 'fa',
   'POLISH' : 'pl',
   'PORTUGUESE' : 'pt-PT',
   'PUNJABI' : 'pa',
   'ROMANIAN' : 'ro',
   'RUSSIAN' : 'ru',
   'SANSKRIT' : 'sa',
   'SERBIAN' : 'sr',
   'SINDHI' : 'sd',
   'SINHALESE' : 'si',
   'SLOVAK' : 'sk',
   'SLOVENIAN' : 'sl',
   'SPANISH' : 'es',
   'SWAHILI' : 'sw',
   'SWEDISH' : 'sv',
   'TAJIK' : 'tg',
   'TAMIL' : 'ta',
   'TAGALOG' : 'tl',
   'TELUGU' : 'te',
   'THAI' : 'th',
   'TIBETAN' : 'bo',
   'TURKISH' : 'tr',
   'UKRAINIAN' : 'uk',
   'URDU' : 'ur',
   'UZBEK' : 'uz',
   'UIGHUR' : 'ug',
   'VIETNAMESE' : 'vi',
   'UNKNOWN' : ''
};

Content Type :
var google.language.ContentType = {
   'TEXT' : 'text',
   'HTML' : 'html'
};

******参数 实例 说明
q q=Hello%World 此参数可提供传递给该方法的查询字词。对于 translate 方法,此参
数会提供要翻译的文本。对于 detect 方法,值是要检测其语言的文本。
v v=1.0 此参数可提供协议版本号。目前唯一有效的值为 1.0
hl hl=fr 此可选参数提供了提出请求的应用程序的宿主语言。如果未提供此参数,系统
将根据 Accept-Language http 标头的值选择一个值。如果此标头不存在,将假定值为 en。
key key=your-key 此可选参数提供了应用程序的密钥。如果指定了此参数,则此密钥
必须是与您的网站(已通过传递的参考标头进行确认)关联的有效密钥。提供密钥的优点在于,
我们可以在您的应用程序出错时识别并联系您。如果没有密钥,我们仍会采取相同的适当措施,
但是我们将无法联系您。强烈建议您最好提供一个密钥。
*****************

****** 特定参数说明
langpair 此参数可提供可选的源语言以及所需的目标语言。语言对由适当转义的 | 竖线
(转义为 %7C)分隔。要从英语翻译成意大利语,您需要指定 langpair=en%7Cit 的值。要使
用自动检测源功能,请中止该源语言,且仅指定竖线后面的目标语言,如下所示:
langpair=%7Cit。
format 此可选参数使您可以表示要翻译的文本是纯文本还是 HTML。值为 html 表示 html,
而值为 text 则表示纯文本。请注意,text 是默认的操作。
*****************
*
*/
?>

网站:可道网编程社区

原创粉丝点击