構建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的後台管理系統(30)-本地化(多語言)

來源:互聯網
上載者:User

標籤:style   blog   class   c   code   java   

原文:構建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的後台管理系統(30)-本地化(多語言)

我們的系統有時要擴充到其他國家,或者地區,需要更多的語言環境,微軟提供了一些解決方案,原始我們是用js來控制的,現在不需要了。

我們只要建立簡單的資源檔,通過MVC的路由設定就可以輕鬆的進行語言中的切換。

本節受益於:Asp.net MVC3 進階編程第121頁。大家可以自行百度這本書,這應該是國內第一本中文版的MVC3.0教程

現在從項目入手吧(本節也適合其他MVC程式),建立一個語言項目來放資源檔。

一、建立App.Lang,同時建立BaseRes.resx和BaseRes.en.resx或者其他國語言

分別是中文,英文。並引用System.Web類庫i

二、處理通訊,配置App.Admin web.config,讓這個類生效

在App.Admin中的Core檔案夾添加CultureAwareHttpModule檔案並繼承IHttpModule

using System;using System.Collections.Generic;using System.Globalization;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Web;using System.Web.Routing;namespace App.Admin{    public class CultureAwareHttpModule : IHttpModule    {        private CultureInfo currentCulture;        private CultureInfo currentUICulture;        public void Dispose() { }        public void Init(HttpApplication context)        {            context.BeginRequest += SetCurrentCulture;            context.EndRequest += RecoverCulture;        }        private void SetCurrentCulture(object sender, EventArgs args)        {            currentCulture = Thread.CurrentThread.CurrentCulture;            currentUICulture = Thread.CurrentThread.CurrentUICulture;            HttpContextBase contextWrapper = new HttpContextWrapper(HttpContext.Current);            RouteData routeData = RouteTable.Routes.GetRouteData(contextWrapper);            if (routeData == null)            {                return;            }            object culture;            if (routeData.Values.TryGetValue("lang", out culture))            {                try                {                    Thread.CurrentThread.CurrentCulture = new CultureInfo(culture.ToString());                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture.ToString());                }                catch                { }            }        }        private void RecoverCulture(object sender, EventArgs args)        {            Thread.CurrentThread.CurrentCulture = currentCulture;            Thread.CurrentThread.CurrentUICulture = currentUICulture;        }    }}
CultureAwareHttpModule

這裡必須做個聲明:下面2段第一段支援MVC3,第二段支援MVC4

-----------------------MVC3.0

<system.web>

<httpModules>
<add name="CultureAwareHttpModule" type=" App.Admin.CultureAwareHttpModule,App.Admin"/>
</httpModules>
</system.web>

-----------------------MVC4.0 (VS2012 版本配置以下, VS2010的MVC4版本配置同MVC3.0)

<system.webServer>
<modules>
<add name="CultureAwareHttpModule" type="App.Admin.CultureAwareHttpModule,App.Admin"/>
</modules>

</system.webServer>

紅色部分在system.web節點內,type包含的是命名空間

三、註冊路由

開啟RouteConfig.cs,註冊為

   public static void RegisterRoutes(RouteCollection routes)        {            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");            routes.MapRoute(                "Globalization", // 路由名稱                "{lang}/{controller}/{action}/{id}", // 帶有參數的 URL                new { lang = "zh", controller = "Home", action = "Index", id = UrlParameter.Optional }, // 參數預設值                new { lang = "^[a-zA-Z]{2}(-[a-zA-Z]{2})?$" }    //參數約束            );            routes.MapRoute(                "Default", // 路由名稱                "{controller}/{action}/{id}", // 帶有參數的 URL                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數預設值            );        }

路由執行有先後大家都懂的。可以看出最後我們的訪問會是這樣的

http://localhost:1201/(http://localhost:1201/zh),http://localhost:1201/等

四、將要本地化的項目引用App.Lang

回到Resx檔案,開啟Resx設定代碼為的存取修飾詞為public,並添加如下屬性,可以看出是索引值對應

這裡我們以SysSample的index視圖為例,回到index上修改如下代碼

先引入@using App.Lang;然後修改以下代碼

<div class="mvctool">    <input id="txtQuery" type="text" class="searchText" />    @Html.ToolButton("btnQuery", "icon-search",BaseRes.Query, perm, "Query", true)    @Html.ToolButton("btnCreate", "icon-add", BaseRes.Create, perm, "Create", true)    @Html.ToolButton("btnEdit", "icon-edit", BaseRes.Edit, perm, "Edit", true)    @Html.ToolButton("btnDetails", "icon-details", BaseRes.Details, perm, "Details", true)    @Html.ToolButton("btnDelete", "icon-remove", BaseRes.Delete, perm, "Delete", true)    @Html.ToolButton("btnExport", "icon-export", BaseRes.Export, perm, "Export", true)</div>

其中的BaseRes.Query就是國際化屬性了

預覽一下例子(請注意我的URL地址變化)

 現在你可以本地化您的項目了。最後一個聲明,如果你要擷取當然選中的是什麼語言你必須在頁面引用

 CultureInfo info = Thread.CurrentThread.CurrentCulture;

通過info.Name可以擷取到URL上選擇的zh或en

例: 

src=‘/@info.Name/SysSample/Create‘

結果

src=‘/en/SysSample/Create‘

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.