微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何使用ASP .NET MVC中的Resources和CultureInfo更改网站语言?

我想为每种语言支持几个资源文件,如下所示:

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐