我想要完成的是让用户通过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的更改?
答案 0 :(得分:0)
如果我错了,请纠正我 - 这个变化不是链接到正确的网址吗?
所以你链接到(pseudo)@ String.Join(" es",Request.Url.Segments.Skip(1))??
此外,您可能希望语言是可选的,然后使用请求接受语言进行后备。
以前我也使用referrer来保持用户正确的语言环境。