ASP.NET 2.0 で言語が自動的に切り替わるのはなぜですか?
-
19-09-2019 - |
質問
私は現在、サイトの 2 つの現在の言語として en-GB 言語と zh-HK 言語を実行する ASP.NET 2.0 Web ソリューションに取り組んでいます。その他は後日追加予定です。
要件の 1 つは、ユーザーが表示言語を別の言語に上書きできることです。したがって、香港のユーザーは英語でサイトを閲覧でき、またその逆も可能です。
私の2つのリソースファイルは次のとおりです
- Resources.resx (英語用 - デフォルトの翻訳)
- Resources.zh-HK.resx (中国語用)
サイトはこのロジックを実行します
- ユーザーの詳細をロードする
- ユーザーが優先言語を上書きしたかどうかを確認する
- 存在する場合は、Thread.CurrentThread.CurrentUICulture をこの言語に設定します。
- まだ使用していない場合は、ブラウザのデフォルトを使用してください。
これは次のコードで実装されます。
//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() メソッドが存在するベース ページから継承するもの) で発生することです。私が作成したカスタム ユーザー コントロールではこの問題は発生せず、ユーザーが構成した正しい言語で表示されます。したがって、ページには英語と中国語の両方のコンテンツが含まれることになります。
これを正しくコーディングしているかどうか、または要件にアプローチする別の方法について誰かがガイダンスを提供できますか。
前もって感謝します、
ドミニク
追伸これは断続的な問題であり、永続的なものではありません。この問題を再現する一般的なアクションはないようです。それはただ起こるのです。
P.P.S これが実際の問題の画像です。
2009 年 9 月 23 日更新:
Page.Culture に変更しようとした後も、さらに断続的な問題が発生します。
なぜこれが起こっているのかについてはいくつかの考えがありますが、私の「仮説」を正当化することはできません。
- IIS 5.0 分離モードを使用しています。つまり、各 IIS インスタンスでは aspnet_wp.exe のみが実行され、w3wp.exe は実行されません。
- Reporting Services もサーバー上で実行されており、香港に関するレポートを生成します。
- サイトに高負荷がかかっている場合、この障害はより頻繁に発生します。これは、大量のレポートが生成されているためだと思われます。
それ以外に、他に何が問題の原因になるのかわかりません。別のスクリーンショットを示しますが、問題は同一であり、前のスクリーンショットが示したのと同じ場所に表示されました。
2009 年 9 月 25 日更新:
私たちなら解決できたかもしれないと思います。Web.config には、次のように構成されたタグがあります。
<globalization uiCulture="auto" culture="auto"/>
それを削除した後、最初のテストを行った後も、まだ問題が発生していません。
2009 年 10 月 13 日更新:
問題が再び発生しました:-(
2009 年 10 月 26 日更新:
サイトの別のユーザーが優先言語を変更すると、サイト上の他のすべてのユーザーに影響が及ぶようです。優先言語が設定されているにもかかわらず、何らかの理由で他の人の言語切り替えがサイトの他のユーザーに影響を及ぼします。
解決 2
長い、長い時間の後、私は最終的に働いています。
トップ、ミドル、ボトム -このサイトは3つの.NETフレームをホスティング、frameset.aspとしてスタート。私が気づいた何を、.NETは3つのセッションを生成し、したがって、すべての変更は、一つのフレームのみに影響を与えたということです。
ように、ページの一部のみが働いた理由、それは完全に説明していないが、それは我々が行っていた奇妙Repsonse.Redirectsのいくつかについて、かなりの数の問題を解決しています。
要するに、frameset.aspは、全てのフレームについて単一のCookie /セッションIDを生成frameset.aspxで再プレーティングした。
他のヒント
は、スレッド、Page.Cultureを使用していないことではないでしょうか?