私は多言語サイトを持っており、各言語は独自のcultureinfoを使用しています。ActionFilterAttributeを使用してculterinfoを設定しようとしましたが、modelbindingの後に起動されます。グローバルasaxBeginRequestも試しましたが、RouteDataはまだ利用できません。
では、CurrentUICultureをmodelbinderに設定すると、必要なcultureinfoも使用されるのでしょうか。
マックス
私は多言語サイトを持っており、各言語は独自のcultureinfoを使用しています。ActionFilterAttributeを使用してculterinfoを設定しようとしましたが、modelbindingの後に起動されます。グローバルasaxBeginRequestも試しましたが、RouteDataはまだ利用できません。
では、CurrentUICultureをmodelbinderに設定すると、必要なcultureinfoも使用されるのでしょうか。
マックス
このすばらしい記事から、オーバーライドできる/必要なものを見つけることができます:ASP.NETMVC拡張性の概要
カスタムMvcRouteHandlerを作成できます。
public class LangRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
if (requestContext.RouteData.Values.ContainsKey("lang"))
{
var culture = new CultureInfo(requestContext.RouteData.Values["lang"].ToString());
if (culture != null)
{
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
}
}
return base.GetHttpHandler(requestContext);
}
}
そして、このルートハンドラーを次のようにルートで使用します。
routes.MapRoute(
name: "Default",
url: "{controller}/{lang}/{action}/{id}",
defaults: new { controller = "Home", lang = "en", action = "Index", id = UrlParameter.Optional }
).RouteHandler = new LangRouteHandler();