c# タイトル 実行時に現在のカルチャを変更する方法




asp.net metaタグ (3)

私はここで説明したように "フォールバック"を得ることができませんでした。 私は言語用のグローバルリソースファイルを使用しています。ユーザが選択したカルチャファイルにラベルがない場合、デフォルトのカルチャのラベルに戻されません。 私はフォールバックを実行するためのメソッドを作成しました。 私は文化を一時的に変える良い方法を探していました(ラベルが見つからないとき)、このポストにつまずいたので、私はいくつかのコンテンツと思っていました。

私のユーティリティクラスで:public String getLabelResource(String sLabelID、String sLangCd){

        cLogger oLogger = new cLogger();

        try
        {
            Object sLabel;
            sLabel = HttpContext.GetGlobalResourceObject("{filename}", sLabelID);
            if (sLabel.ToString() == "") //label was not found in selected lang
            {
                //default to US language resource label
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
                sLabel = HttpContext.GetGlobalResourceObject("{filename}", sLabelID);
                //switch global lang back to selected
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(sLangCd);
            }
            return sLabel.ToString();

        }
        catch (Exception ex)
        {
            oLogger.LogWrite("cUtils.cs", "getLabelResource", ex.Message, false);
            return String.Empty;
        }
    }

私は各文化のリソースファイルに従って、実行時に文化を変更する必要があります。

自分のフォームのコントロールの属性を変更する必要があります。これは、.resxファイルを指定した2つの文化

resorces1.aspx.resx // default 
resorces1.aspx.he-IL.resx // hebrew culture 

フォールバックリソースでページを読み込むことも、ページロードでUICulture = "he-IL"UICulture = "he-IL"渡すこともUICulture = "he-IL" 、必要なリソースをうまく読み込むことができます。

問題は、これらの変更を実行時に行う必要があることです。

1 ..ボタンクリックイベントの値を変更した後

    btn_change_Click(....)
    {
        UICulture = "he-IL" ;
    }

それはまだ "en-US"の初期化された値に戻ります

実行時にUICultureに変更をコミットするにはどうすればよいですか?

2 ..もし私が "en-US"を知らないとすれば、どのようにフォールバックリソースファイルを参照できますか?


現在のUIカルチャを変更する:

System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("he-IL");

彼または彼女のIL文化のキャッシュされた読み取り専用のインスタンスを取得します。

System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("he-IL");

実行時に、ASP.NETはCurrentUICultureプロパティの設定に最も適したリソースファイルを使用します。 スレッドのUIカルチャは、ページのUIカルチャに従って設定されます。 たとえば、現在のUIカルチャがスペイン語の場合、ASP.NETはWebResources.es.resxファイルのコンパイル済みバージョンを使用します。 現在のUIカルチャに一致するものがない場合、ASP.NETはリソースフォールバックを使用します。 特定の文化のリソースを検索することから始めます。 それらが利用できない場合、中立的な文化のためのリソースを探します。 これらが見つからない場合、ASP.NETは既定のリソースファイルを読み込みます。 この例では、デフォルトのリソースファイルはWebResource.resxです。


maxは適切な道に私を置いた、私は前に出くわしたことはありませんでしたが、それは私が問題に関するmsdnのドキュメントへのマイナーな調整を行うのに役立ちました:

http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

    string defaultLanguage = Thread.CurrentThread.CurrentUICulture.ToString();                         
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected override void InitializeCulture()
    {
        if (Request.Form["ListBox1"] != null)
        {
            String selectedLanguage = Request.Form["ListBox1"];
            UICulture = selectedLanguage;
            Culture = selectedLanguage;

            Thread.CurrentThread.CurrentCulture = new CultureInfo(selectedLanguage);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
        }
        else
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo(defaultLanguage);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(defaultLanguage);
        }            
        base.InitializeCulture();
    }   

リストボックスには別のカルチャが含まれています。最初のものと選択されたものがデフォルトのカルチャです。これはページロード時に保存されます。







culture