发布时间:2025-12-11 03:24:19 浏览次数:6
思路分析
和上一篇查询天气的思路差不多,首先要对用户发送过来的消息进行判断,判断消息里是否含有“翻译”关键字,如果含有,则提取待翻译内容,然后调用网络上开放的翻译API 进行相关翻译。
翻译API 分析
网络上有很多翻译API,大家可以根据自己的需求进行选择。这里我们选择应用比较广泛的,翻译功能还比较不错的有道翻译API 和百度翻译API,下面对这两种API的相关信息进行分析。
3.1 有道翻译API
3.1.1 API 地址:fanyi.youdao.com/openapi
注意:有道提供的API 接口,在下面的测试时,json 数据格式返回不正确,到网上查阅资料,可以正确翻译的地址为 fanyi.youdao.com/fanyiapi,这点注意。
3.1.2 申请key
按照要求填写相关信息,这些信息,下面会使用到,所以请认真如实填写。
申请完之后,会在下方生成API key 和keyfrom,使用API 时会用到。
3.1.3 API 使用范例
3.1.4 数据格式
a. xml 格式
fanyi.youdao.com/openapi.do?keyfrom=orchid&key=1008797533&type=data&doctype=xml&version=1.1&q=这里是有道翻译API
<?xmlversion="1.0"encoding="UTF-8"?><youdao-fanyi><errorCode>0</errorCode><!--有道翻译--><query><![CDATA[这里是有道翻译API]]></query><translation><paragraph><![CDATA[HereistheyoudaotranslationAPI]]></paragraph></translation></youdao-fanyi>
b. json 格式
http://fanyi.youdao.com/openapi.do?keyfrom=orchid&key=1008797533&type=data&doctype=json&version=1.1&q=翻译
{"errorCode":0"query":"翻译","translation":["translation"],//有道翻译"basic":{//有道词典-基本词典"phonetic":"fānyì","explains":["translate","interpret"]},"web":[//有道词典-网络释义{"key":"翻译","value":["translator","translation","translate","Interpreter"]},{...}]}3.2 百度翻译API
3.2.1 API 地址:openapi.baidu.com/public/2.0/bmt/translate
3.2.2 获取api key
开发者在百度连接平台上注册得到的授权API key,详细请参阅:http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E7%BD%91%E7%AB%99%E6%8E%A5%E5%85%A5/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97
3.2.3 API 使用范例
3.2.4 数据格式
百度翻译API 响应的数据格式为UTF-8编码的PHP数组对应的标准JSON字符串。
{“from”:”zh”,“to”:”en”,“trans_result”:[]}trans_result 为一个数组,其中每一个{}就是一个段落,结构如下所示:
trans_result:[{},{},{}]段落结果即为trans_result 数组中的一项:
{“src”:””,“dst”:””}段落结果说明:
经json_decode 后的形式:
{"from":"en","to":"zh","trans_result":[{"src":"today","dst":"今天"}]}四、关键字判断与待翻译内容读取
翻译消息的格式是 “翻译+待翻译内容”,所以首先截取前两个字,判断是否为 “翻译” 关键字。
使用php函数 mb_substr() 截取,关于该函数的用法上一篇已经讲过,这里不再赘述。
$str_trans = mb_substr($keyword,0,2,"UTF-8");
从消息的开头开始截取,截取两个字符,然后加以判断是否为 “翻译” 关键字。
$str_valid = mb_substr($keyword,0,-2,"UTF-8");
判断是否只输入“翻译”两字,这样输入,没有待翻译内容,则输入的消息也不正确。
接下来进行待翻译内容提取:
$word = mb_substr($keyword,2,220,"UTF-8");
从消息的开头第3个字符开始截取,截取202个字符,截取出来的即为待翻译内容。
接着调用函数进行翻译。
//调用有道词典$contentStr=$this->youdaoDic($word);//调用百度词典$contentStr=$this->baiduDic($word);
五、具体实现
5.1 有道翻译API
数据接口:
http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本
将上面的keyfrom 和key换成上面申请的内容,然后选择doctype,再输入要翻译的文本,就可以调用有道翻译API 进行翻译了。
有道翻译提供了三种数据格式,这里我们只讲解两种,即xml 和json。
5.1.1 xml 格式
关键代码如下:
youdaoDic(="orchid";="YourApiKey";='http://fanyi.youdao.com/fanyiapi.do?keyfrom='..'&key='..'&type=data&doctype=xml&version=1.1&q='.=(=->=->translation->(==0"无法进行有效的翻译"
说明:
$xmlStyle = simplexml_load_file($url_youdao); // PHP 函数,将XML 文档载入对象中。
$errorCode = $xmlStyle->errorCode; // 获取错误码
$paras = $xmlStyle->translation->paragraph; // 获取翻译内容
5.1.2 json 格式
关键代码如下:
publicfunctionyoudaoDic($word){$keyfrom="orchid";//申请APIKEY时所填表的网站名称的内容$apikey="YourApiKey";//从有道申请的APIKEY//有道翻译-json格式$url_youdao='http://fanyi.youdao.com/fanyiapi.do?keyfrom='.$keyfrom.'&key='.$apikey.'&type=data&doctype=json&version=1.1&q='.$word;$jsonStyle=file_get_contents($url_youdao);$result=json_decode($jsonStyle,true);$errorCode=$result['errorCode'];$trans='';if(isset($errorCode)){switch($errorCode){case0:$trans=$result['translation']['0'];break;case20:$trans='要翻译的文本过长';break;case30:$trans='无法进行有效的翻译';break;case40:$trans='不支持的语言类型';break;case50:$trans='无效的key';break;default:$trans='出现异常';break;}}return$trans;}说明:
$jsonStyle=file_get_contents($url_youdao); //把整个文件读入一个字符串中$result=json_decode($jsonStyle,true); //对JSON格式的字符串进行编码$errorCode=$result['errorCode']; //获取错误码$trans=$result['translation']['0']; //获取翻译结果
5.2 百度翻译API
百度翻译API提供UTF-8编码的PHP数组对应的标准JSON字符串,而且提供了 中->英,中->日,英->中,日->中 四种互译,比有道翻译多了一种。
关键代码如下:
//百度翻译publicfunctionbaiduDic($word,$from="auto",$to="auto"){//首先对要翻译的文字进行urlencode处理$word_code=urlencode($word);//注册的APIKey$appid="YourApiKey";//生成翻译API的URLGET地址$baidu_url="http://openapi.baidu.com/public/2.0/bmt/translate?client_id=".$appid."&q=".$word_code."&from=".$from."&to=".$to;$text=json_decode($this->language_text($baidu_url));$text=$text->trans_result;return$text[0]->dst;}//百度翻译-获取目标URL所打印的内容publicfunctionlanguage_text($url){if(!function_exists('file_get_contents')){$file_contents=file_get_contents($url);}else{//初始化一个cURL对象$ch=curl_init();$timeout=5;//设置需要抓取的URLcurl_setopt($ch,CURLOPT_URL,$url);//设置cURL参数,要求结果保存到字符串中还是输出到屏幕上curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//在发起连接前等待的时间,如果设置为0,则无限等待curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);//运行cURL,请求网页$file_contents=curl_exec($ch);//关闭URL请求curl_close($ch);}return$file_contents;}说明:
这里包含了两个函数,baiduDic() 和 language_text()。
baiduDic() 函数:
$word_code=urlencode($word); //首先对要翻译的文字进行urlencode处理$text=json_decode($this->language_text($baidu_url)); //调用language_text()函数获取目标URL所打印的内容,然后对JSON格式的字符串进行编码$text=$text->trans_result; //获取翻译结果数组return$text[0]->dst; //取第一个数组的dst结果。
language_text() 函数:
判断file_get_contents() 函数是否存在,如果存在,则使用该函数获取URL内容;如果不存在,则使用cURL 工具获取URL内容。具体参见代码。
六、测试
有道翻译-xml 格式:
有道翻译-json 格式:
百度翻译:
感谢各位的阅读!关于“微信开发之如何实现翻译功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!