3

本質的に多言語対応の Web サイトを作成しています。ユーザーがドロップダウンから選択して目的の言語を選択できる機能を提供しています。

今、私の問題はここから始まります(ドロップダウンから言語が選択されたとき)。現在、英語とアラビア語の 2 つの言語を実装しています。

問題は、ユーザーがログイン ページのドロップダウンからアラビア語を選択すると、ページが更新され、ブラウザがすべてのコンテンツをアラビア語でロードすることです。

しかし...

もう一度英語を選択すると、ページは更新されますが、言語の内容は変わりません!!

コードと値 (カルチャ名の値) が正しく適用されていることを確認しました!!

何が間違っていて、どこが間違っているかについての手がかり...

これが私のコードです...

protected override void InitializeCulture()
{
    String selectedLanguage = string.Empty;

    if (Request.Form["ddlLanguage"] != null)
    {
        selectedLanguage = Request.Form["ddlLanguage"];

        CultureInfo ci = new CultureInfo(selectedLanguage);

        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;
    }

    base.InitializeCulture();
}

どんな助けでも素晴らしいでしょう!!

ありがとう

4

2 に答える 2

2

Culture設定はリクエストごとに設定する必要があります。Thread選択が変更されたときにカルチャを一度設定するだけでは十分ではありません。

リクエストごとにユーザーの選択に従ってカルチャを設定するには、いくつかの方法があります。

  1. (たとえば)Page_Initマスター ページのイベントでカルチャを設定します。
  2. コンテンツ ページのカスタム ベース ページ (おそらく ) を作成し、そのクラスのメソッドをMyBasePageオーバーライドします。InitializeCulture次に、すべてのコンテンツ ページを から直接ではなく、クラスから派生させますPage
  3. の適切なイベントにカルチャを設定するためのコードを追加しますGlobal.asax
  4. おそらく、これを処理する方法は他にもいくつか考えられます。

使用する方法に関係なく、ユーザーが選択したカルチャは、スレッドにカルチャを設定するコードで使用できる必要があります。そのため、ユーザーが選択を変更した場合は、その選択を次のリクエストでアクセスできる場所に保存する必要があります。これもいくつかの方法で解決できます。以下にいくつかのオプションを示します。

  1. を使用している場合はProfileProvider、選択内容をユーザーのプロファイルに保存できます。
  2. または、Cookie に保存することもできます。
  3. に保存することもできますが、これは、がリセットされるSessionたびにユーザーが再選択する必要があることを意味します。Session
  4. 他のカスタム方法を使用して選択を保存できます (データベース、ディスク上のファイルなど)。

Global.asaxと を使用してこれを行う方法の詳細な例については、こちらcookieを参照してください

于 2012-09-03T09:15:45.600 に答える