試想下在MVC的前端頁面JS或者html中須要使用多語言,然後端的多語言是維護在資源文件中的,前端若是使用的話須要使用AJAX頻繁的獲取,一個頁面中可能會存在大量的須要語言轉換的地方,頻繁使用AJAX是不靠譜的。html
參照ABP中的方式,能夠使用修改PageBaseType的方式來實現。前端
MVC的Page頁面是繼承自System.Web.Mvc.WebViewPage的,咱們能夠寫個類來繼承自這個類並修改Page的默認繼承便可,在這個類中,咱們增長多語言的方法。web
首先,在Views目錄下新建一個類:MultiPageWebViewPageBase.cs。內容以下:後端
using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Resources; using System.Web; using System.Web.Mvc; using TaskManagement.Infrastructure.Extensions; namespace TaskManagement.UI.Views { public abstract class MultiPageWebViewPageBase : MultiPageWebViewPageBase<dynamic> { } public abstract class MultiPageWebViewPageBase<TModel> : WebViewPage<TModel> { public ResourceManager rm = Resource.Resource.ResourceManager; /// <summary> /// Constructor. /// </summary> protected MultiPageWebViewPageBase() { } /// <summary> /// Gets localized string for given key name and current language. /// </summary> /// <param name="name">Key name</param> /// <returns>Localized string</returns> protected virtual string L(string name) { return rm.GetString(name) ?? name; } /// <summary> /// Gets localized string for given key name and current language with formatting strings. /// </summary> /// <param name="name">Key name</param> /// <param name="args">Format arguments</param> /// <returns>Localized string</returns> protected virtual string L(string name, params object[] args) { return rm.GetString(name, args) ?? name; } /// <summary> /// Gets localized string for given key name and specified culture information. /// </summary> /// <param name="name">Key name</param> /// <param name="culture">culture information</param> /// <returns>Localized string</returns> protected virtual string L(string name, CultureInfo culture) { return rm.GetString(name, culture) ?? name; } /// <summary> /// Gets localized string for given key name and current language with formatting strings. /// </summary> /// <param name="name">Key name</param> /// <param name="culture">culture information</param> /// <param name="args">Format arguments</param> /// <returns>Localized string</returns> protected string L(string name, CultureInfo culture, params object[] args) { return rm.GetString(name, culture, args) ?? name; } } }
至web.config中的ide
<system.web.webPages.razor>
下pages節,將spa
<pages pageBaseType="System.Web.Mvc.WebViewPage">
修改成:code
<pages pageBaseType="TaskManagement.UI.Views.MultiPageWebViewPageBase">
至此,咱們就能夠在前端使用@L("Field_Common_ID")的方式來使用多語言了。固然,在js中也能夠這樣使用:orm
if (confirm("@L("Msg_Common_Confirm")"))htm
一樣的方式,能夠在該MultiPageWebViewPageBase添加多個公用的方法以擴展前端。blog
缺點:這種多語言沒法在單獨的js文件中使用,必須在繼承於MultiPageWebViewPageBase的頁面中使用。