我一直在試圖關注發現的博客文章here。我已經添加了一個新的程序集來託管我的資源文件(我使用了一個單獨的程序集,因爲資源可能需要在多個項目之間共享)。我已經添加了以下到我的web.config:無法在MVC中獲得本地化工作4
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="MyResources.Resources"/> <!-- New entry for resources -->
</namespaces>
</pages>
</system.web.webPages.razor>
而且雖然我已經和添加的資源字符串用於測試的幾個文件。現在我似乎遇到的問題是,我無法將資源設置爲默認值以外的任何值。因此,例如,在生成的資源文件設計師有以下幾點:
/// <summary>
/// Looks up a localized string similar to Log in was unsuccessful. Please correct the errors and try again..
/// </summary>
public static string Account_LoginUnsuccessful {
get {
return ResourceManager.GetString("Account_LoginUnsuccessful", resourceCulture);
}
}
如果我在這個方法中設置斷點,resourceCulture
是從來沒有什麼,但空。儘管我已經試過如下:
在Global.asax.ca:
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
var culture = new System.Globalization.CultureInfo("fr");
// Modify current thread's cultures
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture.Name);
} // End of Application_AcquireRequestState
在基地MVC控制器,所有我的其他控制器繼承:現在
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
SetCulture(requestContext.HttpContext.Request);
base.Initialize(requestContext);
}
protected override void ExecuteCore()
{
SetCulture(Request);
base.ExecuteCore();
}
protected override void Execute(System.Web.Routing.RequestContext requestContext)
{
SetCulture(requestContext.HttpContext.Request);
base.Execute(requestContext);
}
protected override IAsyncResult BeginExecute(System.Web.Routing.RequestContext requestContext, AsyncCallback callback, object state)
{
SetCulture(requestContext.HttpContext.Request);
metrics = Metrics.BeginTimer();
return base.BeginExecute(requestContext, callback, state);
}
private void SetCulture(HttpRequestBase Request)
{
string cultureName = "fr";
// Validate culture name
cultureName = CultureHelper.GetImplementedCulture(cultureName); // This is safe
// Modify current thread's cultures
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
}
,我理解設置線程當前的文化應該導致我的資源文件文化發生改變。我似乎無法得到我生活中的這種工作(因此我試圖在十個不同的地點設置這個品種)。
對我在做什麼有什麼建議嗎?
幸運的是,你可以通過使用filterContext.HttpContext.Request – Pbirkoff
感謝哥們獲得請求我把它 – dnxit
發現問題。這不是上面的代碼,這工作正常。問題是我忘了它是在一個過濾器中,所以我不得不將這個屬性應用到我的所有類中。 –