c# – 如何使用ASP .NET MVC中的Resources和CultureInfo更改网站
发布时间:2020-12-16 01:55:06 所属栏目:百科 来源:网络整理
导读:我想为每种语言支持几个资源文件,如下所示: NavigationMenu.en-US.resxNavigationMenu.ru-RU.resxNavigationMenu.uk-UA.resx 文件位于MySolution / Resources / NavigationMenu文件夹中. 我有行动设置如下的CurrentCulture和CurrentUICulture public Action
我想为每种语言支持几个资源文件,如下所示:
NavigationMenu.en-US.resx NavigationMenu.ru-RU.resx NavigationMenu.uk-UA.resx 文件位于MySolution / Resources / NavigationMenu文件夹中. 我有行动设置如下的CurrentCulture和CurrentUICulture public ActionResult SetLanguage(string lang) { try { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang); Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(lang); return Redirect(Request.UrlReferrer.AbsoluteUri); } catch(Exception) { return RedirectToAction("Index"); } } lang参数值是uk-UA,ru-RU或en-US,具体取决于我单击视图中的链接.我也有web config全球化定义部分: <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="ru-RU" uiCulture="ru-RU" /> 当我的应用程序启动时,我按照预期使用俄语,但当我尝试将SetLanguage操作的语言更改为英语时,我的视图中没有语言更改. NavigationMenu.SomeProperty仍然是俄罗斯人.我错过了什么? 解决方法
您正在更新当前线程的文化.
大多数网站都支持本地化,将其作为其URL的一部分(在所有页面中).使用MVC,您可以通过使用动作过滤器处理文化来实现此方法. This answer有一个很好的解决方案. 除此之外,您需要通过将文化持久化到会话或cookie,然后在每个请求上更新线程的文化,再次通过实现动作过滤器,或在包含请求上下文的应用程序事件期间,来实现这一点,比如AquireRequestState. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |