2011-12-27 20 views
1

私のドロップダウンリストにはen-NZ、en-USなどの形式の値を持つ言語のリストがありますが、そのページはポストバック時に言語を変更しません。誰かが自分のコードを見て、自分のページの言語を変更するのに間違っていることを教えてくださいポストバックで言語が変更されないのはなぜですか?

そして、私のlbllanguage.Textが2番目のポストバックに変わるので、ChangeLanguage_Clickイベントを初めて変更することになっています。

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    string Culture = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture; 
    if (ddlChangeLanguage.Items.FindByValue(Culture) != null) 
    { 
     ddlChangeLanguage.SelectedValue = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture; 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     List<CultureInfo> languages = CultureInfo.GetCultures(CultureTypes.SpecificCultures).OrderBy(x => x.Name).ToList(); 

     SortedDictionary<string, string> sortedLanguages = new SortedDictionary<string, string>(); 

     foreach (CultureInfo language in languages) 
     { 
      RegionInfo regionInfo = new RegionInfo(language.Name); 
      if (!sortedLanguages.ContainsKey(regionInfo.EnglishName)) 
      { 
       sortedLanguages.Add(regionInfo.EnglishName, language.Name); 
      } 
     } 

     foreach (KeyValuePair<string, string> language in sortedLanguages) 
     { 
      ddlChangeLanguage.Items.Add(new ListItem { Value = language.Value, Text = language.Key }); 
     } 
     ddlChangeLanguage.SelectedValue = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture; 
    } 
    lbllanguage.Text = this.UICulture; 

} 

protected void ChangeLanguage_Click(object sender, EventArgs e) 
{ 
    (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture = ddlChangeLanguage.SelectedValue; 
} 

と私のメインページは

public class BasePage : System.Web.UI.Page 
{ 
    public BasePage() 
    { 
    } 

    protected override void InitializeCulture() 
    {    
     this.Culture = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture; 
     this.UICulture = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture; 
    } 
} 

答えて

0

のロジックを変更してみてくださいを継承し、私のBasePageクラス:それは

メインページをクリックしますPage_PreRenderをDropDownList.SelectedIndexChangedのハンドラに追加します。

+0

私の本当の問題で現時点ではページの言語を変更しようとしています。ポストバック時にProfiles Preferencesプロパティを自動的に選択するには、Page_PreRenderイベントが必要です。ページの言語を変更するための変更はありません。page_loadの – ONYX

+0

は、HttpContext.Current.Profileが予期したものを保持していますか? – ivowiblo

+0

これは、Pre_RenderでddlChangeLanguage.SelectedValueを選択しているためです。 – ONYX

1

設定あまりにも現在のスレッド:あなたが起こるために、翻訳のためのリソースファイルまたはサテライトアセンブリであなたの文字列を格納する必要が

var culture = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture; 
Thread.CurrentThread.CurrentCulture = culture; 
Thread.CurrentThread.CurrentUICulture = culture; 
+0

私はそれを試してみました。Thread.CurrentThread.CurrentCulture = new CultureInfo(culture)私のWeb.configで何かが見当たりません私はこれを理解していません – ONYX

+0

ページとスレッドのCurrentCultureとCurrentUICultureを変更しましたか? – ivowiblo

+0

私は文化とUICultureを変更しましたが、英語のテキストは他の言語に変更されませんので、 "Hello World"というテキストが表示されても、指定された言語ではなく "Hello World"と表示されます – ONYX

関連する問題