使用URL方法更改CurrentCulture的最佳位置?

时间:2014-07-10 19:12:37

标签: c# asp.net-mvc localization globalization

我想要完成的是让用户通过Web应用程序中的几个标志来更改它。放置代码让用户更改当前线程的最佳位置在哪里?以及实现代码的最佳方法?

这是我到目前为止所做的。

我有一个本地化的网站。我选择让URL路由指定如下语言:

http://localhost:59293/es/Reports/Performance
http://localhost:59293/en/Reports/Performance

正如你所看到的那样"我们"和" es"是UI语言。我遵循路线+过滤策略:

  public class InternationalizationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var language = (string)filterContext.RouteData.Values["language"] ?? "en";
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}", language));
    }
}

然后我在Global.Asax中注册此Action Filter,如下所示:

        protected void Application_Start()
    {

        AreaRegistration.RegisterAllAreas();
        GlobalFilters.Filters.Add(new InternationalizationAttribute());
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        //Creo los mappings de entidades.
        AutoMapperHelper.Configure();

    }

现在路线:

     routes.MapRoute(
        name: "DefaultLocalizedLanguage",
        url: "{language}/{controller}/{action}/{id}",
        defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional, language = "en" });

到目前为止一切顺利。如果我将我的网址更改为指定的语言,请更改网址" es"到" en"我可以用这些语言看到我的应用程序。

现在如何实现Thread cultureUI的更改?

1 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我 - 这个变化不是链接到正确的网址吗?

所以你链接到(pseudo)@ String.Join(" es",Request.Url.Segments.Skip(1))??

此外,您可能希望语言是可选的,然后使用请求接受语言进行后备。

以前我也使用referrer来保持用户正确的语言环境。