Open棟梁Project - マイクロソフト系技術情報 Wiki
アプリケーションの国際化(多言語化)に利用されるWindows ロケールに対応するカルチャには以下の3種類がある。
カルチャには階層関係があり、基本的に3階層となっている。
既定カルチャ ├ja 日本語 │└ja-JP 日本 │ ├en 英語 │├en-US 米国 │├en-GB 英国 │├en-AU オーストラリア :
例外的に中国語のカルチャは5階層となる。
※ zh, zh-Hans, zh-CHS, zh-Hant, zh-CHTはニュートラルカルチャ
既定カルチャ └zh 中国語 ├zh-Hans 簡体字中国語 │└zh-CHS 簡体字中国語(古いカルチャ名) │ ├zh-CN 中国 │ └zh-SG シンガポール │ └zh-Hant 繁体字中国語 └zh-CHT 繁体字中国語(古いカルチャ名) ├zh-HK 香港 ├zh-MO マカオ └zh-TW 台湾
//CurrentUICultureの取得 System.Globalization.CultureInfo uiCulture = System.Threading.Thread.CurrentThread.CurrentUICulture; //CurrentUICultureの設定 System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
//CurrentCultureの取得 System.Globalization.CultureInfo culture = System.Threading.Thread.CurrentThread.CurrentCulture; //CurrentCultureの設定 System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
//CurrentCultureの取得 ※[[Windows Forms]]限定 System.Globalization.CultureInfo culture = Application.CurrentCulture; //CurrentCultureの設定 ※[[Windows Forms]]限定 Application.CurrentCulture = new System.Globalization.CultureInfo("en-US");
何も設定せずにアプリケーションを実行した際の値は、
それぞれ以下の環境設定が使用される。
地域と言語の設定値によって決定される。
OSの言語バージョンによって決定される。
Webアプリケーション(ASP.NET, ASP.NET AJAX, Webサービス)では
config設定にて動作の定義が可能である。
※ Windowsアプリケーションにconfig設定は存在しない。
web.configのglobalization要素を設定する。
<system.web> <globalization culture="ja-JP" uiCulture="ja-JP"
※ 空文字を設定するとデフォルト値が使用される。
既定カルチャ(Invariant Culture)は定義できない。
culture属性、uiCulture属性に"auto"を定義すると、
クライアントのブラウザの言語設定の値が既定値となる。
<system.web> <globalization culture="auto" uiCulture="auto"
※ クライアントのブラウザの言語設定がされていない(全て削除している)場合、デフォルト値が既定値となる。
※ Request.UserLanguages?プロパティ(string[]型)にてブラウザの言語設定に登録されている言語を全て取得できる。言語設定がされていない場合は、null値となる。
新しく作成されたスレッドのカルチャはデフォルト値となる。
※ web.configの設定は適用されない。
public sub Method1() { System.Threading.Thread th = new System.Threading.Thread(StaticMethod1); th,Start() } public static StaticMethod1() { Debug.WriteLine(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); // → デフォルト値 Debug.WriteLine(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString()); // → デフォルト値 }
public sub Method1() { System.Threading.Thread th = new System.Threading.Thread(StaticMethod1); th.CurrentCulture = System.Threading.Thread.CurrentThread.CurrentCulture; // ← 作成したスレッドにカルチャ値をコピー th.CurrentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture; // ← 作成したスレッドにカルチャ値をコピー th,Start() } public static StaticMethod1() { Debug.WriteLine(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); // → 親カルチャと同じ値 Debug.WriteLine(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString()); // → 親カルチャと同じ値 }
System.Threading.Tasks.Parallel.For(0, 5, i => { Debug.WriteLine(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); // → 別スレッドで実行される場合はデフォルト値 Debug.WriteLine(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString()); // → 別スレッドで実行される場合はデフォルト値 });
System.Globalization.CultureInfo culture = System.Threading.Thread.CurrentThread.CurrentCulture; // ← 本体スレッドのカルチャ値をコピー System.Globalization.CultureInfo uiCulture = System.Threading.Thread.CurrentThread.CurrentUICulture; // ← 本体スレッドのカルチャ値をコピー System.Threading.Tasks.Parallel.For(0, 5, i => { System.Threading.Thread.CurrentThread.CurrentCulture = culture; // ← コピーしたカルチャを設定 System.Threading.Thread.CurrentThread.CurrentUICulture = uiCulture; // ← コピーしたカルチャを設定 Debug.WriteLine(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); // → 本体スレッドと同じカルチャ Debug.WriteLine(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString()); // → 本体スレッドと同じカルチャ });
Tags: :.NET開発