【发布时间】:2014-07-10 19:12:36
【问题描述】:
我想要完成的是让用户通过 Web 应用程序中的几个漂亮的标志来更改它。放置代码以让用户更改当前线程的最佳位置在哪里?以及实现代码的最佳方式?
这是我目前所拥有的。
我有一个本地化网站。我选择让 URL 路由指定这样的语言:
http://localhost:59293/es/Reports/Performance
http://localhost:59293/en/Reports/Performance
如您所见,“us”和“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 中注册这个动作过滤器:
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" });
到目前为止一切顺利。如果我将我的 URL 更改为指定的语言,将 URL“es”更改为“en”,我可以在这些语言中看到我的应用程序。
现在如何实现线程文化UI的改变?
【问题讨论】:
-
@m.casey 即使这样,我也在阅读很多问题。但我想知道根据我的情况这是否是正确的方法。
标签: c# asp.net-mvc localization globalization