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());   // → 本体スレッドと同じカルチャ
    });