参考-SEO 友好的 URL(不过是收费的教程额)
我并不是做宣传,但你如果想要购买的话,可以点击这个链接额 https://laravel-china.org/courses?rf=7092
翻译处理器
首先,我们需将翻译的全部逻辑封装为一个类,并放置于 Handlers 文件夹中:
app/Handlers/SlugTranslateHandler.php
<?php
namespace App\Handlers;
use GuzzleHttp\Client;
use Overtrue\Pinyin\Pinyin;
class SlugTranslateHandler
{
public function translate($text)
{
// 实例化 HTTP 客户端
$http = new Client;
// 初始化配置信息
$api = 'http://api.fanyi.baidu.com/api/trans/vip/translate?';
$appid = config('services.baidu_translate.appid');
$key = config('services.baidu_translate.key');
$salt = time();
// 如果没有配置百度翻译,自动使用兼容的拼音方案
if (empty($appid) || empty($key)) {
return $this->pinyin($text);
}
// 根据文档,生成 sign
// http://api.fanyi.baidu.com/api/trans/product/apidoc
// appid+q+salt+密钥 的MD5值
$sign = md5($appid. $text . $salt . $key);
// 构建请求参数
$query = http_build_query([
"q" => $text,
"from" => "zh",
"to" => "en",
"appid" => $appid,
"salt" => $salt,
"sign" => $sign,
]);
// 发送 HTTP Get 请求
$response = $http->get($api.$query);
$result = json_decode($response->getBody(), true);
/**
获取结果,如果请求成功,dd($result) 结果如下:
array:3 [▼
"from" => "zh"
"to" => "en"
"trans_result" => array:1 [▼
0 => array:2 [▼
"src" => "XSS 安全漏洞"
"dst" => "XSS security vulnerability"
]
]
]
**/
// 尝试获取获取翻译结果
if (isset($result['trans_result'][0]['dst'])) {
return str_slug($result['trans_result'][0]['dst']);
} else {
// 如果百度翻译没有结果,使用拼音作为后备计划。
return $this->pinyin($text);
}
}
public function pinyin($text)
{
return str_slug(app(Pinyin::class)->permalink($text));
}
}
在类实例化以后,我们只需要调用 translate() 方法即可得到翻译的结果。不过目前我们还需安装依赖的扩展包。
使用
$slug = app(SlugTranslateHandler::class)->translate($title);
app()
允许我们使用 Laravel 服务容器 ,此处我们用来生成 SlugTranslateHandler 实例。
1. 安装依赖 Guzzle
Guzzle 库是一套强大的 PHP HTTP 请求套件,我们使用 Guzzle 的 HTTP 客户端来请求 百度翻译 接口。
使用 Composer 安装 Guzzle 类库:
$ composer require "guzzlehttp/guzzle:~6.3"
2. 安装依赖 PinYin
PinYin 是 安正超 开发的,基于 CC-CEDICT 词典的中文转拼音工具,是一套优质的汉字转拼音解决方案。我们使用 PinYin 来作为翻译的后备计划,当百度翻译 API 不可用时,程序会自动使用 PinYin 汉字转拼音方案来生成 Slug。
使用 Composer 安装 PinYin 类库:
$ composer require "overtrue/pinyin:~3.0"
同样的,我们已在 SlugTranslateHandler.php 顶部 use
引入使用。
3. 百度翻译 API 配置信息
当使用百度翻译 API 时,我们需要申请官方授权的 appid
和 key
。打开 百度翻译开放平台,然后点击『申请接入』按钮: