我试图做一个页面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