1

現在、サイトの 2 つの現在の言語として en-GB および zh-HK 言語を実行する ASP.NET 2.0 Web ソリューションに取り組んでいます。その他は後日追加予定です。

要件の 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();
}

また、uiCulture を自動的に取得するように web.config を構成しました。

<globalization uiCulture="auto"/>

いくつかの非常に奇妙な理由で、一部のユーザー (en-GB ユーザーでさえも) は、言語が何の理由もなく zh-HK に切り替わっていることに気付いています。これらのページにいくつかのデバッグ コードを追加しました。これにより、今後さらに多くの情報が明らかになるはずです。これまでに明らかになったのは、ユーザーは必ずしも zh-HK のユーザーではなく、一部のユーザーは zh-CN または zh-TW のユーザーであるということだけです。これは役立つかもしれませんが、en-GB ユーザーは zh-HK を見ているので、これはただのニシンだと思います。

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

これを正しくコーディングしているかどうか、または要件にアプローチする別の方法について、誰でもガイダンスを提供できますか。

前もって感謝します、

ドミニク

PS これは断続的な問題であり、永続的なものではありません。この問題を再現する一般的なアクションはないようです。それはちょうど - 起こります。

PPS これは実際の問題の画像です。

中国語/英語の問題を示す Web ページ


2009 年 9 月 23 日更新:

Page.Culture に変更しようとしても、断続的に問題が発生します。

なぜこれが発生する可能性があるのか​​ についていくつかのアイデアがありますが、私の「仮説」を正当化することはできません。

  • IIS 5.0 分離モードを使用しています。つまり、各 IIS インスタンスの w3wp.exe ではなく、aspnet_wp.exe のみが実行されています。
  • Reporting Services もサーバーで実行され、香港のレポートを生成します。
  • この障害は、サイトの負荷が高いときに、より頻繁に発生します。大量のレポートが生成されるためだと思います。

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

2009 年 9 月 25 日更新:

私たちはそれを解決したかもしれないと思います。Web.config には、次のように構成されたタグがあります。

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

それを取り除いた後、最初のテストの後、それはまだ現れていません!

2009 年 10 月 13 日更新:

問題が再び発生しました:-(

2009 年 10 月 26 日更新:

サイトの別のユーザーが優先言語を変更すると、サイト上の他のすべてのユーザーに影響するようです! 彼らの優先言語は設定されていますが、どういうわけか他の誰かの言語切り替えがサイトの他のユーザーに影響を与えています!

4

2 に答える 2

0

長い間、私はついにこの問題が発生した理由を突き止めました。

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

ある意味では、ページの一部だけが機能していた理由を完全には説明していませんが、私たちが行っていたいくつかの奇妙な Repsonse.Redirects に関するかなりの数の問題が解決されました。

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

于 2010-05-12T09:34:52.700 に答える
0

Thread ではなく、Page.Culture を使用するべきではありませんか?

于 2009-08-25T10:47:09.520 に答える