当前位置: 首页 > 编程语言 > C#

多语言网站:Azure部署的行为与本地主机不同Share

时间:2023-04-10 20:25:16 C#

多语言网站:Azure部署的行为与本地主机不同我已经按照本文(1)和多语言网站(2)的MVC4代码构建了一个ASP.NETMVC5多语言应用程序。在(2)中,它使用了一个“技巧”来解决“我想要用Y语言呈现的完整X.cshtml”问题:它添加了一个后缀ViewName.fr.cshtml,以便视图自动重定向到正确的语言。这是代码,我认为这是与我的问题相关的代码的唯一部分:if(!string.IsNullOrEmpty(partialViewName)){ViewEngineResult结果;结果=base.FindPartialView(controllerContext,string.Format("{0}.{1}",partialViewName,CultureInfo.CurrentUICulture.Name),useCache);if(result.View!=null){返回结果;}searched.AddRange(result.SearchedLocations);结果=base.FindPartialView(controllerContext,string.Format("{0}.{1}",partialViewName,CultureInfo.CurrentUICulture.TwoLetterISOLanguageName),useCache);if(result.View!=null){返回结果;}searched.AddRange(result.SearchedLocations);}returnnewViewEngineResult(searched.Distinct().ToList());}publicoverrideViewEngineResultFindView(ControllerContextcontrollerContext,stringviewName,stringmasterName,booluseCache){搜索列表=newList();if(!string.IsNullOrEmpty(viewName)){ViewEngineResult结果;结果=base.FindView(controllerContext,string.Format("{0}.{1}",viewName,CultureInfo.CurrentUICulture.Name),masterName,useCache);if(result.View!=null){返回结果;}searched.AddRange(result.SearchedLocations);结果=base.FindView(controllerContext,string.Format("{0}.{1}",viewName,CultureInfo.CurrentUICulture.TwoLetterISOLanguageName),masterName,useCache);if(result.View!=null){返回结果;}searched.AddRange(result.SearchedLocations);}returnnewViewEngineResult(searched.Distinct().ToList());问题是:虽然网络在本地主机上运行良好,但将网站部署到Azure时似乎有行为变化(请参阅http://educa03.org)默认语言设置为加泰罗尼亚语(ca-ES)。这很好。您可以在右上角将语言更改为西班牙语("ES"),这是它背后的剃刀代码:@Html.ActionLink("es",ViewContext.RouteData.Values["action"].ToString(),ViewContext.RouteData.Values["controller"].ToString(),new{culture="es"},null)@Html.ActionLink("cat",ViewContext.RouteData.Values["action"].ToString(),ViewContext.RouteData.Values["controller"].ToString(),new{culture="ca-ES"},null)此语言更改适用于除索引(主页)之外的所有页面。就像在这种情况下,由于某种原因它没有搜索index.es.chtml......再次:它在localhost中的行为不像那样,所以我不知道如何调试它。此外,所有其他页面在Azure上也能正常工作。这是路由配置://(一些特定于验证码的路由)routes.IgnoreRoute("{resource}.axd/{*pathInfo}");//不得路由BotDetect请求:routes.IgnoreRoute("{*botdetect}",new{botdetect=@"(.*)BotDetectCaptcha.ashx"});//语言路由:routes.MapRoute("Default","{culture}/{controller}/{action}/{id}",new{culture="ca",controller="Home",//ControllerNameaction="Index",//ActionNameid=UrlParameter.Optional}).RouteHandler=newLocalizedMvc??RouteHandler();所以这就是我解决问题的方法:publicActionResultIndex(){//Index是唯一不响应LocalizedViewEngine的页面,因为它应该...varcurrentCulture=CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;如果(currentCulture!=LocalizationAttribute.DefaultCulture)return.Format("Index.{0}",currentCulture));否则返回视图();那就是:我强制唯一的情况(动作索引)不被重新路由到{View}.{Culture}.cshtml,并强制它在控制器的动作内部这样做。我不喜欢这个解决方案,但至少它有效。由于Azure部署以某种方式处理索引的方式与我的本地主机IIS不同,因此它仅在这种非常特殊的情况下进行了本地化。以上是C#学习教程:多语言网站:Azure部署的行为不同于localhost。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表作品如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: