要做一个在线实时聊天系统,而且还要实时双语翻译(中、俄)。头疼
先找了一个php在线客服系统 带源码的。看懂源码后在上面加翻译功能,一共耗时4天弄出来的。
代码如下:
if(mb_detect_encoding($fdata,"UTF-8, GBK") != "UTF-8"){
//$fdata = mb_detect_encoding($fdata,"UTF-8, GBK")
$fdata = mb_convert_encoding($fdata,'utf-8','CP936');
}
if (preg_match("/[\x{4e00}-\x{9fa5}]./u",$fdata)) {
$ewen = baiduTran(urlencode($fdata));
$fdata .= "<br>";
$fdata .= $ewen;
} else {
$zhongwen = baiduTran(urlencode($fdata),'ru','zh');
$fdata .= "<br>";
$fdata .= $zhongwen;
}
$fdata = mb_convert_encoding($fdata,'gbk','utf-8');
下面是调用baiduTran()的函数:
function baiduTran($text,$from='zh',$to='ru'){
if(empty($text)) return "";
$wf=file_get_contents("http://openapi.baidu.com/public/2.0/bmt/translate? client_id=GTK5cWTRRSEDKt829jf4DdnL&q=$text&from=$from&to=$to");
if (false===$wf||empty($wf)){
return false;
}
$obj =json_decode($wf);
$obj=$obj->{'trans_result'};
$trans_result=$obj[0];
$dst=$trans_result->{'dst'};
return $dst;
}
详细解释:
//检测中文还是俄文的时候必须是utf-8字体,就需要转换字体
if(mb_detect_encoding($fdata,"UTF-8, GBK") != "UTF-8"){//先需要侦测字符编码是什么
//$fdata = mb_detect_encoding($fdata,"UTF-8, GBK") //通过这个发现:前台页面传到后台的字体是:CP93。经测试买家端输入的字符传到后台就是gbk,卖家端输入的字符传到后台是CP93 真神奇
$fdata = mb_convert_encoding($fdata,'utf-8','CP936');//需要把CP936字体转换成utf-8字体
}
//检测输入是中文还是俄文
if (preg_match("/[\x{4e00}-\x{9fa5}]./u",$fdata)) { //原理是判断字体是否含有中文(找这个表达式费老劲了)
$ewen = baiduTran(urlencode($fdata));//输入的是中文 翻译成俄文
$fdata .= "<br>"; //把原来的和翻译过的加在一起 中间加个回车
$fdata .= $ewen;
} else { //输入的是俄文 翻译成中文
$zhongwen = baiduTran(urlencode($fdata),'ru','zh'); //输入的是中文 翻译成俄文
$fdata .= "<br>";//把原来的和翻译过的加在一起 中间加个回车
$fdata .= $zhongwen;
}
//将转换后的字体再转换成gbk否则前台页面显示乱码
$fdata = mb_convert_encoding($fdata,'gbk','utf-8');
//百度翻译函数
function baiduTran($text,$from='zh',$to='ru'){ //默认是中文翻译成俄文
if(empty($text)) return "";
$wf=file_get_contents("http://openapi.baidu.com/public/2.0/bmt/translate? client_id=GTK5cWTRRSEDKt829jf4DdnL&q=$text&from=$from&to=$to");
//此处的client_id需要填入获取的appid,和百度地图api类似,在百度云开发者注册。
if (false===$wf||empty($wf)){
return false;
}
$obj =json_decode($wf);
$obj=$obj->{'trans_result'};
$trans_result=$obj[0];
$dst=$trans_result->{'dst'};
return $dst;
}