我正在使用 spark viewengine、asp.net mvc 和 .resx 文件。

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

我需要当前语言在每个 View 上都保持不变,而不必不断设置当前的 UICulture。

不必每次在每个 Controller 操作中都这样做:

    public SessionModel SessionModel { get; set; }

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

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

在我简单地调用 spark View 上,以获取当前文化:
${SR.Home}

SR.resx 包含主页的公共(public)条目。

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

最佳答案

Action 过滤器似乎是个好主意:

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();
    }
}

然后用这个属性装饰你的基本 Controller 。

关于c# - Spark 全局化与 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4116591/

10-17 01:12