asp.net MVC3, webform和Unity 2實現的多語言方案

來源:互聯網
上載者:User

半年多沒有寫博了。今天稍微寫點。今天寫的這些東西還是在今年四到六月的時候在美國工作時獲得的一點東西。公司派過去的拿工作簽證在那裡工作。客戶是美國運通。項目是他們的一個叫Serve的電子錢包服務平台。當時主要是設計並實現MVC 3的多語言方案。這些技術方案都有現成的。比如msdn上就有連結。那篇英文博文用了不同的視圖來實現多語言。在客戶這裡他們的需求和那篇博文的情況不一樣。客戶這裡的需求是希望controller和view都有語言版本,model就在多語言之間共用。他們希望在同一套編譯出的程式,只需要改一下web.config,就能切換語言,其介面,和商務邏輯也跟著變了。同時技術上的要求也和那篇博文不一樣,還需要利用Unity 2來實現對不同的商務邏輯和controller,view的訪問;另外他們這裡的系統挺龐大,舊的webform頁面也很多,這次只把一部分頁面轉換成MVC技術,所以我們也得為webform準備解決方案。最開始的時候是先熟悉一下環境,做一些技術預研製。我是工作快20年的人了,很快進入了角色。

  開始做了一個webform的多語言,這是成熟技術了。沒啥好說的。我們用的都是全域資源。類似這樣的代碼就會有很多:<title><asp:Literal Text='<% $ Resources: Glossary, DefaultPageTitle %>' runat="server"></asp:Literal></title>,還試著即時換介面。這次在那裡學到了一個以前沒有瞭解的技術,就是ExpressionBuilder,這個技術可以讓Page請求處理過程中動態地解析所需要的資源。如過不用ExpressionBuilder,就只能繼承所有的常用的webform伺服器端控制項,在新的子類裡面加上一個資源名屬性,只要這個屬性的值被設定上,就可以去相關全域資源裡取得相應資源。客戶這裡本來就是已經把所有webform的伺服器端控制項全都繼承了,寫了新類。所以用第二種方法也是可行的。實際也是這麼做的。

  至於MVC。我們想出來了一個解決方案。即在Global.asax.cs裡面應用啟動的時候,建立Unity 容器,Unity配置是只需要將那些controller所在的名稱空間寫在Unity設定檔裡面即可。另外需要繼承DefaultControllerFactory類。這是預設的controller建立的類。我們需要改寫該類。當我們需要將某個controller執行個體化的時候,Unity容器會自動去這些名稱空間找到符合該名字的controller類並返回一個該類的執行個體。這裡有一個問題,就是多個語言的controller是同樣的名字的,這會讓Unity報錯的。所以我們得覆蓋掉DefaultControllerFactory類的GetControllerType方法。當判斷到當前線程的culture是什麼的時候,就知道應該取哪個controller了。只需要取得相應controller的Type, 然後返回就可以了。剩下的事情就都交給Unity來實現就可以了。

  儘管實現了根據culture來選擇controller, 該controller對應的view還需要進行設定。如果沒有進行設定,其預設的view還是英語的。需要設定其對應語言的view的path.如中文的view, 動態地取得viewengine, 將viewengine的viewpath改成中文的viewpath.這樣的話,就可以有若干個區分開的view, 每一個對應一種語言,它們可以有不同的布局,不同的欄位。

  View所綁定的model是一個多個語言群組合起來的。它有美國特有的欄位,也有中國特有的欄位。當用於美國時,中國特有的欄位就空著。用於中國時,美國的那些特殊欄位就空著。model每個欄位的顯示label是用自訂的attribute實現的,這些attribute可以從全域資源檔裡取出字串。還有做資料驗證的正則attribute,美國的資料驗證和中國的幾不一樣,例如郵編,美國可以是5位或者9位,而中國是6位。其對應的正則也是不同的。這個正則attribute裡可以根據當前線程的culture來取得正確的Regex。從而實現對美國和中國的不同資料驗證。

  以上都只是一些思想。代碼就不貼了。其實我手頭也沒有。全都在客戶那裡。這是商業代碼。不可能拿出來的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.