前置準備
- 至 百度開發者中心 註冊應用,獲取
API Key (client_id)
- 確認伺服器支援
curl 或 file_get_contents 開啟 allow_url_fopen
控制器實作
<?php
class FanyiAction extends Action {
public function _empty() {
header("HTTP/1.0 404 Not Found");
$this->display("Public:404");
}
public function index() {
$User = A("Index");
$User->head();
$User->right();
$User->footer();
$this->display();
}
public function fanyi() {
$value = $_POST['value'];
$from = "auto";
$to = "auto";
$value_code = urlencode($value);
$appid = "xxxxxxxx"; // 替換為你的 API Key
$languageurl = "https://openapi.baidu.com/public/2.0/bmt/translate"
. "?client_id=" . $appid
. "&q=" . $value_code
. "&from=" . $from
. "&to=" . $to;
$text = json_decode($this->language_text($languageurl));
$text = $text->trans_result;
$rs = $text[0]->dst;
$this->assign('value', $value);
$this->assign('rs', $rs);
$User = A("Index");
$User->head();
$User->right();
$User->footer();
$this->display('index');
}
// 通用 HTTP 請求方法(支援 curl 回退)
public function language_text($url) {
if (function_exists('file_get_contents')) {
return file_get_contents($url);
} else {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$file_contents = curl_exec($ch);
curl_close($ch);
return $file_contents;
}
}
}
?>
視圖模板
<div id="content">
<div style="padding:5px;">
<form action="__APP__/fanyi/" method="POST" name="fanyi">
<p>原文:</p>
<textarea name="value" id="yuanwen" rows="10" cols="80"
style="padding:5px;width:661px;height:217px;">{$value}</textarea>
<input type="submit" class="search-submit" value="翻 譯" style="text-align:center;">
<input type="reset" onclick="reset()" class="search-submit" value="清 空" style="text-align:center;">
</form>
<p>譯文:</p>
<textarea name="rs" id="yiwen" rows="10" cols="80"
style="padding:5px;width:661px;height:217px;">{$rs}</textarea>
</div>
</div>
注意事項
- 百度翻譯 API 2.0 版本已停止維護,建議遷移至 百度翻譯開放平台 新版 API(需簽名驗證)
- 生產環境請加入錯誤處理:API 額度耗盡、網路超時、回傳格式異常等
- 長文本建議分段翻譯,避免超過單次請求長度限制