作者 张关杰

Merge branch 'develop' of http://47.244.231.31:8099/zhl/globalso-v6 into bate

  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :TranslateController.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2024/1/12 9:39
  8 + */
  9 +
  10 +namespace App\Http\Controllers\Bside\Setting;
  11 +
  12 +use App\Enums\Common\Code;
  13 +use App\Http\Controllers\Bside\BaseController;
  14 +use App\Http\Logic\Bside\Setting\TranslateLogic;
  15 +use App\Models\WebSetting\WebLanguage;
  16 +
  17 +class TranslateController extends BaseController
  18 +{
  19 + /**
  20 + * @remark :获取翻译校队列表
  21 + * @name :lists
  22 + * @author :lyh
  23 + * @method :post
  24 + * @time :2024/1/12 9:39
  25 + */
  26 + public function lists(TranslateLogic $logic){
  27 + $this->request->validate([
  28 + 'type'=>'required',
  29 + 'language_id'=>'required',
  30 + 'url'=>'required',
  31 + ],[
  32 + 'type.required' => 'type不能为空',
  33 + 'language_id.required' => 'language_id不能为空',
  34 + 'url.required' => 'url不能为空',
  35 + ]);
  36 + $data = $logic->getTranslateList();
  37 + $this->response('success',Code::SUCCESS,$data);
  38 + }
  39 +
  40 + /**
  41 + * @remark :图片列表
  42 + * @name :imageList
  43 + * @author :lyh
  44 + * @method :post
  45 + * @time :2024/1/12 11:18
  46 + */
  47 + public function imageList(TranslateLogic $logic){
  48 + $this->request->validate([
  49 + 'type'=>'required',
  50 + 'language_id'=>'required',
  51 + 'url'=>'required',
  52 + ],[
  53 + 'type.required' => 'type不能为空',
  54 + 'language_id.required' => 'language_id不能为空',
  55 + 'url.required' => 'url不能为空',
  56 + ]);
  57 + $data = $logic->getTranslateImageList();
  58 + $this->response('success',Code::SUCCESS,$data);
  59 + }
  60 +
  61 + /**
  62 + * @remark :保存数据
  63 + * @name :save
  64 + * @author :lyh
  65 + * @method :post
  66 + * @time :2024/1/12 11:19
  67 + */
  68 + public function save(TranslateLogic $logic){
  69 + $this->request->validate([
  70 + 'type'=>'required',
  71 + 'language_id'=>'required',
  72 + 'url'=>'required',
  73 + 'alias'=>'required',
  74 + ],[
  75 + 'type.required' => 'type不能为空',
  76 + 'language_id.required' => 'language_id不能为空',
  77 + 'url.required' => 'url不能为空',
  78 + 'alias.required' => 'url不能为空',
  79 + ]);
  80 + $logic->translateSave();
  81 + $this->response('success');
  82 + }
  83 +}
@@ -116,7 +116,7 @@ class CustomModuleLogic extends BaseLogic @@ -116,7 +116,7 @@ class CustomModuleLogic extends BaseLogic
116 public function checkIsName($name,$id = 0){ 116 public function checkIsName($name,$id = 0){
117 $param['name'] = $name; 117 $param['name'] = $name;
118 if(!empty($id)){ 118 if(!empty($id)){
119 - $param['id'] = ['id'=>['!=',$id],]; 119 + $param['id'] = ['id'=>['!=',$id]];
120 } 120 }
121 $info = (new CustomModule())->read($param); 121 $info = (new CustomModule())->read($param);
122 if($info !== false){ 122 if($info !== false){
  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\Proofreading;
  15 +use App\Models\WebSetting\Translate as TranslateModel;
  16 +use App\Models\WebSetting\WebLanguage;
  17 +use App\Helper\Translate;
  18 +use Illuminate\Support\Facades\DB;
  19 +
  20 +class TranslateLogic extends BaseLogic
  21 +{
  22 + public function __construct()
  23 + {
  24 + parent::__construct();
  25 + $this->model = new TranslateModel();
  26 + $this->param = $this->requestAll;
  27 + }
  28 +
  29 + /**
  30 + * @remark :
  31 + * @name :getTranslateList
  32 + * @author :lyh
  33 + * @method :post
  34 + * @time :2024/1/12 9:43
  35 + */
  36 + public function getTranslateList(){
  37 + $languageInfo = $this->getLanguage($this->param['language_id']);
  38 + $info = $this->model->read(['url'=>$this->param['url'],'language_id'=>$this->param['language_id'],'type'=>$this->param['type']]);
  39 + //获取当前URl的所有文本内容
  40 + $new_key = $this->getUrlRead($this->param['url']);
  41 + if($info === false){
  42 + $data = [];
  43 + $translate_list = Translate::tran($new_key, $languageInfo['short']);
  44 + foreach ($new_key as $k=>$v){
  45 + $data[] = [
  46 + trim($v)=>$translate_list[$k],
  47 + ];
  48 + }
  49 + return $this->response('success',Code::SUCCESS,$data);
  50 + }
  51 + $old_key = [];//key值组成数据
  52 + $data = json_decode($info['data'],true);
  53 + foreach ($data as $k => $v){
  54 + $old_key[] = $k;
  55 + }
  56 + $arr2 = array_values(array_diff($new_key, $old_key));
  57 + if(!empty($arr2)){
  58 + $translate_list = Translate::tran($arr2, $languageInfo['short']);
  59 + foreach ($arr2 as $k1=>$v1){
  60 + $data[] = [
  61 + trim($v1)=>$translate_list[$k1]
  62 + ];
  63 + }
  64 + }
  65 + $this->response('success',Code::SUCCESS,$data);
  66 + }
  67 + /**
  68 + * @remark :获取图片列表
  69 + * @name :imageList
  70 + * @author :lyh
  71 + * @method :post
  72 + * @time :2023/11/23 17:29
  73 + */
  74 + public function getTranslateImageList(){
  75 + $info = $this->model->read(['url'=>$this->param['url'],'language_id'=>$this->param['language_id'],'type'=>$this->param['type']]);
  76 + $data = [];
  77 + if($info === false){
  78 + $new_list = $this->getUrlImageRead($this->param['url']);
  79 + foreach ($new_list as $v){
  80 + $data[] = [
  81 + $v=>$v,
  82 + ];
  83 + }
  84 + return $this->response('success',Code::SUCCESS,$data);
  85 + }
  86 + $new_list = $this->getUrlImageRead($this->param['url']);
  87 + $old_list = [];
  88 + $data = json_decode($info['data'],true);
  89 + foreach ($data as $k=>$v){
  90 + $old_list[] = $v;
  91 + $data[] = [
  92 + $k=>$v,
  93 + ];
  94 + }
  95 + $arr2 = array_values(array_diff($new_list, $old_list));
  96 + if(!empty($arr2)){
  97 + foreach ($arr2 as $v1){
  98 + $data[] = [
  99 + $v1=>$v1
  100 + ];
  101 + }
  102 + }
  103 + $this->response('success',Code::SUCCESS,$data);
  104 + }
  105 + /**
  106 + * @remark :获取语种信息
  107 + * @name :getLanguage
  108 + * @author :lyh
  109 + * @method :post
  110 + * @time :2024/1/12 9:45
  111 + */
  112 + public function getLanguage($language_id){
  113 + //获取语种信息
  114 + $languageModel = new WebLanguage();
  115 + $languageInfo = $languageModel->read(['id'=>$language_id]);
  116 + if($languageInfo === false){
  117 + $this->fail('请选择语种');
  118 + }
  119 + return $this->success($languageInfo);
  120 + }
  121 +
  122 + /**
  123 + * @remark :获取Url内容
  124 + * @name :getUrlRead
  125 + * @author :lyh
  126 + * @method :post
  127 + * @time :2023/11/22 10:02
  128 + */
  129 + public function getUrlRead($url){
  130 + $contextOptions = [
  131 + 'ssl' => [
  132 + 'verify_peer' => false,
  133 + 'verify_peer_name' => false,
  134 + ],
  135 + ];
  136 + $context = stream_context_create($contextOptions);
  137 + $sourceCode = file_get_contents($url, false, $context);
  138 + $pattern = '/<style\b[^>]*>(.*?)<\/style>/s'; // 定义匹配`<style>`标签及其内容的正则表达式
  139 + $strippedContent = preg_replace($pattern, '', $sourceCode); // 删除`<style>`标签及其内容
  140 + $pattern = '/<script\b[^>]*>(.*?)<\/script>/s'; // 定义匹配`<script>`标签及其内容的正则表达式
  141 + $strippedContent = preg_replace($pattern, '', $strippedContent); // 删除`<script>`标签及其内容
  142 + $pattern = '/<link\b[^>]*>/'; // 定义匹配 `<link>` 标签的正则表达式
  143 + $strippedContent = preg_replace($pattern, '', $strippedContent); // 删除 `<link>` 标签
  144 + $pattern = '/>([^<]+)</'; // 定义匹配中间内容不是标签的正则表达式
  145 + $matches = array();
  146 + preg_match_all($pattern, $strippedContent, $matches);
  147 + $textContentArray = array_filter($matches[1], function($item) {
  148 + return !empty(trim($item));
  149 + });
  150 + $data = [];
  151 + foreach ($textContentArray as $v){
  152 + $content = trim($v);
  153 + $trimmedString = preg_replace('/\s+/', ' ', $content);
  154 + $data[] = $trimmedString;
  155 + }
  156 + $data = array_values($data);
  157 + return $data;
  158 + }
  159 +
  160 + /**
  161 + * @remark :获取Url内容
  162 + * @name :getUrlRead
  163 + * @author :lyh
  164 + * @method :post
  165 + * @time :2023/11/22 10:02
  166 + */
  167 + public function getUrlImageRead($url){
  168 + $contextOptions = [
  169 + 'ssl' => [
  170 + 'verify_peer' => false,
  171 + 'verify_peer_name' => false,
  172 + ],
  173 + ];
  174 + $pattern = '/<img.*?src="(.*?)".*?>/i';
  175 + $matches = array();
  176 + $context = stream_context_create($contextOptions);
  177 + $sourceCode = file_get_contents($url, false, $context);
  178 + preg_match_all($pattern, $sourceCode, $matches);
  179 + $textContentArray = $matches[1];
  180 + $data = [];
  181 + foreach ($textContentArray as $v){
  182 + if(!empty($v)){
  183 + $data[] = $v;
  184 + }
  185 + }
  186 + $uniqueArray = array_unique($data);
  187 + $data = array_values($uniqueArray);
  188 + return $data;
  189 + }
  190 +
  191 + /**
  192 + * @name :(新增/更新多语言)save
  193 + * @author :lyh
  194 + * @method :post
  195 + * @time :2023/6/12 10:52
  196 + */
  197 + public function translateSave(){
  198 + try {
  199 + $info = $this->model->read(['language_id'=>$this->param['language_id'],'url'=>$this->param['url'],'type'=>$this->param['type']]);
  200 + if($info === false){
  201 + $param = [
  202 + 'type'=>1,
  203 + 'project_id'=>$this->user['project_id'],
  204 + 'url'=>$this->param['url'],
  205 + 'language_id'=>$this->param['language_id'],
  206 + 'alias'=>$this->param['alias'],
  207 + ];
  208 + $param['data'] = json_encode($this->param['data'],true);
  209 + $this->model->add($param);
  210 + }else{
  211 + $data = json_encode($this->param['data'],true);
  212 + $this->model->edit(['data'=>$data],['language_id'=>$this->param['language_id'],'url'=>$this->param['url'],'type'=>$this->param['type']]);
  213 + }
  214 + }catch (\Exception $e){
  215 + $this->fail('系统错误请联系管理员');
  216 + }
  217 + $this->response('success');
  218 + }
  219 +}
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :Translate.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2024/1/12 9:38
  8 + */
  9 +
  10 +namespace App\Models\WebSetting;
  11 +
  12 +use App\Models\Base;
  13 +
  14 +class Translate extends Base
  15 +{
  16 + protected $table = 'gl_translate';
  17 + //连接数据库
  18 + protected $connection = 'custom_mysql';
  19 +}
@@ -176,7 +176,12 @@ Route::middleware(['bloginauth'])->group(function () { @@ -176,7 +176,12 @@ Route::middleware(['bloginauth'])->group(function () {
176 Route::any('/save', [\App\Http\Controllers\Bside\Setting\ProofreadingController::class, 'save'])->name('web_proofreading_save'); 176 Route::any('/save', [\App\Http\Controllers\Bside\Setting\ProofreadingController::class, 'save'])->name('web_proofreading_save');
177 Route::any('/saveImage', [\App\Http\Controllers\Bside\Setting\ProofreadingController::class, 'saveImage'])->name('web_proofreading_saveImage'); 177 Route::any('/saveImage', [\App\Http\Controllers\Bside\Setting\ProofreadingController::class, 'saveImage'])->name('web_proofreading_saveImage');
178 }); 178 });
179 - 179 + //新版翻译校队
  180 + Route::prefix('translate_check')->group(function () {//languageList
  181 + Route::any('/', [\App\Http\Controllers\Bside\Setting\TranslateController::class, 'lists'])->name('translate_check_lists');
  182 + Route::any('/imageList', [\App\Http\Controllers\Bside\Setting\TranslateController::class, 'imageList'])->name('translate_checkg_imageList');
  183 + Route::any('/save', [\App\Http\Controllers\Bside\Setting\TranslateController::class, 'save'])->name('translate_check_save');
  184 + });
180 //seo设置 185 //seo设置
181 Route::prefix('seo')->group(function () { 186 Route::prefix('seo')->group(function () {
182 Route::any('/info', [\App\Http\Controllers\Bside\Setting\WebSettingSeoController::class, 'info'])->name('web_seo_info'); 187 Route::any('/info', [\App\Http\Controllers\Bside\Setting\WebSettingSeoController::class, 'info'])->name('web_seo_info');