之所以把 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
91云(91yun.co)