之所以把 wordpress 单独,因为 wordpress 的适用性太广,无论是个人博客, CMS 还是企业网站都很适用,而且多年积累下来的插件和模板非常可观。做网站的人一般都会想着把自己的网站国际化,但是苦于无法批量翻译,现在就简单记录下我使用百度翻译 api 给 wordpress 的文章自动翻译的插件思路。本人不是专业搞 php 的,所以很多代码都很低级,主要看思路,抛砖引玉。
首先,百度翻译的 api 是支持 post 的,这点非常好。因为 get 的方式是有大小限制的,可能无法翻译完整篇文章。
使用 post 就需要用到 php 的 curl 函数:
$post_value = array(
"from" => $baidufrom,
"to" => $baiduto,
"client_id" => " 你的百度 api 的 key",
"q" => $baidupost
);
// 提交表单
$baidutranslate = $this->curl_post("http://openapi.baidu.com/public/2.0/bmt/translate",$post_value);
其中 $post_value 是 post 的表单内容,主要有 4 项:源语言,目标语言,百度翻译 api 的 key ,翻译内容
百度翻译 api 的 key 申请可以看这篇文章: 申请百度翻译 api 教程
百度翻译返回的内容如下:
{ "from": "en", "to": "zh", "trans_result": [ { "src": "today", "dst": " 今天 " }, { "src": "tomorrow", "dst": " 明天 " } ] }
由于百度返回的是 json 格式,所以我们需要处理下。
// 百度返回的是 json 格式的,需要解析下 $baidujson=json_decode($baidutranslate); // 判断有没错误信息,如果有错误信息则返回错误内容,如果没有,则返回翻译内容 if(property_exists($baidujson, 'error_code')) { $baiduresult = $baidupost; $this->rlog($baidujson->error_code."--->".$baidujson->error_msg); } else { for ($i= 0;$i< count($baidujson->trans_result); $i++){ $baiduresult = $baiduresult.$baidujson->trans_result[$i]->dst."n"; } }
上面这个代码是如果返回的结果中包含 error_code 项,那么就写入日志,主要是方便查问题。在使用的时候可以注释掉。由于百度翻译返回的结果会同时带有源内容和翻译后的内容,因此我用数组把翻译后的内容返回,就不返回原内容了。
至于 php 如何处理 json 格式的详细内容,请查看 在 php 中使用 json 格式
这样我们就解决了 php 提交内容到百度翻译后返回的功能。包装成完整的函数如下:
private function baidu_translate($baidufrom,$baiduto,$baidupost){ $baiduresult = ""; // 传递的表单数组 $post_value = array( "from" => $baidufrom, "to" => $baiduto, "client_id" => "sdNwWQu0o9X3hIoyDXBmvjna", "q" => $baidupost ); // 提交表单 $baidutranslate = $this->curl_post("http://openapi.baidu.com/public/2.0/bmt/translate",$post_value); // 百度返回的是 json 格式的,需要解析下 $baidujson=json_decode($baidutranslate); // 判断有没错误信息,如果有错误信息则返回错误内容,如果没有,则返回翻译内容 if(property_exists($baidujson, 'error_code')) { $baiduresult = $baidupost; $this->rlog($baidujson->error_code."--->".$baidujson->error_msg); } else { for ($i= 0;$i< count($baidujson->trans_result); $i++){ $baiduresult = $baiduresult.$baidujson->trans_result[$i]->dst."n"; } } return $baiduresult; }
传入 3 个参数,源语言,目标语言,需要翻译的字符串。
百度使用的语言代码如下:
语种 | 代码 | 语种 | 代码 |
---|---|---|---|
中文 | zh | 英语 | en |
日语 | jp | 韩语 | kor |
西班牙语 | spa | 法语 | fra |
泰语 | th | 阿拉伯语 | ara |
俄罗斯语 | ru | 葡萄牙语 | pt |
粤语 | yue | 文言文 | wyw |
白话文 | zh | 自动检测 | auto |
德语 | de | 意大利语 | it |
荷兰语 | nl | 希腊语 | el |
因为和 google 使用的 iso-639-1 规范不一样,所以需要特别注意下。
上面函数的使用范例:
$s=baidu_translate("zh","en"," 你好 "); echo $s;
显示: hello