Loachs-代碼分析之--多語言方案

本以爲多語言很難實現,現在使用了Nvelocity之後,發現其實很容易就解決了。
告訴我一個道理:對於一個你不知道怎麼弄的東西,不要僅思考,動手開始操作你知道的東西
不經意之間,你本以爲很難的東西,結果就輕而易舉的搞定了

我將多語言的變量使用大寫來定義,這個參考了 Zencart程序
語言包的格式,參考了另一個程序,採用XML的格式
起初定的語言包的定義是
<item key="" value=""></item>
這樣定義有一個缺點 就是不能夠引入 html的格式,這樣就不能實現圖片的多語言
如果非要使用這個,就需要將字符轉爲Unicode字符,這樣的話可觀性就降低了
所以後來 看了另一套程序發現
格式不應該這樣定義
改爲下面的格式
 <item key="">
    <value>html字符​</value>
 <item>
這樣的話僅僅 需要多HTML字符做一些轉義的工作就可以了
保證了一定的可讀性。比較靠譜

問題:頁面多語言是怎麼實現的?

第一步:當頁面第一次加載的時候,頁面中會創建一個Cookie,這個cookie會讀取默認的語言包
並加載默認的語言,從而生成HTml的代碼,響應到客戶端,此時服務端的工作就完成了

第二步:當HTML代碼到達客戶端之後,就是js腳本的天下了,此時頁面會加載完畢,將會執行一個函數
從響應的Cookie中獲得語言的名字並 賦值 到選擇框裏面。

第三步:切換語言的過程
切換語言的過程是從客戶端發起的發起的,通過select 的change函數,先獲得當前的語言cookie選項
然後刪除cookie,在創建一個新的cookie,並寫入到當前值。此時使用js重寫刷新頁面。
至此客戶端腳本的工作就完成了

第四步:當新的請求到達服務端之後,會檢查請求中cookie所帶的語言cookie值,此時就又到了第一個過程
如果檢查到cookie之是空的 就使用默認的語言值。如果cookie之不爲空,就會獲得當前的cookie值
重新加載語言包,生成新的HTML,響應到客戶端去,接下來的過程就可第二個過程一樣了。

表面上看來我們通過js的腳本,來完成了一次 客戶端和服務端的 交互,使用cookie,保存了
交互過程中的狀態信息,window.location.reload(true) 作爲了一次通信的中介
在整個過程當用我們並沒有用到ASP.NET頁面的視圖,也沒有用到所謂的控件
就是請求和響應,讓ASP.NET迴歸到了最本質的狀態。完全站在請求與響應的角度上
來處理Web的請求
知道了這一次點,那麼查詢字符串,隱藏字段和表單信息 等等 這些的使用都是一樣的
只不過方式不同而已。所以當脫離的ASP.Net所有的頁面和控件的使用
請求和響應就變得非常的簡單了,而且也非常的靈活。
那麼回過頭來我們考慮兩個問題
問題1.加入我現在要和Web端進行通信交互,我在客戶端應該使用什麼來完成呢?
用ajax
問題2.如果我們清楚了上面的這個問題,那麼請問ASP.NET頁面的這種 事件驅動模型
是如何和後端進行通信的呢?簡單一點描述
當你在頁面上點擊一個按鈕時,這個按鈕時如何調用服務端相關的代碼的,這一點擊背後
發什麼故事呢?大家有沒有想過這個問題呢?

發佈了103 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章