当前位置: 首页 > news >正文

基于百度翻译API的火车头PHP翻译插件,可以翻译HTML片段

关于火车头的百度翻译插件,相信大家在火车头官网或网上都能找到相关代码,百度翻译插件是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, $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;
}// 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 class="ariticle-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 class="ariticle-body"><br/>标签之间,所以我只需要翻译这之间的文本就可以,翻译完成之后,并将翻译结果插入回原始HTML中。

我注释掉的translateHTML函数,也可以整段的翻译内容字段,只是效果并不是很完美,因为百度翻译不支持大段文本翻译,只能是逐句分割翻译,所以就弃用了,大家可以私下进行调试修改。

我不知道火车头是否能完美的支持php类和扩展,我测试的是不支持,可能是我不熟悉,也没深入研究,不然翻译效果可能会更好。有需要的朋友试试吧!

相关文章:

基于百度翻译API的火车头PHP翻译插件,可以翻译HTML片段

关于火车头的百度翻译插件&#xff0c;相信大家在火车头官网或网上都能找到相关代码&#xff0c;百度翻译插件是PHP写的&#xff0c;就一个PHP文件&#xff0c;简单灵活&#xff0c;不受火车头软件版本限制&#xff0c;任何有PHP插件权限的火车头版本都可以使用。但是百度API翻…...

mysql高级用法常用函数

mysql高级用法 1、自定义排序 select * from movies order by field(actors, 成龙, 靳东, 刘亦菲, 范冰冰); // 字段中存在null值 select * from movies order by field (coalesce(actors,null),成龙, 靳东, 刘亦菲, 范冰冰,null)2、空值NULL排序&#xff08;ORDER BY IF(ISN…...

【打印100个常用Linux命令】

#!/bin/bash 定义一个函数&#xff0c;用于打印100个常用Linux命令 print_commands() { echo “以下是一些常用的Linux命令&#xff1a;” echo “----------------------------------” echo “1. pwd - 显示当前工作目录” echo “2. ls - 列出当前目录下的文件和文件夹” …...

友情提示:lazarus的tsortgrid.autofillcolumns存在BUG

直接在tsortgrid的属性中设置autofillcolumns为true&#xff0c;会提示&#xff1a;123个错误。即使修改为false&#xff0c;编译运行照样会出现上述错误。唯一解决的办法就是删除sortgrid重新添加一个。 代码设置SortGrid1.AutoFillColumns : TRUE不受影响。...

github的个人readme文件

一个好的svg图: Simon-He95/profile-3d-contrib/profile-season-animate.svg at 4281d9f46e3d5416bd8f8cc5779157bfdaa8589d Simon-He95/Simon-He95 GitHub 请访问他的主页从提交记录就可以看到这个立体的登录github的图...

java面试题: HashMap、HashSet 和 HashTable 的区别

HashMap 常用方法 HashMap 是一个基于哈希表的 Map 接口的实现。它允许使用 null 值和 null 键。 java 复制 // 创建一个HashMap HashMap<KeyType, ValueType> map new HashMap<>(); // 添加元素 map.put(key, value); // 获取元素 ValueType value map.get…...

CPP初级:模板的运用!

目录 一.泛型编程 二.函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 三.函数模板的实例化 1.隐式实例化 2.显式实例化 3.模板参数的匹配原则 四.类模板 1.类模板的定义格式 2.类模板的实例化 一.泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码…...

排序---基数排序

前言 个人小记 一、简介 基数排序是一种非比较排序&#xff0c;所以排序速度较快&#xff0c;当为32位int整数排序时&#xff0c;可以将数分为个位十位分别为2^16,使得拷贝只需要两轮&#xff0c;从而达到2*n&#xff0c;然后给一个偏移量&#xff0c;使得可以对负数排序。以…...

“新高考”下分班怎么分?

来自安徽的张女士告诉我&#xff1a;上一年孩子升入了高中&#xff0c;但没想到才高一&#xff0c;孩子就面临了一个困难的挑选&#xff1a;312”分班&#xff01; 什么是312”分班呢&#xff1f;许多人或许不明白&#xff0c;便是要求学生在高一入学时&#xff0c;针对于3门必…...

二叉树的层序遍历-力扣

本题是二叉树的层序遍历&#xff0c;通过一个队列来控制遍历的节点&#xff0c;二叉树每层的节点和上一层入队的节点个数是相同的&#xff0c;根据这一点编写循环条件。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …...

N32G45XVL-STB之移植LVGL(lvgl-8.2.0)

目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 ST7796-LCD 1.3 MCU IO与LCD PIN对应关系 2 认识LVGL 2.1 LVGL官网 2.2 LVGL库文件下载 3 移植LVGL 3.1 准备移植文件 3.2 添加lvgl库文件到项目 3.2.1 src下的文件 3.2.2 examples下的文件 3.2.3 配置文件路径 3.2…...

【设计模式】创建型设计模式之 原型模式

介绍 原型模式是一种创建型设计模式&#xff0c;主要用于创建重复的对象&#xff0c;而无需重新初始化它们&#xff0c;从而提高效率并简化对象的创建过程。此模式的核心思想是利用已存在的对象实例&#xff0c;通过复制&#xff08;克隆&#xff09;的方式来生成新的对象&…...

【类型商店】字符字符串(下)

啊&#xff0c;哈喽&#xff0c;小伙伴们大家好。我是#Y清墨&#xff0c;今天呐&#xff0c;我要介绍的是字符与字符串。 导语 前两期&#xff0c;我们已经懂得了概念&#xff0c;今天来看些函数。 正题 一.增加或连接 &#xff08;1) 后面增加() string s1,s2; //定义 s…...

『 Linux 』内存管理与文件系统

文章目录 交换分区页与页框(页帧)交换分区与内存之间的交换操作系统如何管理内存物理地址转换页号与页内偏移量 内存管理,文件系统与文件管理之间的联系 交换分区 在Linux的安装过程中,用户将会被提示创建一个交换分区; 这是一个特殊的分区,其大小可以由用户根据系统内存需求和…...

线性代数|机器学习-P8矩阵低秩近似eckart-young

文章目录 1. SVD奇异值分解2. Eckart-Young2.1 范数 3. Q A Q U Σ V T QAQU\Sigma V^T QAQUΣVT4. 主成分分析图像表示 1. SVD奇异值分解 我们知道&#xff0c;对于任意矩阵A来说&#xff0c;我们可以将其通过SVD奇异值分解得到 A U Σ V T AU\Sigma V^T AUΣVT&#xff0…...

平面设计神器CorelDRAW2021精简版,你值得拥有!

亲爱的设计师小伙伴们&#xff0c;今天我要为大家种草一款神奇的软件——CorelDRAW平面设计软件2021精简版&#xff01;&#x1f929;✨作为一名专业的图形设计师&#xff0c;我深知一个好工具对于我们的工作有多么重要。而这款软件简直就是我们设计师的救星&#xff01;&#…...

kafka是什么?

Kafka是一个由Apache软件基金会开发的开源流处理平台&#xff0c;最初由LinkedIn公司开发&#xff0c;使用Scala和Java编写。它是一个高吞吐量的分布式发布订阅消息系统&#xff0c;可以处理消费者在网站中的所有动作流数据&#xff0c;如网页浏览、搜索和其他用户行为等。Kafk…...

ABC351

C 栈的应用 #include<bits/stdc.h>using namespace std;stack<int>stk;int main() {int n;cin>>n;for(int i1;i<n;i){int a;cin>>a;while(!stk.empty()&&astk.top()){stk.pop();a;}stk.push(a);}cout<<stk.size()<<endl;retur…...

base上海,数据科学,数据挖掘,数据分析等岗位求收留

裁员了&#xff0c;base上海&#xff0c;数据科学&#xff0c;数据挖掘&#xff0c;数据分析等岗位&#xff0c;期望30k~40k&#xff0c;求推荐求收留 1&#xff0c;6年数据算法工作&#xff0c;做过指标体系搭建&#xff0c;用户画像&#xff0c;货品定价&#xff0c;社区分析…...

IC元器件

1.电阻&#xff1a; 电阻的作用&#xff1a; 1.与负载串联&#xff1a;做限流分压 2.电阻并联&#xff1a;将小功率电阻并联成大功率&#xff0c;防烧毁 2.电容&#xff1a; 电容就是两块金属板&#xff0b;中间的介质&#xff08;相当于两个人坐在一起加上中间的空气…...

SQL159 每个创作者每月的涨粉率及截止当前的总粉丝量

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-09-01 10:00:002021-09-01 10:00:20011NULL210520022021-09-10 11:00:002021-09-10 11:00:30101NULL310120012021-10-01 10:00:002021-10-01 10:00…...

Linux安装MySQL教程【带图文命令巨详细】

巨详细Linux安装MySQL 1、查看是否有自带数据库或残留数据库信息1.1检查残留mysql1.2检查并删除残留mysql依赖1.3检查是否自带mariadb库 2、下载所需MySQL版本&#xff0c;上传至系统指定位置2.1创建目录2.2下载MySQL压缩包 3、安装MySQL3.1创建目录3.2解压mysql压缩包3.3安装解…...

外部排序快速入门详解:基本原理,败者树,置换-选择排序,最佳归并树

文章目录 外部排序1.最基本的外部排序原理2.外部排序的优化2.1 败者树优化方法2.2 置换-选择排序优化方法2.3 最佳归并树 外部排序 为什么要学习外部排序&#xff1f; 答&#xff1a; 在处理数据的过程中&#xff0c;我们需要把磁盘(外存&#xff09;中存储的数据拿到内存中处理…...

人工智能和物联网如何结合

欢迎来到 Papicatch的博客 目录 ​ &#x1f349;引言 &#x1f349;AI与IoT的结合方式 &#x1f348;数据处理和分析 &#x1f34d;实例 &#x1f348;边缘计算 &#x1f34d;实例 &#x1f348;自动化和自主操作 &#x1f34d;实例 &#x1f348;安全和隐私保护 &…...

【JAVASE】JAVA应用案例(下)

一&#xff1a;抢红包 一个大V直播时&#xff0c;发起了抢红包活动&#xff0c;分别有9,666,188,520,99999五个红包。请模拟粉丝来抽奖&#xff0c;按照先来先得&#xff0c;随机抽取&#xff0c;抽完即止&#xff0c;注意&#xff1a;一个红包只能被抽一次&#xff0c;先抽或…...

【面试干货】 B 树与 B+ 树的区别

【面试干货】 B 树与 B 树的区别 1、B 树2、 B 树3、 区别与优缺点比较4、 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库系统中&#xff0c;B 树和 B 树是常见的索引结构&#xff0c;它们在存储和组织数据方面有着不同的设计…...

Socket编程权威指南(四)彻底解密 Epoll 原理

在上一篇文章中&#xff0c;我们优化了基于 Socket 的网络服务器&#xff0c;从最初的 select/poll 模型进化到了高效的 epoll。很多读者对 epoll 的惊人性能表示极大的兴趣&#xff0c;对它的工作原理也充满了好奇。今天&#xff0c;就让我们一起揭开 epoll 神秘的面纱&#x…...

Windows开始ssh服务+密钥登录+默认启用powershell

文章内所有的命令都在power shell内执行&#xff0c;使用右键单击Windows徽标&#xff0c;选择终端管理员即可打开 Windows下OpenSSH的安装 打开Windows power shell&#xff0c;检查SSH服务的安装状态。会返回SSH客户端和服务器的安装状态&#xff0c;一下是两个都安装成功的…...

实体商铺私域流量打造策略:从引流到转化的全链路解析

在数字化时代&#xff0c;实体商铺面临着前所未有的挑战与机遇。随着线上购物的兴起&#xff0c;传统商铺如何吸引并留住顾客&#xff0c;成为了每个实体店家必须面对的问题。私域流量的打造&#xff0c;正是解决这一问题的关键所在。本文将从引流、留存、转化三个方面&#xf…...

实战 | 通过微调SegFormer改进车道检测效果(数据集 + 源码)

背景介绍 SegFormer&#xff1a;实例分割在自动驾驶汽车技术的快速发展中发挥了关键作用。对于任何在道路上行驶的车辆来说&#xff0c;车道检测都是必不可少的。车道是道路上的标记&#xff0c;有助于区分道路上可行驶区域和不可行驶区域。车道检测算法有很多种&#xff0c;每…...

游戏网页设计html代码大全/现在百度怎么优化排名

原来总是对触发器的几种写法和执行先后顺序感到困惑&#xff0c;找了个时间把Oracle的官方文档看了一下&#xff0c;然后做了几个例子&#xff0c;终于有点明白了。:Types of Triggers触发器类型Row Triggers and Statement Triggers行级触发器和语句级触发器BEFORE and AFTER …...

做画册好的国外网站推荐/贵阳seo网站管理

本文实例讲述了python2 对excel表格操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a;#!/usr/bin/env python2# -*- coding: utf-8 -*-"""Created on Sat Dec 2 15:40:35 2017author: 260207"""from xlutils.copy import copyimport …...

简述网站建设基本流程图/seo搜索引擎招聘

跳过spring使用Mybatisplus 注意,这里需要Db类,在mybatisplus3.5.3.1里面有的,之前版本没有. 依赖如下 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></depend…...

vue做单页面网站/sem推广计划

作者&#xff1a;川石信息 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 从被测试对象的角度分类&#xff0c;测试方法可以分为黑盒测试、白盒测试、灰盒测试三种&#xff0c;这也是我们最常看到的分类方法。 任何一个程序在测试时都由这…...

专门做游戏的网站/百度sem是什么意思

文章目录1. 前言2. 声明变量(1) var name xxx(2) name : xxx(3) 知识点类型推断的好处变量的重声明(4) 特点3. 作用域(1) 一个变量与其外层代码块中的变量重名(2) 引用变量的机制4. 变量类型相关(1) 类型断言类型断言表达式interface{}(x)x.(T)表达式结果(2) 类型转换int16转换…...

武汉博晟做的网站/公司网站建设全包

转载链接&#xff1a;http://www.cnblogs.com/tianzhiliang/articles/2562880.html 原因&#xff1a;在安装Framework v4.0之后&#xff0c;再启用IIS&#xff0c;导致Framework没有完全安装 解决&#xff1a;开始->所有程序->附件->鼠标右键点击“命令提示符”->以…...