0

多言語 ASP.NET Web アプリケーションを作成しようとしています。アプリケーションの開始時に Cookie を設定し、その後 InitializeCulture() を呼び出してカルチャを開始します。ページのデータはグローバル リソースに格納され、次のように aspx ファイルに書き込まれます。<%$ Resources:Main,lang %>

実際には機能していますが、まだ問題があります。言語変更ボタンをクリックすると、Cookie とカルチャは変更されますが、ページのコンテンツは変更されません。適切なコンテンツを取得するには、常にページ全体をリロードする必要がありますglobal.resx

PageLoad では、これを呼び出します。

            setLanguageCookie(); //<- TO SET A COOKIE IF NULL
            InitializeCulture();

InitializeCulture() は次のようになります。

        string sprache = "en-US";

        if (Request.Cookies["sprache"] != null)
        { 
            sprache = Request.Cookies["sprache"].Value;
        }

        Thread.CurrentThread.CurrentCulture =
          CultureInfo.GetCultureInfo(sprache);

        Thread.CurrentThread.CurrentUICulture =
          CultureInfo.GetCultureInfo(sprache);

3 つの言語ボタンがあります。コードビハインドは次のようになります。

protected void lang_en_Click(object sender, EventArgs e)
        {
            Request.Cookies["sprache"] = "en-US";
            Session["Language"] = "en";
        }

誰かが私が間違っているところにヒントを与えることができますか? Oそれを行うためのさらに良い方法はありますか??

4

3 に答える 3

0

次のリンクを見ると、プログラムでリソース ファイルの内容を取得する方法が示されますhttp://msdn.microsoft.com/en-us/library/ms227982.aspxただし、コントロールの数が限られている場合にのみ役立ちますリソース ファイルから初期化されます。

于 2012-08-02T08:39:35.563 に答える
0

lang_en_Click イベントはページの読み込み後に処理されるため、CurrentTread.CurrentCulture セットを再度呼び出す必要があります。

protected void lang_en_Click(object sender, EventArgs e)
{
     Request.Cookies["sprache"] = "en-US";     
     Session["Language"] = "en";         
     Thread.CurrentThread.CurrentCulture =   CultureInfo.GetCultureInfo("en-US");   
     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");     
} 

また、lang_en_Click が処理される前に、言語文字列を設定していないかどうかを確認する必要があります。通常、ページの Pre_Render に正しいカルチャ情報を設定します。ただし、以前に文字列を手動で処理した場合、問題が発生する可能性があります。

于 2012-08-02T08:45:24.040 に答える
0

InitializeCulture() は、ページ サイクルの Click イベントの前に呼び出されるため、Cookie の設定が遅すぎます。コントロールの値を取得したい場合は、 InitializeCulture() メソッド内のRequest.Formから読み取ることができます。

たとえば、言語を変更するために mydropdown というドロップダウン リストを使用する場合、Request.Form["mydropdown"] からその値を取得できます。または、設定した例 (各言語のボタンを使用) では、(クライアントの) 非表示フィールド内に言語値を設定し、その値を Form オブジェクトから読み取ることができます。

于 2013-01-14T21:26:24.167 に答える