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

c# – 使用ASP.NET MVC的Spark全球化

发布时间:2020-12-15 21:12:24 所属栏目:百科 来源:网络整理
导读:我正在使用spark viewengine,asp.net mvc和.resx文件. 我想通过我自定义的SessionModel(Session)设置一种语言,它通过Castle.Windsor注册,并且具有Culture的字符串属性,可以由用户设置… 我需要当前语言坚持每一个视图,而不必经常设置当前的UICulture. 在每个
我正在使用spark viewengine,asp.net mvc和.resx文件.

我想通过我自定义的SessionModel(Session)设置一种语言,它通过Castle.Windsor注册,并且具有Culture的字符串属性,可以由用户设置…

我需要当前语言坚持每一个视图,而不必经常设置当前的UICulture.

在每个Controller Action中不必每次都执行此操作:

public SessionModel SessionModel { get; set; }

    public ActionResult Index()
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SessionModel.Culture);
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
    }

这样做的问题是,如果我进入另一个页面,当前的文化将翻转回默认语言.

在火花视图中我只是打电话,获取当前的文化:

${SR.Home}

SR.resx包含Home的公共条目.

有没有人知道如何做到这一点,我应该用ActionFilter吗?

解决方法

动作过滤器似乎是一个好主意:

public class SetCultureActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        CultureInfo culture = FetchCultureFromContext(filterContext);
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
        base.OnActionExecuting(filterContext);
    }

    private CultureInfo FetchCultureFromContext(ActionExecutingContext filterContext)
    {
        throw new NotImplementedException();
    }
}

然后使用此属性装饰您的基本控制器.

(编辑:李大同)

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

    推荐文章
      热点阅读