前面的(de)文(wén)章(zhāng)提到(dào)了(l×≤e)幾種實現(xiàn)網站(zhàn)內(n®♥±èi)容多(duō)語言的(de)方式,分(fēn)析了(le)幾種方案的(de)優缺點↔®∑。如(rú)果沒有(yǒu)看(kàn)過的(de)話(huà),建議↔>¥≈(yì)過去(qù)看(kàn)看(kàn)。
我們根據自(zì)身(shēn)的(de)實際開(kāi)發經驗設計(jì•♥§£)了(le)一(yī)種更優的(de)方案,目前這(zhè)種方案已經實際應用(yòngβ≥₽π)于項目中,效果非常好(hǎo)。
我們的(de)方式是(shì):采用(yòng)多(duō)語言包和(hé)第÷γ ↑三方翻譯接口,然後配合Redis進行(xíng)處理(lǐ),然₽♥↑後将翻譯好(hǎo)的(de)內(nèi)容緩存起來(lái)。這(zhè↓≥±)裡(lǐ)面有(yǒu)很(hěn)多(duō)的(de)細節,我們将逐步展開(kāi)✘$說(shuō)明(míng)。
頁面的(de)內(nèi)容翻譯涉及兩部分(fēn),一(yī)個(gè)是(shì)頁面σ♥☆¶展示的(de)內(nèi)容,一(yī)個(gè)是(shì)js部分÷Ω(fēn)的(de)提示內(nèi)容。做(zuò)過前端的(de)都(dōu)知(zhī☆↓≈♠)道(dào),js頁面提示是(shì)必不(bù)可(kě)少(shǎo)的(de),比'§•α如(rú)常見(jiàn)的(de)表單驗證等;這(zhè)部分(fēn€α≈)提示相(xiàng)對(duì)固定且較少(shǎo),可(↕kě)以直接通(tōng)過語言包實現(xiàn),無需再通(tōng)過翻譯接口自(zì)動λ&≥★翻譯,我們将重點講講頁面內(nèi)容的(de)翻譯™€≤。
翻譯的(de)過程是(shì)頁面的(de)內(nèi)容顯示時(shí)我們先包在β↓<≠一(yī)個(gè)動态函數(shù)中π¶↕,我們此處舉例用(yòng)的(de)是(shì×↑ )一(yī)個(gè)框架Thinkphp(其他(tā)的(de)框架也(yěεε)是(shì)類似),用(yòng)過的(de)小(xiǎo)夥伴都(dōu§§↑♣)知(zhī)道(dào),這(zhè)&σ<個(gè)是(shì)mvc結構的(de),view層在加載時(shí)會(huì)進行(ε↑xíng)動态的(de)渲染,并可(kě)以調用(yòng)定義好(Ω¥π↕hǎo)的(de)助手函數(shù),我們就(jiù)是(shì)通(tōng)過這(z↔©hè)個(gè)實現(xiàn)的(de)。
我們通(tōng)過自(zì)定義的(de)翻譯∏≠←助手函數(shù)将頁面字符串全部進行(xíng)收集(注意:此處是(shì)收集,并未直接調用(γ¶πyòng)接口進行(xíng)翻譯),我們會(huì)把待翻譯的(de)字符串添<"÷加到(dào)Redis中待處理(lǐ),等頁面加載完成後,觸♥™φ發ajax去(qù)執行(xíng)翻譯的(de)進程。當然也(yě)可(kě)以通(tōng)σ¶ 過其他(tā)方式觸發,比如(rú)定時(shí)任務等。一(yī)般的(de)翻譯接口♥©λσ都(dōu)是(shì)一(yī)次隻能(néng)翻譯一(yī)條δπ字符串,頁面上(shàng)這(zhè)麽多(duō)的(de)字符串隻能≤ (néng)輪詢的(de)方式去(qù)執×←行(xíng)。
這(zhè)個(gè)翻譯好(hǎo)的(de)內(nèi)容我們進行(xíng)緩存σ¥,存儲的(de)格式為(wèi)json格式的(de)數™≥(shù)據,可(kě)以按照(zhào)模塊或全局進行(xíng)緩存,具體(tǐ)的(de↑± )可(kě)以根據實際情況自(zì)行(xíng)決定。
有(yǒu)人(rén)可(kě)能(néng)有↓£♥(yǒu)問(wèn)題了(le),你(nǐ)這(z✘hè)樣頁面的(de)內(nèi)容翻譯并沒有(yǒu)同步δ'∞≈顯示啊。其實是(shì)這(zhè)樣的(de),這(zhè)裡(lǐ)處理(lǐ)的(de)是(£φ♦≤shì)頁面的(de)翻譯過程,一(yī)旦頁面頁面翻譯好(hǎo)後就(j±↕♠λiù)會(huì)進行(xíng)內(nèi)容緩存,下(xià)次加載會(huì)直接♠←從(cóng)緩存文(wén)件(jiàn)中讀(dú✔αλ)取,不(bù)會(huì)再調用(yòng)接口,所∏✔∑<以切換多(duō)語言時(shí)不(bù)會(huì)感知(zh±₹÷αī)翻譯的(de)過程。
這(zhè)裡(lǐ)還(hái)可(kě)以擴展,比如(rú)收集頁面'₩π的(de)字符串保存起來(lái),後期可(kě)以随時(shí)更新翻譯,如(Ω♠rú)果翻譯不(bù)準确了(le)還(hái)可(kě)以進行(xíng)人(ré♦♣δn)工(gōng)校(xiào)正等。
這(zhè)是(shì)目前的(de)方案,後面我們會(hφαuì)介紹下(xià)實現(xiàn)的(de)技(jì)術(shù)細節。
蘇公網安備 32059002004131☆€"号