I18N : CurrentUICultureプロパティに入っている値は?

System.Threading.Thread.CurrentThread.CurrentUICultureプロパティはカレントスレッドのUIのLocaleが何に設定されているかをしめしているが、スレッドが作成された時点ではスレッドが現在持っているLocaleではなくシステムのMUIが持つLocaleの値がもたれているので注意が要る。つまりWindowsのMUI設定で日本語としており、User Localeを英語(米国)としている場合に、アプリケーションを起動すると、Thread.CurrentThread.CurrentUICultureにはja-JPロケーるが設定されており、Thread.CurrentThread.CurrentCultureにはen-USロケールが設定されている。

つまり、何もしなければシステムのMUI設定に.NETのアプリケーションも追従する。(もちろんそのリソースがあればだ)

UIのロケールをMUIのロケールに関係なくUser Locale似合わせるには、各コンポーネントの初期化前にCurrentUICultureの値をCurrentCultureにする。以下がそのコード例。

 1: namespace WindowsFormsMUI
 2: {
 3:  public partial class Form1 : Form
 4:  {
 5:  public Form1() {
 6:  //UIのロケールをUser Localeにあわせるため、
 7:  //CurrentUICultureにスレッドのカレントカルチャを設定する。
 8:  System.Globalization.CultureInfo ci 
 9:  = System.Threading.Thread.CurrentThread.CurrentCulture;
 10:  System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
 11:  InitializeComponent();
 12:  }
 13:  
 14:  private void Form1_Load(object sender, EventArgs e) {
 15:  
 16:  }
 17:  }
 18: }

コメントを残す