2013-01-10 39 views
0

我在使用C#的ASP.Net中有一個應用程序。 在aspx文件母版我有3種語言3個圖像按鈕:英語,法語,羅馬尼亞語:如何使用ASP.Net中的資源文件從masterpage更改應用程序的語言

<asp:ImageButton ID="ImgRo" ImageUrl="~/Images/Romania Flag.png" runat="server" 
       Height="25px" ToolTip="RO" style="border-color:black; 
       background-color:black" OnClick="ImgRo_CLick"/>| 
<asp:ImageButton ID="ImgEn" ImageUrl="~/Images/United States Flag.png" runat="server" 
       Height="25px" ToolTip="EN" style="border-color:black; 
       background-color:black" OnClick="ImgEn_CLick"/>| 
<asp:ImageButton ID="ImgFr" ImageUrl="~/Images/France Flag.png" runat="server" 
       Height="25px" ToolTip="FR" style="border-color:black; 
       background-color:black" OnClick="ImgFr_CLick"/>| 

當我點擊每個我有要事,保存所選語言會話之一:

protected void ImgRo_CLick(object sender, EventArgs e) 
{ 
    SaveLanguage("Ro"); 
} 
protected void ImgEn_CLick(object sender, EventArgs e) 
{ 
    SaveLanguage("En"); 
} 
protected void ImgFr_CLick(object sender, EventArgs e) 
{ 
    SaveLanguage("fr-Fr"); 
} 

protected void SaveLanguage(string language) 
{ 
    Session[AppDefs.LANGUAGE] = language; 
    Thread.CurrentThread.CurrentCulture = new CultureInfo(language); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 
} 

public string GetLanguage() 
{ 

    if (Session[AppDefs.LANGUAGE] != null) 
    { 
     return Session[AppDefs.LANGUAGE].ToString(); 
    } 
    else 
    { 
     return "en"; 
    } 
} 

在主頁面中,我打開登錄頁面,然後打開其他頁面。當我從母版頁選擇時,如何更改所有頁面的UICulture?

我嘗試在登錄頁上preinit事件這一點,但不工作:

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    UICulture = Master.GetLanguage();//"fr-FR" 
} 

感謝

回答

0

在會話變量中存儲的區域性名稱是一個良好的開端,但你必須改變CurrentThread中針對每個請求的線程文化。試試下面的代碼在PreInit:

var language = Master.GetLanguage(); 
Thread.CurrentThread.CurrentCulture = new CultureInfo(language); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 
+0

的問題是,應用程序就會首先在登錄頁面 - preinit事件,然後它去「ImgFr_CLick」按鈕事件 – user1577242

+0

您不能設置的UICulture一個頁面,只是爲一個頁面的請求。此設置不會在請求之間持續。您必須在每個新請求中刷新它。此刷新的首選位置是頁面的PreInit事件。如果您的頁面和您的登錄頁面具有可本地化的文本,則兩者都需要帶有我提供的代碼的PreInit。 –

相關問題