(If you prefer English than Japanese, you can see English article.)
ASP.NET MVC で例外が発生したときに表示されるエラーメッセージをすべて英語にする。
方法
端的にいうと以下の2行を加えるだけで良い。
Global.asax.cs
.... using System.Globalization; .... namespace WebApplication1 { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); // Add CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US"); // Add ....
サンプルエラー画面
今回示すエラーは Twitter 認証を適当に入れて意図的に出したエラーである。
app.UseTwitterAuthentication( consumerKey: "a", consumerSecret: "b");
今回の対処を入れない場合、日本語環境であれば当然エラーメッセージに日本語が混じる。
今回の対応により英語表示にしたエラー画面
CultureInfo.DefaultThreadCurrentCulture, CultureInfo.DefaultThreadCurrentUICulture を設定することにより、エラーメッセージが完全に英語になった。
不完全な対応の紹介
Web.config による対応(不完全)
Web.config をいじるのは作法としては順当である。
.... <system.web> .... <globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" culture="en-US" uiCulture="en-US" /> </system.web> ....
が、実はこれだと微妙~に一部例外のメッセージ部分に日本語が残る場合がある。
CurrentThread をいじる方法(意味がない)
一応参考までに書いておくが、CurrentThread をいじるのは意味がない。スレッドは複数立ち上がるものだから。
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
おわり
CultureInfo.DefaultThreadCurrentCulture, CultureInfo.DefaultThreadCurrentUICulture を設定する方法は ASP.NET MVC 以外の .NET Framework アプリでも通用する方法かと思うので覚えておいて損はない。と思う。
さいごに:なぜ英語にするのか
日本語での技術情報が少ない。すなわち日本語エラーメッセージのググラビリティが低い。これに尽きる。