|
|
|
1
|
+<?php
|
|
|
|
2
|
+/**
|
|
|
|
3
|
+ * @remark :
|
|
|
|
4
|
+ * @name :TranslateLogic.php
|
|
|
|
5
|
+ * @author :lyh
|
|
|
|
6
|
+ * @method :post
|
|
|
|
7
|
+ * @time :2024/1/12 9:42
|
|
|
|
8
|
+ */
|
|
|
|
9
|
+
|
|
|
|
10
|
+namespace App\Http\Logic\Bside\Setting;
|
|
|
|
11
|
+
|
|
|
|
12
|
+use App\Enums\Common\Code;
|
|
|
|
13
|
+use App\Http\Logic\Bside\BaseLogic;
|
|
|
|
14
|
+use App\Models\WebSetting\Translate as TranslateModel;
|
|
|
|
15
|
+use App\Models\WebSetting\WebLanguage;
|
|
|
|
16
|
+use App\Helper\Translate;
|
|
|
|
17
|
+
|
|
|
|
18
|
+class TranslateLogic extends BaseLogic
|
|
|
|
19
|
+{
|
|
|
|
20
|
+ public function __construct()
|
|
|
|
21
|
+ {
|
|
|
|
22
|
+ parent::__construct();
|
|
|
|
23
|
+ $this->model = new TranslateModel();
|
|
|
|
24
|
+ $this->param = $this->requestAll;
|
|
|
|
25
|
+ }
|
|
|
|
26
|
+
|
|
|
|
27
|
+ /**
|
|
|
|
28
|
+ * @remark :
|
|
|
|
29
|
+ * @name :getTranslateList
|
|
|
|
30
|
+ * @author :lyh
|
|
|
|
31
|
+ * @method :post
|
|
|
|
32
|
+ * @time :2024/1/12 9:43
|
|
|
|
33
|
+ */
|
|
|
|
34
|
+ public function getTranslateList(){
|
|
|
|
35
|
+ $languageInfo = $this->getLanguage($this->param['language_id']);
|
|
|
|
36
|
+ $info = $this->model->read(['url'=>$this->param['url'],'language_id'=>$this->param['language_id'],'type'=>$this->param['type']]);
|
|
|
|
37
|
+ //获取当前URl的所有文本内容
|
|
|
|
38
|
+ $new_key = $this->getUrlRead($this->param['url']);
|
|
|
|
39
|
+ if($info === false){
|
|
|
|
40
|
+ $data = [];
|
|
|
|
41
|
+ $translate_list = Translate::tran($new_key, $languageInfo['short']);
|
|
|
|
42
|
+ foreach ($new_key as $k=>$v){
|
|
|
|
43
|
+ $data[] = [
|
|
|
|
44
|
+ trim($v)=>$translate_list[$k],
|
|
|
|
45
|
+ ];
|
|
|
|
46
|
+ }
|
|
|
|
47
|
+ return $this->response('success',Code::SUCCESS,$data);
|
|
|
|
48
|
+ }
|
|
|
|
49
|
+ $old_key = [];//key值组成数据
|
|
|
|
50
|
+ $data = json_decode($info['data'],true);
|
|
|
|
51
|
+ foreach ($data as $k => $v){
|
|
|
|
52
|
+ $old_key[] = $k;
|
|
|
|
53
|
+ }
|
|
|
|
54
|
+ $arr2 = array_values(array_diff($new_key, $old_key));
|
|
|
|
55
|
+ if(!empty($arr2)){
|
|
|
|
56
|
+ $translate_list = Translate::tran($arr2, $languageInfo['short']);
|
|
|
|
57
|
+ foreach ($arr2 as $k1=>$v1){
|
|
|
|
58
|
+ $data[] = [
|
|
|
|
59
|
+ trim($v1)=>$translate_list[$k1]
|
|
|
|
60
|
+ ];
|
|
|
|
61
|
+ }
|
|
|
|
62
|
+ }
|
|
|
|
63
|
+ $this->response('success',Code::SUCCESS,$data);
|
|
|
|
64
|
+ }
|
|
|
|
65
|
+
|
|
|
|
66
|
+ /**
|
|
|
|
67
|
+ * @remark :获取语种信息
|
|
|
|
68
|
+ * @name :getLanguage
|
|
|
|
69
|
+ * @author :lyh
|
|
|
|
70
|
+ * @method :post
|
|
|
|
71
|
+ * @time :2024/1/12 9:45
|
|
|
|
72
|
+ */
|
|
|
|
73
|
+ public function getLanguage($language_id){
|
|
|
|
74
|
+ //获取语种信息
|
|
|
|
75
|
+ $languageModel = new WebLanguage();
|
|
|
|
76
|
+ $languageInfo = $languageModel->read(['id'=>$language_id]);
|
|
|
|
77
|
+ if($languageInfo === false){
|
|
|
|
78
|
+ $this->fail('请选择语种');
|
|
|
|
79
|
+ }
|
|
|
|
80
|
+ return $this->success($languageInfo);
|
|
|
|
81
|
+ }
|
|
|
|
82
|
+
|
|
|
|
83
|
+ /**
|
|
|
|
84
|
+ * @remark :获取Url内容
|
|
|
|
85
|
+ * @name :getUrlRead
|
|
|
|
86
|
+ * @author :lyh
|
|
|
|
87
|
+ * @method :post
|
|
|
|
88
|
+ * @time :2023/11/22 10:02
|
|
|
|
89
|
+ */
|
|
|
|
90
|
+ public function getUrlRead($url){
|
|
|
|
91
|
+ $contextOptions = [
|
|
|
|
92
|
+ 'ssl' => [
|
|
|
|
93
|
+ 'verify_peer' => false,
|
|
|
|
94
|
+ 'verify_peer_name' => false,
|
|
|
|
95
|
+ ],
|
|
|
|
96
|
+ ];
|
|
|
|
97
|
+ $context = stream_context_create($contextOptions);
|
|
|
|
98
|
+ $sourceCode = file_get_contents($url, false, $context);
|
|
|
|
99
|
+ $pattern = '/<style\b[^>]*>(.*?)<\/style>/s'; // 定义匹配`<style>`标签及其内容的正则表达式
|
|
|
|
100
|
+ $strippedContent = preg_replace($pattern, '', $sourceCode); // 删除`<style>`标签及其内容
|
|
|
|
101
|
+ $pattern = '/<script\b[^>]*>(.*?)<\/script>/s'; // 定义匹配`<script>`标签及其内容的正则表达式
|
|
|
|
102
|
+ $strippedContent = preg_replace($pattern, '', $strippedContent); // 删除`<script>`标签及其内容
|
|
|
|
103
|
+ $pattern = '/<link\b[^>]*>/'; // 定义匹配 `<link>` 标签的正则表达式
|
|
|
|
104
|
+ $strippedContent = preg_replace($pattern, '', $strippedContent); // 删除 `<link>` 标签
|
|
|
|
105
|
+ $pattern = '/>([^<]+)</'; // 定义匹配中间内容不是标签的正则表达式
|
|
|
|
106
|
+ $matches = array();
|
|
|
|
107
|
+ preg_match_all($pattern, $strippedContent, $matches);
|
|
|
|
108
|
+ $textContentArray = array_filter($matches[1], function($item) {
|
|
|
|
109
|
+ return !empty(trim($item));
|
|
|
|
110
|
+ });
|
|
|
|
111
|
+ $data = [];
|
|
|
|
112
|
+ foreach ($textContentArray as $v){
|
|
|
|
113
|
+ $content = trim($v);
|
|
|
|
114
|
+ $trimmedString = preg_replace('/\s+/', ' ', $content);
|
|
|
|
115
|
+ $data[] = $trimmedString;
|
|
|
|
116
|
+ }
|
|
|
|
117
|
+ $data = array_values($data);
|
|
|
|
118
|
+ return $data;
|
|
|
|
119
|
+ }
|
|
|
|
120
|
+} |