网站后台 js框架,建筑工程网课代字幕,2344网页游戏大全,成都 网页设计 兼职关于火车头的百度翻译插件#xff0c;相信大家在火车头官网或网上都能找到相关代码#xff0c;百度翻译插件是PHP写的#xff0c;就一个PHP文件#xff0c;简单灵活#xff0c;不受火车头软件版本限制#xff0c;任何有PHP插件权限的火车头版本都可以使用。但是百度API翻…关于火车头的百度翻译插件相信大家在火车头官网或网上都能找到相关代码百度翻译插件是PHP写的就一个PHP文件简单灵活不受火车头软件版本限制任何有PHP插件权限的火车头版本都可以使用。但是百度API翻译有一个致命的缺陷就是不支持html代码翻译如果采集的字段包含html片段那翻译完全就错乱了没法正常使用下面给大家分享一个简易翻译html代码片段的方法。
?phpdefine(CURL_TIMEOUT, 30);
define(URL, http://api.fanyi.baidu.com/api/trans/vip/translate);
define(APP_ID, ); //替换为您的APPID
define(SEC_KEY, );//替换为您的密钥
define(FROM, en);//采集的源语言标识码默认为中文“zh”
define(TO, zh);//翻译后的目标语言标识码默认翻译为英文“en”function translate($query)
{$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);if (isset($ret[error_code])) {switch ($ret[error_code]) {case 52003:return 错误代码.$ret[error_code].APP_ID不正确,请检查您填写的APP_ID是否和百度翻译开放平台申请的一致。;break;case 54001:return 错误代码.$ret[error_code].密钥不正确,请检查您填写的密钥是否和百度翻译开放平台申请的一致。;break;case 54000:return 错误代码.$ret[error_code].翻译内容为空请检查您的采集规则是否正确出现本错误可能软件未采集到内容。;break;case 54004:return 错误代码.$ret[error_code].余额不足您的免费字符已用完或余额不足请登陆百度翻译开放平台充值。;break;case 58001:return 错误代码.$ret[error_code].译文语言方向错误请检查您设置的目标语言标识码是否正确。;break;default:return 错误代码.$ret[error_code].不可预知的错误https://tpl.sryun.net;break;}}return $ret[trans_result][0][dst];
}function buildSign($query, $appID, $salt, $secKey)
{$str $appID . $query . $salt . $secKey;$ret md5($str);return $ret;
}function call($url, $argsnull, $methodpost, $testflag 0, $timeout CURL_TIMEOUT, $headersarray())
{$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, $argsnull, $methodpost, $withCookie false, $timeout CURL_TIMEOUT, $headersarray())
{$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;
}// function translateHTML($html)
// {
// // 使用正则表达式保护HTML标签不被翻译
// $html preg_replace_callback(/[^]|[^]/, function($matches) {
// $segment $matches[0];
// if (preg_match(/[^]/, $segment)) {
// // 这是一个HTML标签直接返回
// return $segment;
// } else {
// // 这是文本内容进行翻译
// return translate($segment);
// }
// }, $html);// return $html;
// }//逐词逐句分割翻译-并不精准勉强刊用
// function translateHTML($html)
// {
// // 使用正则表达式保护HTML标签不被翻译
// $parts preg_split(/([^])/, $html, -1, PREG_SPLIT_DELIM_CAPTURE);
// $translatedHTML ;// foreach ($parts as $part) {
// if (preg_match(/[^]/, $part)) {
// // 这是一个HTML标签直接附加
// $translatedHTML . $part;
// } else {
// // 这是文本内容进行逐词或逐句翻译
// $translatedHTML . translateTextBySentence($part);
// }
// }// return $translatedHTML;
// }// function translateTextBySentence($text) {
// // 使用句号分割句子
// $sentences preg_split(/([.!?])/, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
// $translated ;
// foreach ($sentences as $sentence) {
// if (trim($sentence) ! ) {
// $translated . translate($sentence);
// }
// }
// return $translated;
// }//特定标签翻译
function translateContent($html)
{$pattern /(div classariticle-body)(.*?)(br\s*\/?)/is;$html preg_replace_callback($pattern, function ($matches) {$contentToTranslate strip_tags($matches[2]);$translatedContent translate($contentToTranslate);return $matches[1] . $translatedContent . $matches[3];}, $html);return $html;
}if($LabelArray[PageType]Save)
{/*** 下面的内容需要根据火车头的采集规则进行修改一行为一个需要翻译的标签。* 后面的为采集到的原始标签前面的为翻译后的标签。* 这里的标签名必须和采集规则里的标签名一致否则无法翻译。*/$LabelArray[翻译的标题] translate($query $LabelArray[标题]);$LabelArray[翻译的内容] translateContent($query $LabelArray[内容]);$LabelArray[翻译的描述] translate($query $LabelArray[描述]);
}
echo serialize($LabelArray);?代码的关键就在于translateContent函数因为我采集的数据字段都是英文需要翻译为中文字段包含在标签div classariticle-body和br/标签之间所以我只需要翻译这之间的文本就可以翻译完成之后并将翻译结果插入回原始HTML中。
我注释掉的translateHTML函数也可以整段的翻译内容字段只是效果并不是很完美因为百度翻译不支持大段文本翻译只能是逐句分割翻译所以就弃用了大家可以私下进行调试修改。
我不知道火车头是否能完美的支持php类和扩展我测试的是不支持可能是我不熟悉也没深入研究不然翻译效果可能会更好。有需要的朋友试试吧