2009-08-25 6 views
1

現在、サイトの現在の2つの言語としてen-GBとzh-HK言語を実行しているASP.NET 2.0 Webソリューションに取り組んでいます。その他は後で追加されます。ASP.NET 2.0で言語が自動的に切り替わるのはなぜですか?

要件の1つは、ユーザーが別の言語に表示された言語を上書きすることを選択できることです。したがって、香港のユーザーは英語でサイトを閲覧でき、逆も同様です。

私の2つのリソースファイルは

  • Resources.resxある(英語 - デフォルトの翻訳)

サイト(中国語)

  • Resources.zh-HK.resxは、このロジックを実行します

    1. ロードユーザの詳細
    2. チェックユーザーが優先言語をオーバーライドした場合
    3. これらがある場合は、Thread.CurrentThread.CurrentUICultureをこの言語に設定します。
    4. これらの機能がない場合は、ブラウザのデフォルトを使用します。

    これは、次のコードで実装されています

    //This method is written in a base page, which all pages in the site derive from 
    protected override void InitializeCulture() 
    { 
        User user = /*Load custom user object...*/; 
        string threadLanguage = Thread.CurrentThread.CurrentUICulture.IetfLanguageTag; 
    
        //If the browser is using a different language, 
        //but the has chosen a preferred language, 
        //change the CurrentUICulture over. 
        if (!threadLanguage.Equals(user.Language, StringComparison.OrdinalIgnoreCase)) 
        { 
         CultureInfo userLanguageCulture = CultureInfo.CreateSpecificCulture(user.Language); 
         Thread.CurrentThread.CurrentUICulture = userLanguageCulture; 
        } 
    
        base.InitializeCulture(); 
    } 
    

    私は、いくつかの非常に非常に奇妙な理由

    <globalization uiCulture="auto"/> 
    

    で自動的uiCultureをピックアップしてweb.configファイルをも構成していますいくつかのユーザー(en-GBユーザーでさえ)は、zh-HK上で何らかの理由で - 時にはページ間で言語が切り替わっていることを発見しています!私はこれらのページにいくつかのデバッグコードを追加しました。これらのコードは今後の情報を明らかにするはずです。これまでに明らかになったことは、必ずしもユーザーがzh-HKからではなく、一部がzh-CNまたはzh-TWからであることです。これは役に立つかもしれませんが、en-GBユーザーはzh-HKを見ているので、それは単なる赤ちゃんだと思います。

    私が気づいたことは、ページの内容(IntializeCulture()メソッドが存在するベースページを継承しているもの)で切り替わることです。私が作成したカスタムユーザーコントロールでは、この問題は発生せず、ユーザーが設定した正しい言語で表示されます。したがって、ページには英語と中国語の両方のコンテンツの組み合わせがあります - eek!

    これを正しくコーディングしているかどうか、または要件に近づく別の方法は誰にでも伝えられます。事前に

    おかげで、

    ドミニク

    P.S.これは断続的な問題であり、永続的な問題ではありません。この問題を再現する共通の行動はないようです。それはちょうど起こる。

    P.P.ここで、Sは行動に問題の画像です:


    Web page showing Chinese/English problem更新9月23日09:

    Page.Cultureにそれを変更しようとした後、私はまだ多くの断続的な問題が生じています。

    私は、これはおそらく発生する可能性が理由で、アイデアのカップルを持っていますが、私の「仮説」を正当化することができません:

    • 私たちが実行しているだけASPNET_WP.EXE意味、IIS 5.0分離モードを使用しているのとIISインスタンスごとにw3wp.exeはありません。
    • Reporting Servicesもサーバー上で実行され、香港向けレポートが生成されます。
    • サイトの負荷が高いときにフォルトが頻繁に発生します。大きなレポートが生成されたため、フォールトが頻繁に発生します。

    それ以外に、私は他に何が問題を引き起こす可能性があるのか​​分かりません。別のスクリーンショットを表示しますが、問題は同じで、前のスクリーンショットと同じ場所に表示されました。

    更新9月25日09:

    私たちは、私はそれを解決しているかもしれないと思います。

    <globalization uiCulture="auto" culture="auto"/> 
    

    最初のテストの後、それを上げるためにまだ持っている、ことを除去した後:私たちのWeb.configファイルでは、次のように構成されたタグがあります!

    更新10月13日09:

    問題は、10月9日

    :-(再び更新26を上げています

    サイトの他のユーザーが自分の好みの言語を変更した場合と思われ、それは他のユーザーの言語切り替えがサイトの他のユーザーに影響を与えることがあります。

  • 答えて

    0

    私はついに、この問題がなぜ発生したのか、長い間、

    このサイトは、top、middle、bottomの3つの.NETフレームをホストするframeset.aspとして開始されました。私が気づいたのは、.NETは3つのセッションを生成したため、すべての変更が1つのフレームにしか影響しなかったということです。

    ところで、なぜページの一部だけが機能しているのか完全には説明できませんが、奇妙なRepsonseのいくつかの問題についてはかなりの問題が解決されています。

    要約すると、frameset.aspにframeset.aspxが追加されました。frameset.aspxはすべてのフレームに対して単一のCookie /セッションIDを生成します。

    0

    Page.CultureではなくThreadを使用しますか?

    +0

    私はスレッドであると思っていました。スレッドがリソースによって異なる言語を区別するために使用されているからです。 –

    +0

    page.cultureもスレッドのカルチャを変更する必要があります。 – wefwfwefwe

    +0

    Page.CultureとPage.UICultureは実際にスレッドのプロパティをラップするだけです。文字列をCultureInfoに変換し、ブラウザで指定されたカルチャに "auto"を変換して処理します。 – stevemegson

    関連する問題