作者 lyh

gx

<?php
/**
* @remark :
* @name :TranslateController.php
* @author :lyh
* @method :post
* @time :2024/1/12 9:39
*/
namespace App\Http\Controllers\Bside\Setting;
use App\Http\Controllers\Bside\BaseController;
use App\Models\WebSetting\WebLanguage;
class TranslateController extends BaseController
{
/**
* @remark :获取翻译校队列表
* @name :lists
* @author :lyh
* @method :post
* @time :2024/1/12 9:39
*/
public function lists(){
}
}
... ...
<?php
/**
* @remark :
* @name :TranslateLogic.php
* @author :lyh
* @method :post
* @time :2024/1/12 9:42
*/
namespace App\Http\Logic\Bside\Setting;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\WebSetting\Translate as TranslateModel;
use App\Models\WebSetting\WebLanguage;
use App\Helper\Translate;
class TranslateLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new TranslateModel();
$this->param = $this->requestAll;
}
/**
* @remark :
* @name :getTranslateList
* @author :lyh
* @method :post
* @time :2024/1/12 9:43
*/
public function getTranslateList(){
$languageInfo = $this->getLanguage($this->param['language_id']);
$info = $this->model->read(['url'=>$this->param['url'],'language_id'=>$this->param['language_id'],'type'=>$this->param['type']]);
//获取当前URl的所有文本内容
$new_key = $this->getUrlRead($this->param['url']);
if($info === false){
$data = [];
$translate_list = Translate::tran($new_key, $languageInfo['short']);
foreach ($new_key as $k=>$v){
$data[] = [
trim($v)=>$translate_list[$k],
];
}
return $this->response('success',Code::SUCCESS,$data);
}
$old_key = [];//key值组成数据
$data = json_decode($info['data'],true);
foreach ($data as $k => $v){
$old_key[] = $k;
}
$arr2 = array_values(array_diff($new_key, $old_key));
if(!empty($arr2)){
$translate_list = Translate::tran($arr2, $languageInfo['short']);
foreach ($arr2 as $k1=>$v1){
$data[] = [
trim($v1)=>$translate_list[$k1]
];
}
}
$this->response('success',Code::SUCCESS,$data);
}
/**
* @remark :获取语种信息
* @name :getLanguage
* @author :lyh
* @method :post
* @time :2024/1/12 9:45
*/
public function getLanguage($language_id){
//获取语种信息
$languageModel = new WebLanguage();
$languageInfo = $languageModel->read(['id'=>$language_id]);
if($languageInfo === false){
$this->fail('请选择语种');
}
return $this->success($languageInfo);
}
/**
* @remark :获取Url内容
* @name :getUrlRead
* @author :lyh
* @method :post
* @time :2023/11/22 10:02
*/
public function getUrlRead($url){
$contextOptions = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
];
$context = stream_context_create($contextOptions);
$sourceCode = file_get_contents($url, false, $context);
$pattern = '/<style\b[^>]*>(.*?)<\/style>/s'; // 定义匹配`<style>`标签及其内容的正则表达式
$strippedContent = preg_replace($pattern, '', $sourceCode); // 删除`<style>`标签及其内容
$pattern = '/<script\b[^>]*>(.*?)<\/script>/s'; // 定义匹配`<script>`标签及其内容的正则表达式
$strippedContent = preg_replace($pattern, '', $strippedContent); // 删除`<script>`标签及其内容
$pattern = '/<link\b[^>]*>/'; // 定义匹配 `<link>` 标签的正则表达式
$strippedContent = preg_replace($pattern, '', $strippedContent); // 删除 `<link>` 标签
$pattern = '/>([^<]+)</'; // 定义匹配中间内容不是标签的正则表达式
$matches = array();
preg_match_all($pattern, $strippedContent, $matches);
$textContentArray = array_filter($matches[1], function($item) {
return !empty(trim($item));
});
$data = [];
foreach ($textContentArray as $v){
$content = trim($v);
$trimmedString = preg_replace('/\s+/', ' ', $content);
$data[] = $trimmedString;
}
$data = array_values($data);
return $data;
}
}
... ...
<?php
/**
* @remark :
* @name :Translate.php
* @author :lyh
* @method :post
* @time :2024/1/12 9:38
*/
namespace App\Models\WebSetting;
use App\Models\Base;
class Translate extends Base
{
protected $table = 'gl_translate';
//连接数据库
protected $connection = 'custom_mysql';
}
... ...