?
本文給大家提供一個免費的翻譯接口,有空時可以試試還是很秀的哈!
?
前言
項目中必要的數據是需要寫語言包的,就像那種幾百年不變的數據,但是有一類數據就是在項目的運行的過程中就在一直變化。
對于這樣的數據我們寫成語言包顯然是不合適的,所以我們就需要借助翻譯接口來實現我們的需求了。
一、翻譯接口簡單介紹
先看一張圖吧!看一下這個翻譯接口在我們的項目中如何運用。

這個接口總共有4個參數,分別為a、f、t、w。
這四個參數分別的意思為,a是固定的值就是fy。
f指的是翻譯的語種。
t指的是需要翻譯成我們需要的語種。
w指的是需要翻譯的數據。
二、項目實戰
項目需求就是把左邊的框出來的在切換語言后跟隨這語言變動。首先說明一下,在上邊的這些文字不是手動寫上去的,html文件也是不存在的。是在數據庫注釋里邊配置的。
下圖就是我們的數據庫創建。為什么這么創建,這樣創建有什么好處,我就不提了,每個團隊都有自己的想法哈!
接著我們來到正題
使用的代碼也就這點,接口地址就是上邊postman里邊的地址,后邊只需要傳輸一個需要翻譯的數據即可。
本文實現的數據就是上圖左側的文字,也就是我們從數據庫中把注釋讀出來然后根據一定的規則把這個名字就直接作為添加或者修改時的列即可。
那么就只需要把這個注釋直接給追加到翻譯接口后邊即可。給你提供一個php發起curl請求的代碼
<span style="display: block; background: url(https://my-wechat.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #272822; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">public</span>?<span class="hljs-function" style="line-height: 26px;"><span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">function</span>?<span class="hljs-title" style="color: #a6e22e; font-weight: bold; line-height: 26px;">translateRequest</span><span class="hljs-params" style="line-height: 26px;">($url,?$data=array<span class="hljs-params" style="line-height: 26px;">()</span>)</span></span>{<br><br>????????$ch?=?curl_init();<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//初始化</span><br>????????<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//curl_setopt();//設置</span><br>????????<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//設置</span><br>????????curl_setopt($ch,CURLOPT_URL,$url);???<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//需要獲取的?URL?地址</span><br>????????curl_setopt($ch,CURLOPT_HEADER,<span class="hljs-number" style="line-height: 26px;">0</span>);??????????<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//啟用時會將頭文件的信息作為數據流輸出,?此處禁止輸出頭信息</span><br>????????curl_setopt($ch,CURLOPT_RETURNTRANSFER,<span class="hljs-number" style="line-height: 26px;">1</span>);??<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//獲取的信息以字符串返回,而不是直接輸出</span><br>????????curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,<span class="hljs-number" style="line-height: 26px;">30</span>);?<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//連接超時時間</span><br>????????curl_setopt($ch,?CURLOPT_ENCODING,?<span class="hljs-string" style="color: #a6e22e; line-height: 26px;">'gzip'</span>);<br><br>????????<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//避免https?的ssl驗證</span><br>????????curl_setopt($ch,?CURLOPT_SSL_VERIFYHOST,?<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">false</span>);<br>????????curl_setopt($ch,?CURLOPT_SSLVERSION,?<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">false</span>);<br>????????curl_setopt($ch,?CURLOPT_SSL_VERIFYPEER,?<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">false</span>);<br><br>????????<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">if</span>($data){<br>????????????curl_setopt($ch,?CURLOPT_POST,?<span class="hljs-number" style="line-height: 26px;">1</span>);??????????<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//post請求</span><br>????????????curl_setopt($ch,?CURLOPT_POSTFIELDS,?$data);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//post參數</span><br>????????}<br><br>????????<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//執行</span><br>????????$data?=?curl_exec($ch);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//執行???不輸出??內容返回給它</span><br>????????<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//判斷是否請求成功</span><br><br>????????<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">if</span>(curl_errno($ch)){<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//錯誤碼</span><br>????????????<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">echo</span>?<span class="hljs-string" style="color: #a6e22e; line-height: 26px;">'curl?error:?'</span>.curl_error($ch);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//錯誤信息</span><br>????????}<br><br>????????$response?=?curl_getinfo($ch);<br><br>????????<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">switch</span>($response[<span class="hljs-string" style="color: #a6e22e; line-height: 26px;">'http_code'</span>]){<br>????????????<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">case</span>?<span class="hljs-number" style="line-height: 26px;">200</span>:<br>????????????????<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">return</span>?$data;<br>????????????????<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">break</span>;<br>????????????<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">default</span>:<br>????????????????<span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">exit</span>(<span class="hljs-string" style="color: #a6e22e; line-height: 26px;">'程序異常'</span>);<br>????????}<br><br>????????curl_close($ch);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//關閉</span><br>????}<br>
經過測試后看看效果,效果是實現了,但是你們可以私下試試哈!翻譯一組數據時速度還行,但是翻譯幾個數據時就有點慢了。
添加頁面打開的時間大概需要3-5S,這肯定是不可以的,所以我們需要想一個辦法來解決這個問題。
三、優化翻譯速度
在第二步中,咔咔做到最后是發現翻譯的速度是有點慢的,碰到字段多的更是慢的離譜。于是咔咔就想了一個辦法。
這些數據是之前是一個一個翻譯出來的,那么我們是不是也可以一次性給翻譯出來,然后我們在來自己組裝數據。
帶著這個想法我們開始實施。
這幾行代碼最終實現的就是把所有的字段注釋放在一起,并且用“,”隔開打印出來的數據可以看一下,out字段就是翻譯出來的數據,其實想都不用想一次翻譯肯定比6次翻譯速度快。
然后拿著這組數據在轉化成數組在重新組裝到原數據里就ok了。這里有個小問題,可以一起關注一下。中文打印出來的是原始數據里邊的,英文是數據經過處理的。
很明顯可以看到返回的英文結果跟原始數據對不上。這里的處理也是比較簡單,如果你有更好的方案評論區見
處理方式在獲取數據庫字段中文注釋之前把對應的索引保存到$needkey
然后重新定義一個變量fanal,讓fanal的索引等于needkey的v,而對應的值就是result[needkey的k]

四、總結
這樣一個翻譯接口的使用就完成了,項目截圖就不給大家展示了哈!
把多次翻譯改為一次翻譯,提升翻譯速度,畢竟是請求別人的東西,肯定沒有我們自己重組數據快。
?
堅持學習、堅持寫博、堅持分享是咔咔從業以來一直所秉持的信念。希望在諾大互聯網中咔咔的文章能帶給你一絲絲幫助。
?