加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读