2011-04-06 14 views
4

.aspxページのカルチャを変更できません。予想通り.aspxページのカルチャを変更できません

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="VideoPlayerPrototype.Index" Culture="ur-PK" UICulture="ur-PK" %> 

すべてが動作します。私が先頭にページディレクティブを使用して文化を指定

私がしたいのは、ユーザーがリンクをクリックしたときにローカライゼーションを変更できることです。

リンク:

<asp:ImageButton ID="lang_ur-PK" 
          ImageUrl="~/content/image/flag-of-pakistan.png" 
          runat="server" 
          CssClass="language" 
          Height="64px" 
          Width="64px" 
          OnClick="setLanguage" /> 

setLanguage方法:このコードを呼び出す

 protected void setLanguage(Object sender, EventArgs e) 
     { 
      Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ur-PK"); 
      Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ur-PK"); 
      Response.Redirect(Request.Path); 
     } 

だけでページをリロードし、正しい言語をロードしません。

私はApp_LocalResourcesとApp_GlobalResourcesに保存された.resxファイルを持っている:

Index.aspx.resx、Index.aspx.en.resx、Index.aspx.ur-PK.resx、Index.aspx.ur.resxを

<asp:Label id="lblInfoWelcomeMsg" runat="server" 
          Text="<%$ Resources:LocalizedText, Summary_Info_WelcomeMsg %>"></asp:Label>  

が応答リダイレクトを行うことで、あなた

答えて

7

あなたが背後にあるコード内でこのメソッドを追加する必要があります。

protected override void InitializeCulture() 
    { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ur-PK"); 
     System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ur-PK"); 
     base.InitializeCulture(); 
    } 

あなたがBasePageクラスを作成し、そこにそれを追加してからBasePageは、各ページに継承できることができればそれは良いだろう。

+0

これは、[msdnページ](http://msdn.microsoft.com/en-us/library/bz9tc508.aspx)で、これを行う方法と、投稿データを使用する際の問題点について説明しています –

0

をありがとう、あなたは新しいスレッドを起動します。ここではなど

は、ローカライズされなければならない制御の一例です。あなたが望む文化を取り、それをセッションに保存してから、ページを読み込み、カルチャーをセッションの値に設定します。

+0

Iとにかくその本を読んでいた。彼らはresponse.redirectをまったく使用せず、そのexamplsが動作します(私はその本を信じることができます)。 Response.redirectは、選択したカルチャをプロファイルオブジェクトに格納しようとしたwheinを追加したものです。 –

1

Page_PreInitでこれを行う必要があるのは、ローカライズがそのイベントでのみ変更できるためです。あなたはロケールを変更どこでも他に、のみ(ごimageButton_Clickにフラグを設定)し、その後フラグに基づいてPage_PreInit変化ロケールページの宣言型は、それを上書きしますが、あなたはITIN Page_PreInit

を変更することができることを

注意値。

+0

返信いただきありがとうございます。私はこれを1分で行こうと思います。 –

+3

これは間違っています - ページのライフサイクルの早い段階で文化を設定する必要があります。これは通常、InitializeCultureメソッドで行われます。 PreRenderは、ページライフサイクルの遅すぎるところで使用されています。おそらくPreInitと言っていると思います。 – Joe

+0

@Joe、申し訳ありませんが、私はPreInitを意味しています。ご検討いただきありがとうございます。私は主な答えを編集しました。 –

1

Clickハンドラは、現在のリクエストのスレッドのカルチャを変更するだけです。これは、Response.Redirectの後にページが更新されると、忘れ去られてしまいます。

新しいカルチャーをどこかに残しておき、その後の各リクエストの始めに(例:Page.InitializeCultureに)カルチャーを設定する必要があります。これを維持する一般的な場所は次のとおりです。

  • サーバー上のデータベース。

  • レスポンスとともにクライアントに送信されたクッキー。あなたがリダイレクトするURLに

  • (例えばクエリ文字列で - ?たとえば、LANG = UR-PK)

  • セッション(ただし、セッションの有効期限が切れた場合、それは忘れられるでしょう)

+0

完璧です。いつものように.NETでほぼ同じことをする方法は複数あります。私はセッションが自分の要求に最も適していると思います。ありがとうございました –

関連する問題