對於有跨國業務的web系統來說,一般都需要提供多語言功能。然而在眾多多語言方案裡,如.net內建的Resource方式,都會在程式開發時增加程式員的額外負擔,不易開發:
1.各種不同的地方實現多語言,如aspx的control綁定,js指令碼,cs代碼,procedure裡的提示資訊等,這些多語言實現方式各不相同,加重了開發難度。
2.在要實現多語言的代碼中都要與擷取語系文字的代碼進行強耦合,不方便擴充和維護。如.net的Resource方式某個label實現多語言:
lblName.Text = Resources.Strings.name;
3.開發和維護程式時,程式員都必須同時開啟source code和多語言資源檔,特別是在多人開發時,共用一個多語言檔案,且對於共用的文字實難處理和同步。
以上這些只是簡單地羅列了一下傳統多語言開發時的困擾,那有什麼方式解決這些問題,輕鬆實現多語言功能呢?
記得有人說過web編程,實際上就是字串處理。
為什麼呢?因為web,實際上就是Request和Response,而Request和Response就是字串。在我們各種程式裡,最終輸出到Browser的都是html格式的字串,因此,只要我們統一在程式最後一步輸出html格式時,能夠識別其中需要進行多語言轉換的文字,將將其替換為當前設定的語言版本的文字就可以了。
在asp.net中,因為有一個Response.Filter的屬性,讓這一切變得很簡單。
什麼是Response.Filter?
簡單地說,就是在經過層層轉換後,最終asp.net要輸出html,在輸出的過程中,是將html放到一個管道(pipeline)裡,然後在管道那頭取出要發往用戶端的html進行Response,asp.net提供Response.Filter屬性,讓你可以對經過的html進行相應的轉換。
因此只要將多語言轉換功能放在這裡,並識別“中文”,將其轉換為user設定的相應語系就可以完成了。