百度免费翻译接口

程序需要的翻译工具,要自动分割单词,如:  SourceCodeExtension  或  Event_Subscriber_Interface,为此,只能自己写代码分割一下,然后调用翻译接口.

先看效果吧.

然后集成到我的工具包里的效果

自己去注册,然后开通通用翻译接口,下载个 demo,就能使用了.

<?php

define("CURL_TIMEOUT", 10);
define("URL", "http://api.fanyi.baidu.com/api/trans/vip/translate");
define("APP_ID", "20212"); //APPID
define("SEC_KEY", "LKYGG");//密钥


print_r(translate(Data::string('__Event_SubscriberInterface__')->toWord(), 'en', 'zh'));


class Data {

    protected static $string = '';

    public static function string($string){

        self::$string = $string;
        return new static();

    }


    public function toWord(string $delimiter=' ') :string {
$string = self::$string;
        if(strpos($string, '_')  !== false ){
            $string = str_replace('_', ' ', $string);
        }

        return strtolower(trim(preg_replace(['/([A-Z])/', '/s+/'], [' ${1}', $delimiter], $string)));

    }
}

//翻译入口
function translate($query, $from, $to) {

    $args = array(
        'q' => $query,
        'appid' => APP_ID,
        'salt' => rand(10000, 99999),
        'from' => $from,
        'to' => $to,
    );
    $args['sign'] = buildSign($query, APP_ID, $args['salt'], SEC_KEY);
    $ret = call(URL, $args);
    $ret = json_decode($ret, true);
    return $ret;
}

//加密
function buildSign($query, $appID, $salt, $secKey) {

    $str = $appID . $query . $salt . $secKey;
    $ret = md5($str);
    return $ret;
}

//发起网络请求
function call($url, $args = null, $method = "post", $testflag = 0, $timeout = CURL_TIMEOUT, $headers = array()) {

    $ret = false;
    $i = 0;
    while($ret === false){
        if($i > 1)
            break;
        if($i > 0){
            sleep(1);
        }
        $ret = callOnce($url, $args, $method, false, $timeout, $headers);
        $i++;
    }
    return $ret;
}

function callOnce($url, $args = null, $method = "post", $withCookie = false, $timeout = CURL_TIMEOUT, $headers = array()) {

    $ch = curl_init();
    if($method == "post"){
        $data = convert($args);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_POST, 1);
    }else{
        $data = convert($args);
        if($data){
            if(stripos($url, "?") > 0){
                $url .= "&$data";
            }else{
                $url .= "?$data";
            }
        }
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if(!empty($headers)){
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    if($withCookie){
        curl_setopt($ch, CURLOPT_COOKIEJAR, $_COOKIE);
    }
    $r = curl_exec($ch);
    curl_close($ch);
    return $r;
}

function convert(&$args) {

    $data = '';
    if(is_array($args)){
        foreach($args as $key => $val){
            if(is_array($val)){
                foreach($val as $k => $v){
                    $data .= $key . '[' . $k . ']=' . rawurlencode($v) . '&';
                }
            }else{
                $data .= "$key=" . rawurlencode($val) . "&";
            }
        }
        return trim($data, "&");
    }
    return $args;
}
原文地址:https://www.cnblogs.com/zbseoag/p/14338767.html