我試圖做一個頁面3種語言。覆蓋默認語言MVC4 RESX文件
英語,丹麥語,西班牙語。
我使用的語言的resx文件,我做了它工作,所以我現在可以看到,如果我的系統設置爲英語我會英語或丹麥會給丹麥的語言。 但是我試圖實現一個覆蓋功能,所以我可以通過一個按鈕手動更改頁面上的語言我想象它會是3個標誌按鈕來更改語言。不過,我似乎無法重寫語言。而且我遇到了更多的問題,而不僅僅是堅持使用默認設置。
這裏是如何我已經設置了我的一些事情:
我建立了我的路線是這樣的:
routes.MapRoute(
name: "DefaultLocalized",
url: "{language}-{culture}/{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "Index",
language = "da",
culture = "DK",
id = UrlParameter.Optional }
);
routes.MapRoute(
name: "DefaultInternationalized",
url: "{language}-{culture}/{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "Index",
language = "en",
culture = "UK",
id = UrlParameter.Optional
}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
當我嘗試這似乎我不能夠使用最後一個默認路由。 ,當我嘗試重寫我的語言,它是默認設置爲丹麥這樣我就可以看到英文頁面的URL果然讀EN-UK /主頁,但語言依然是我的瀏覽器默認語言。
我試圖做一個過濾器這樣
public class InternationalizationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string language = (string)filterContext.RouteData.Values["language"]; //?? "da";
string culture = (string)filterContext.RouteData.Values["culture"];// ?? "DK";
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
}
我的希望是,這將激活並決定語言,但現在看來,這從來不會。
我在這條道路的resx文件。
View/Languages/
這些名字
Resources.resx
Resources.da-DK.resx
Resources.es-ES.resx
我想知道我要去還是什麼我失蹤。 我的想法是,我可以在
mydomain/Home
在用戶的默認語言本地化進入正常的頁面。 然後在訪問覆蓋的語言:
mydomain/en-UK/Home
mydomain/da-DK/Home
mydomain/es-ES/Home
但似乎工作方式不會。我還沒有補充,所以西班牙語可以工作,因爲我正在考慮首先使用丹麥語和英語。
有人告訴我,我錯過了什麼。或者詢問我是否提供了有關我的問題的足夠細節。
我想根據我的解決辦法來糾正發佈Akh製成。它確實解決了一些事情,現在網站總是出現。但是它總是以我的語言出現,而不是重寫的語言。 以及默認路由,它應該是瀏覽器決定自動將其他頁面指向da-DK網址,而不是停留在那裏,如果頁面自己決定它應該保持標準域url。如果用戶想要覆蓋它應該去da-DK或其他任何人。 還有一個問題,當我嘗試用en-GB覆蓋它時,它仍然顯示爲丹麥語 – Helbo