前面的(de)兩篇文(wén)章(zhāng)分(fēn)别介紹£γ 了(le)網站(zhàn)多(duō)語言的(de)使用(yòng)場(chǎng)™♣景和(hé)實現(xiàn)方案,本節就(jiù)将更深入的(de)介紹技(jì)術(shù)細節,如(rú)果沒有"™>(yǒu)看(kàn)過前面文(wén)章(zhāng)的(de),可(kě)以點去(qù)大(•¶ dà)概看(kàn)下(xià),這(zhè)裡(≥'♥₹lǐ)不(bù)再重複上(shàng)面的(de)內λ ∑(nèi)容。
我們将從(cóng)這(zhè)幾方面進行(xíng)闡述:收集頁面待翻譯字符串;存入Redi€∞ ★s待處理(lǐ);編寫第三方翻譯接口;編寫翻譯算(suàn)法;輸出翻•← 譯後的(de)字符串。
首先,如(rú)何收集頁面上(shàng)需要(yào)翻譯的(de)<Ω↔字符串呢(ne)?
用(yòng)過Laravel、Thinkphp等第三方開(kāi)源框架的(de)應該§都(dōu)有(yǒu)印象,系統會(huì)默認提供一(yī)個(gè≠≈©)翻譯的(de)助手函數(shù),正常我們通(tōng)過語言包把內(nèi)容翻←α✘•譯後就(jiù)可(kě)以了(le),我們就(jiù)是(shì)利用 λ≠(yòng)了(le)類似的(de)方法,如(rú)果沒有(yǒu)接觸過上(sh↔∞>àng)面說(shuō)的(de)開(kāi)源框架也(yě)沒關系,接下←∞∏(xià)來(lái)我們會(huì)說(shuō)明(míσ♠₩ng)。我們會(huì)預先定義一(yī)個(gè)頁面方法λ$♦",這(zhè)個(gè)方法是(shì)可(kě)以在view層被執行(xíng),δ✔∏✘現(xiàn)在的(de)架構都(dōu)是(shì)mvc♣"σ"架構,頁面的(de)顯示都(dōu)是(shì)通₹∞(tōng)過view層文(wén)件(jiàn)渲染出來(lái)的(de),比♠α如(rú)view層常用(yòng)的(de)Smart模闆引擎,都(dōu)有(yǒu)很≤₽£ε(hěn)多(duō)的(de)預定義方法,我們可(kě)以參考然後可(kě)以方便σ→∑實現(xiàn)我們需要(yào)的(de)這(zhè)個(gè)功能(néng)。
這(zhè)個(gè)語言方法中我們将會(huì)進行(xíng)一(yī)次封裝,具體♦↑☆(tǐ)邏輯是(shì):首先調用(yòng)系統的(de)默認語言函數(shùαφ),如(rú)果系統語言包沒有(yǒu)定義該語言對(duì)應的(de)≤↓內(nèi)容,則通(tōng)過邏輯判斷進行(xíng)我們接下(xià)來(lái)λ 的(de)邏輯,從(cóng)我們緩存的(de)語言文(wén)件(jiàn)進•π行(xíng)讀(dú)取解析,如(rú)果有(yǒu)≤σ™則直接返回,如(rú)果沒有(yǒu)則通(tōng)過邏輯判斷,執行(xíng)進一(y¥≠☆ī)步的(de)邏輯,調用(yòng)翻譯接口去(qù)翻譯。那(nà)麽這(zhèδ↑)些(xiē)沒有(yǒu)翻譯的(de) ₽"字符串将會(huì)被收集起來(lái),進行(xíng)到✘"™☆(dào)下(xià)一(yī)個(gè)步驟,存入Redis待處理₩✘(lǐ)。
字符串存入Redis,為(wèi)什(shén)麽要(yào)存如(r•¥ú)Redis呢(ne),這(zhè)也(yě)是(shì)基于執行(xí↑∏ng)效率考慮的(de)。其他(tā)方法也(yě)可(kě)以考 >←>慮,比如(rú)存入數(shù)據庫或者存入文(wén)件(jiàn)都(dōu)可(kě)¶¶<以。但(dàn)是(shì)推薦Redis,如®÷$÷(rú)果對(duì)Redis不(bù)熟悉,可(kě)以考慮數 £★♣(shù)據庫。這(zhè)是(shì)為(wèi)調用(yòng)翻譯接γ≈♣口準備的(de),因為(wèi)翻譯接口都(dōu)是(shì)✘<一(yī)條一(yī)條字符串進行(xíng)翻譯的(de),很(hěn)少(¶®♠shǎo)支持批量的(de)。對(duì )每個(gè)字符串收集到(dào)Redis中,還(hái)要(yào)進行(xíng)重✔₽複性判斷,如(rú)果已經存在了(le)則不(bù)再繼續存入,确保唯一(yīβ<)。這(zhè)裡(lǐ)還(hái)有(yǒ♠₹©♦u)個(gè)細節可(kě)以根據自(zì)己的(de) ₹需求進行(xíng)取舍,調用(yòng)接口翻譯之後,你(nǐ)是(shì)想把字©♦÷符串繼續留在Redis中還(hái)是(shì)删除掉。不(bù)删除的(de)話(huà),££•₽後期還(hái)可(kě)以繼續使用(yòng),可(kě)以通(¶<ββtōng)過後台定時(shí)任務的(de)方式可(kě)以進行(xíng)翻譯文(wén)件(j£ iàn)的(de)統一(yī)更新(如(rú)果有(yǒu)需•'✔要(yào)的(de)話(huà)),我們是(sh≈'βΩì)翻譯完了(le)之後就(jiù)删除。
(未完下(xià)節繼續)
蘇公網安備 32059002004131号