對於有跨國業務的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設定的相應語系就可以完成了。