?
本文給大家提供一個(gè)免費(fèi)的翻譯接口,有空時(shí)可以試試還是很秀的哈!
?
前言
項(xiàng)目中必要的數(shù)據(jù)是需要寫(xiě)語(yǔ)言包的,就像那種幾百年不變的數(shù)據(jù),但是有一類數(shù)據(jù)就是在項(xiàng)目的運(yùn)行的過(guò)程中就在一直變化。
對(duì)于這樣的數(shù)據(jù)我們寫(xiě)成語(yǔ)言包顯然是不合適的,所以我們就需要借助翻譯接口來(lái)實(shí)現(xiàn)我們的需求了。
一、翻譯接口簡(jiǎn)單介紹
先看一張圖吧!看一下這個(gè)翻譯接口在我們的項(xiàng)目中如何運(yùn)用。

這個(gè)接口總共有4個(gè)參數(shù),分別為a、f、t、w。
這四個(gè)參數(shù)分別的意思為,a是固定的值就是fy。
f指的是翻譯的語(yǔ)種。
t指的是需要翻譯成我們需要的語(yǔ)種。
w指的是需要翻譯的數(shù)據(jù)。
二、項(xiàng)目實(shí)戰(zhàn)
項(xiàng)目需求就是把左邊的框出來(lái)的在切換語(yǔ)言后跟隨這語(yǔ)言變動(dòng)。首先說(shuō)明一下,在上邊的這些文字不是手動(dòng)寫(xiě)上去的,html文件也是不存在的。是在數(shù)據(jù)庫(kù)注釋里邊配置的。
下圖就是我們的數(shù)據(jù)庫(kù)創(chuàng)建。為什么這么創(chuàng)建,這樣創(chuàng)建有什么好處,我就不提了,每個(gè)團(tuán)隊(duì)都有自己的想法哈!
接著我們來(lái)到正題
使用的代碼也就這點(diǎn),接口地址就是上邊postman里邊的地址,后邊只需要傳輸一個(gè)需要翻譯的數(shù)據(jù)即可。
本文實(shí)現(xiàn)的數(shù)據(jù)就是上圖左側(cè)的文字,也就是我們從數(shù)據(jù)庫(kù)中把注釋讀出來(lái)然后根據(jù)一定的規(guī)則把這個(gè)名字就直接作為添加或者修改時(shí)的列即可。
那么就只需要把這個(gè)注釋直接給追加到翻譯接口后邊即可。給你提供一個(gè)php發(fā)起curl請(qǐng)求的代碼
public function translateRequest($url, $data=array()){
$ch = curl_init();//初始化
//curl_setopt();//設(shè)置
//設(shè)置
curl_setopt($ch,CURLOPT_URL,$url); //需要獲取的 URL 地址
curl_setopt($ch,CURLOPT_HEADER,0); //啟用時(shí)會(huì)將頭文件的信息作為數(shù)據(jù)流輸出, 此處禁止輸出頭信息
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //獲取的信息以字符串返回,而不是直接輸出
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30); //連接超時(shí)時(shí)間
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
//避免https 的ssl驗(yàn)證
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLVERSION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
if($data){
curl_setopt($ch, CURLOPT_POST, 1); //post請(qǐng)求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//post參數(shù)
}
//執(zhí)行
$data = curl_exec($ch);//執(zhí)行 不輸出 內(nèi)容返回給它
//判斷是否請(qǐng)求成功
if(curl_errno($ch)){//錯(cuò)誤碼
echo 'curl error: '.curl_error($ch);//錯(cuò)誤信息
}
$response = curl_getinfo($ch);
switch($response['http_code']){
case 200:
return $data;
break;
default:
exit('程序異常');
}
curl_close($ch);//關(guān)閉
}
經(jīng)過(guò)測(cè)試后看看效果,效果是實(shí)現(xiàn)了,但是你們可以私下試試哈!翻譯一組數(shù)據(jù)時(shí)速度還行,但是翻譯幾個(gè)數(shù)據(jù)時(shí)就有點(diǎn)慢了。
添加頁(yè)面打開(kāi)的時(shí)間大概需要3-5S,這肯定是不可以的,所以我們需要想一個(gè)辦法來(lái)解決這個(gè)問(wèn)題。
三、優(yōu)化翻譯速度
在第二步中,咔咔做到最后是發(fā)現(xiàn)翻譯的速度是有點(diǎn)慢的,碰到字段多的更是慢的離譜。于是咔咔就想了一個(gè)辦法。
這些數(shù)據(jù)是之前是一個(gè)一個(gè)翻譯出來(lái)的,那么我們是不是也可以一次性給翻譯出來(lái),然后我們?cè)趤?lái)自己組裝數(shù)據(jù)。
帶著這個(gè)想法我們開(kāi)始實(shí)施。
這幾行代碼最終實(shí)現(xiàn)的就是把所有的字段注釋放在一起,并且用“,”隔開(kāi)打印出來(lái)的數(shù)據(jù)可以看一下,out字段就是翻譯出來(lái)的數(shù)據(jù),其實(shí)想都不用想一次翻譯肯定比6次翻譯速度快。
然后拿著這組數(shù)據(jù)在轉(zhuǎn)化成數(shù)組在重新組裝到原數(shù)據(jù)里就ok了。這里有個(gè)小問(wèn)題,可以一起關(guān)注一下。中文打印出來(lái)的是原始數(shù)據(jù)里邊的,英文是數(shù)據(jù)經(jīng)過(guò)處理的。
很明顯可以看到返回的英文結(jié)果跟原始數(shù)據(jù)對(duì)不上。這里的處理也是比較簡(jiǎn)單,如果你有更好的方案評(píng)論區(qū)見(jiàn)
處理方式在獲取數(shù)據(jù)庫(kù)字段中文注釋之前把對(duì)應(yīng)的索引保存到$needkey
然后重新定義一個(gè)變量fanal,讓fanal的索引等于needkey的v,而對(duì)應(yīng)的值就是result[needkey的k]

四、總結(jié)
這樣一個(gè)翻譯接口的使用就完成了,項(xiàng)目截圖就不給大家展示了哈!
把多次翻譯改為一次翻譯,提升翻譯速度,畢竟是請(qǐng)求別人的東西,肯定沒(méi)有我們自己重組數(shù)據(jù)快。
?
堅(jiān)持學(xué)習(xí)、堅(jiān)持寫(xiě)博、堅(jiān)持分享是咔咔從業(yè)以來(lái)一直所秉持的信念。希望在諾大互聯(lián)網(wǎng)中咔咔的文章能帶給你一絲絲幫助。
?