2010年6月7日星期一

php 在线翻译程序,支持多国语言,基于Google翻译API开发(Google Translate API For PHP)

近日在开发一个新的项目,要将采集来的数据翻译成多国语言。这个项目将会被作为DEDE的一个扩展模块免费发布。敬请期待!
这里使用到了Google的AJAX Translate API(注:虽然Google没有提供PHP版本的API,但我们一样可以使用基于HTTP协 议的AjaxAPI)和Snoopy类。
如果要给项目命名的话,可以称为 Google Translate API For PHP

今日先放出这个PHPTranslate类,使用方法见以下Demo:
1$Google = new GoogleTranslate();
2$Google->translate('这是一个基于 Google在线翻译的工具');
3echo $Google->result;
以下列出本类的代码。
001
002/**
003 *
004 *@author 尘缘
005 *@copyright 2005-2009 admin@4wei.cn
006 *@version 1.0.0
007 *@example
008 $Google = new GoogleTranslate();
009 $Google->translate(' 这是一个基于Google在线翻译的工具');
010 echo $Google->result;
011 */
012class GoogleTranslate
013{
014 var $snoopy;
015 var $result;
016 var $dict;
017 var $trans;
018 var $text = '这是一个基于Google在线翻译的工具!';
019 var $from = 'zh-CN';
020 var $to = 'en';
022 
023 //php4构造函数
024 function GoogleTranslate($text, $from, $to)
025 {
026 $this->__construct($text, $from, $to);
027 }
028 
029 //php5构造函数
030 function __construct($text='', $from='', $to='')
031 {
032 $snoopy = 'Snoopy.class.php';
033 if (is_file($snoopy))
034 {
035 require_once $snoopy;
036 $this->snoopy = new Snoopy();
037 $this->snoopy->agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8';
038 $this->snoopy->accept= 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
039 $this->snoopy->referer = 'http://translate.google.cn/';
040 $this->snoopy->rawheaders['Accept-Language'] = 'zh-cn,zh;q=0.5';
041 }else{
042 echo "file '$snoopy' do not exists!";
043 exit;
044 }
045 
046 $text && $this->text = $text;
047 $from && $this->from = $from;
048 $to && $this->to = $to;
049 
050 $this->text && $this->translate($this->text, $this->from, $this->to);
051 
052 }
053 function setLang()
054 {
055 $Lang = array("中文(繁体)"=>"zh-TW", "中文(简体)"=>"zh-CN", "阿尔巴尼亚语"=>"sq", "阿拉伯语"=>"ar", "爱尔兰语"=>"ga", "爱沙尼亚语"=>"et", "白俄罗斯语"=>"be", "保加利亚语"=>"bg", "冰岛语"=>"is", "波兰语"=>"pl", "波斯语"=>"fa", "布尔文(南非荷兰语)"=>"af", "丹麦语"=>"da", "德语"=>"de", "俄语"=>"ru", "法语"=>"fr", "菲律宾语"=>"tl", "芬兰语"=>"fi", "海地克里奥尔语 ALPHA"=>"ht", "韩语"=>"ko", "荷兰语"=>"nl", "加利西亚语"=>"gl", "加泰罗尼亚语"=>"ca", "捷克语"=>"cs", "克罗地亚语"=>"hr", "拉脱维亚语"=>"lv", "立陶宛语"=>"lt", "罗马尼亚语"=>"ro", "马耳他语"=>"mt", "马来语"=>"ms", "马其顿语"=>"mk", "挪威语"=>"no", "葡萄牙语"=>"pt", "日语"=>"ja", "瑞典语"=>"sv", "塞尔维亚语"=>"sr", "斯洛伐克语"=>"sk", "斯洛文尼亚语"=>"sl", "斯瓦希里语"=>"sw", "泰语"=>"th", "土耳其语"=>"tr", "威尔士语"=>"cy", "乌克兰语"=>"uk", "西班牙语"=>"es", "希伯来语"=>"iw", "希腊语"=>"el", "匈牙利语"=>"hu", "意大利语"=>"it", "意第绪语"=>"yi", "印地语"=>"hi", "印尼语"=>"id", "英语"=>"en", "越南语"=>"vi");
056 if(!in_array($this->from, $Lang))
057 {
058 echo '尚不支持您要翻译的语种!';
059 exit();
060 }elseif(!in_array($this->to, $Lang))
061 {
062 echo '尚不支持您要翻译的目标语种!';
063 exit();
064 }
065 }
066 function translate($text='', $from='', $to='')
067 {
068 $text && $this->text = $text;
069 $from && $this->from = $from;
070 $to && $this->to = $to;
071 
072 $this->setLang();
073 
074 $vars['client'] = 't';
075 $vars['hl'] = 'zh-CN';
076 $vars['otf'] = '2';
077 $vars['pc'] = '0';
078 $vars['sl'] = $this->from;
079 $vars['tl'] = $this->to;
080 $vars['text'] = $text;
081 
082 if(!$this->text)
083 {
084 $this->result = NULL;
085 return NULL;
086 }
087 $this->snoopy->submit($this->GoogleURL, $vars);
088 $this->json = $this->snoopy->results;
089 $this->setResult();
090 }
091 
092 function setResult()
093 {
094 $result = json_decode($this->json);
095 $this->result = $this->trans = NULL;
096 if(@is_object($result->dict[0]))
097 {
098 $this->dict = $result->dict[0];
099 }
100 if(@is_object($result->sentences[0]))
101 {
102 $this->result = $this->trans = $result->sentences[0]->trans;
103 }else return $this->result = $this->trans;
104 }
105 
106}
107 
108$Google = new GoogleTranslate();
109$Google->translate('这是一个基于 Google在线翻译的工具');
110echo $Google->result;
111

没有评论:

发表评论