言語設定とメッセージボックス

古い話題なので返信つけるのも躊躇ったんだけど、http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1033655&SiteID=7 なんて話題があったようです。
.NET(soft-thread) の Thread.CurrentCulture, Thread.CurrentUICulture を設定すると、Win32 のスレッド(hard-thread) のロケールにも影響を与えるため、Windows のもつ多国語化機能の恩恵をフルに受けることができます。*1
ところが、MessageBox API (System.Windows.Forms.MessageBox) に表示されるボタンの言語は、常にユーザではなく OS の言語設定に依存したボタンキャプションを表示するため、この影響を受けません。
これは、MessageBox API が「そのようにデザインされた API であるため」というところが理由で、オペレーティングシステムとしての実装要件を考慮して必要な措置であった……というのを、古い Win16/Win32 の解説本で読んだ記憶があります。Win16 から Win32 になって追加された MessageBoxEx API では、ユーザのロケールにあったボタンを表示するようになっているので、アプリケーションメッセージを表示するには、こちらの API を利用すると良いでしょう。*2

*1:Microsoft .NET Framework の場合。それ以外の OS/CLR ではどうなっているかは未確認

*2:OpenFileDialog みたいに、.NET にしかないオプションフラグを追加して、MessageBox API と MessageBoxEx API を選べる機能が MessageBox クラスにあるとよかったんですけどね