a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 學(xué)院 > 編程設(shè)計 > 正文

ASP.NET MVC實(shí)現(xiàn)功能:通過URL路由實(shí)現(xiàn)對多語言的支持

2020-07-14 13:37:43
字體:
供稿:網(wǎng)友
對于一個需要支持多語言的Web應(yīng)用,一個很常見的使用方式就是通過請求地址來控制界面呈現(xiàn)所基于的語言文化,比如我們在表示請求地址的URL中將 上語言文化代碼(比如en或者en-US)來指導(dǎo)服務(wù)器應(yīng)該采用怎樣的語言來顯示界面的內(nèi)容。對于一個ASP.NET MVC應(yīng)用來說,我們很容易通過URL路由來實(shí)現(xiàn)這樣一個功能。[本文已經(jīng)同步到《How ASP.NET MVC Works?》中]
在 具體介紹實(shí)現(xiàn)之前,我們通過一個簡單的例子談?wù)勛罱K實(shí)現(xiàn)的效果。在通過ASP.NET MVC項目模板創(chuàng)建的空Web應(yīng)用中,我們創(chuàng)建了如下一個HomeController,默認(rèn)的Action方法Index用于呈現(xiàn)一個登錄View。作 為Model的LoginInfo類包含UserName和Password兩個屬性,分別表示登錄輸入的用戶名和密碼。需要注意的是,在兩個屬性上應(yīng)用 了DisplayAttribute并通過資源的方式指定了顯示名稱以實(shí)現(xiàn)對多語言的支持。[原代碼從這里下載]
public class HomeController : Controller
2: {
3: public ActionResult Index()
4: {
5: return View(new LoginInfo());
6: }
7: }
8:
9: public class LoginInfo
10: {
11: [Display(Name ="UserName", ResourceType = typeof(Resources))]
12: public string UserName { get; set; }
13:
14: [Display(Name="Password", ResourceType = typeof(Resources))]
15: [DataType(DataType.Password)]
16: public string Password { get; set; }
17: }
如下所示的Action方法Index對應(yīng)的View的定義,這是一個基于LogInfo的強(qiáng)類型View。
1: @model MvcApp.Models.LoginInfo
2: @using (Html.BeginForm())
3: {
4: @Html.EditorForModel()
5: <input type="submit" value="@MvcApp.Properties.Resources.Login" />
6: <input type="button" value="@MvcApp.Properties.Resources.Cancel" />
7: }
在Global.asax中,我們修改了默認(rèn)添加的URL路由注冊代碼,使請求URL中包含相應(yīng)的語言文化信息({culture})。
1: public class MvcApplication : System.Web.HttpApplication
2: {
3: //其他成員
4: public static void RegisterRoutes(RouteCollection routes)
5: {
6: //其他操作
7: routes.MapRoute(
8: name: "Default",
9: url: "{culture}/{controller}/{action}/{id}",
10: defaults: new { culture="en", controller = "Home", action = "Index", id = UrlParameter.Optional }
11: );
12: }
13: }
我們直接運(yùn)行該程序,并在請求地址中指定不同的Culture(en和zh),界面呈現(xiàn)基于的語言正是我們期望的。
實(shí)際上針對URL路由的本地化可以通過具有如下定義的名為CultureAwareHttpModule的自定義HttpModule來實(shí)現(xiàn)。我們 通過CultureAwareHttpModule注冊了HttpApplication的BeginRequest和EndRequest事件,通過 URL路由系統(tǒng)得到表示語言文化的路由變量culture,并對當(dāng)前線程的Culture和UICulture進(jìn)行了相應(yīng)的設(shè)置和恢復(fù)。
1: public class CultureAwareHttpModule : IHttpModule
2: {
3: private CultureInfo currentCulture;
4: private CultureInfo currentUICulture;
5:
6: public void Dispose(){}
7: public void Init(HttpApplication context)
8: {
9: context.BeginRequest += SetCurrentCulture;
10: context.EndRequest += RecoverCulture;
11: }
12: private void SetCurrentCulture(object sender, EventArgs args)
13: {
14: currentCulture = Thread.CurrentThread.CurrentCulture;
15: currentUICulture = Thread.CurrentThread.CurrentUICulture;
16: HttpContextBase contextWrapper = new HttpContextWrapper(HttpContext.Current);
17: RouteData routeData = RouteTable.Routes.GetRouteData(contextWrapper);
18: object culture;
19: if (routeData.Values.TryGetValue("culture", out culture))
20: {
21:
22: try
23: {
24: Thread.CurrentThread.CurrentCulture = new CultureInfo(culture.ToString());
25: Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture.ToString());
26: }
27: catch
28: { }
29: }
30: }
31: private void RecoverCulture(object sender, EventArgs args)
32: {
33: Thread.CurrentThread.CurrentCulture = currentCulture;
34: Thread.CurrentThread.CurrentUICulture = currentUICulture;
35: }
36: }
我們只需要通過如下配置對CultureAwareHttpModule進(jìn)行注冊即可。
1: <configuration>
2: <system.web>
3: <httpModules>
4: <add name="CultureAwareHttpModule" type="MvcApp.CultureAwareHttpModule, MvcApp"/>
5: </httpModules>
6: ...
7: </configuration>
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品久久一区二区三区 | 国产一区二区三区久久 | 国产成人精品一区二区三区四区 | 久久久久女人精品毛片九一韩国 | 久久网站热最新地址 | 亚洲精久 | 国产91视频一区二区 | 国产成人精品一区二区三区四区 | 亚洲精久 | 欧美区亚洲区 | 午夜视频在线观看网址 | 成人精品一区二区三区中文字幕 | 亚洲国产aⅴ成人精品无吗 91精品国产一区二区 | 国产激情毛片 | 免费看一区二区三区 | 国产一区二区三区免费 | 国产精品久久久久久久久岛 | 日韩www| 91精品国产综合久久精品 | 亚洲一区二区在线视频 | 日韩精品不卡 | 国产精品久久久久久久久久久久久久 | 日本黄色免费网站 | 91麻豆精品一二三区在线 | 欧美激情网站 | 精品国产黄色 | 午夜视频 | 日韩精品久 | 国产精品久久久久久久久动漫 | 毛片网站在线观看 | 日韩精品一区二区三区视频播放 | 亚洲黄色免费观看 | av在线播放免费 | 亚洲91| 天天干人人插 | 精品久久久久久国产 | 精品久久久一区 | 一区在线不卡 | 伊人网在线免费观看 | 国产精品久久久爽爽爽麻豆色哟哟 | 综合激情av |