前面的(de)文(wén)章(zhāng)提到(dào)了(le)幾種實現(x§•λià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ù)是(s♥ hì)通(tōng)過這(zhè)個(gè)實現(xiàn)的(de)。
我們通(tōng)過自(zì)定義的(de)翻譯助手函數(shù)将頁面→•字符串全部進行(xíng)收集(注意:此處是(s♠ hì)收集,并未直接調用(yòng)接口進行(xíng)翻譯),我們會(huì)把待翻譯的(d×÷÷e)字符串添加到(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)jso ♣εn格式的(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ǐ)這(zhè)樣頁面的(de)內(nèi)容翻譯并沒有(yǒu)同步顯示啊××。其實是(shì)這(zhè)樣的(de),這(zhè)裡(lǐ)處理(lǐ)的≥α↑→(de)是(shì)頁面的(de)翻譯過程,一(yī)旦頁面頁面翻譯好(hǎo)後就(jiù♠>)會(huì)進行(xíng)內(nèi)容緩存,下(xià)次加載會(huφΩì)直接從(cóng)緩存文(wén)件✔δ₽♦(jiàn)中讀(dú)取,不(bù)會(huì)再調用(yòng)接口,所以切換多(du∞¥$ō)語言時(shí)不(bù)會(huì)感知(z"→hī)翻譯的(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)方案,後面我們會(γ×∏ huì)介紹下(xià)實現(xiàn)的(de)技₩±(jì)術(shù)細節。
蘇公網安備 32059002004131号