前面的(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ù)再重複上(s☆ §hàng)面的(de)內(nèi)容。
我們将從(cóng)這(zhè)幾方面進行(xíng)闡述:收集頁面待翻譯字符串;存入δ> Redis待處理(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è)翻譯的(d←♥e)助手函數(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),現(x&↔ià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)的(d♦₽e)這(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)我們緩存的(d¥σe)語言文(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)件(j"★ià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ì)想把字符串繼續留在Re Ω♣dis中還(hái)是(shì)删除掉。不(bù)删除的(de)話(huà),後期還(há≈δ™βi)可(kě)以繼續使用(yòng),可(kě)以通(tōng)過後台定時(shí)任務的(de)'↓方式可(kě)以進行(xíng)翻譯文(wén)×$件(jiàn)的(de)統一(yī)更新(如(rú)果有(yǒu)需要(yào✘≈<)的(de)話(huà)),我們是(shì)翻譯完了(le→ ©)之後就(jiù)删除。
(未完下(xià)節繼續)
蘇公網安備 32059002004131号