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: }
コメント