生命不息
折腾不止

wordpress使用百度翻译api给文章自动翻译(一)

之所以把 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
赞(0)
未经允许不得转载:91云(91yun.co) » wordpress使用百度翻译api给文章自动翻译(一)

留言 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址