作者 lyh

gx

  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\Http\Controllers\Bside\BaseController;
  13 +use App\Models\WebSetting\WebLanguage;
  14 +
  15 +class TranslateController extends BaseController
  16 +{
  17 + /**
  18 + * @remark :获取翻译校队列表
  19 + * @name :lists
  20 + * @author :lyh
  21 + * @method :post
  22 + * @time :2024/1/12 9:39
  23 + */
  24 + public function lists(){
  25 +
  26 + }
  27 +
  28 +
  29 +}
  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 +}
  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 +}