2012-02-10 32 views
1

我有一個網頁,必須根據用戶選擇以幾種不同的語言顯示。爲此,我爲每個asp.net網頁使用RESX文件。我不想在瀏覽器中使用該語言的自動檢測功能,但我想再次根據用戶選擇設置語言。爲了做到這一點我做了以下內容:動態加載RESX文件不起作用

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es-MX", false); 
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("es-MX", false); 

OR

Page.Culture = "es-MX"; 
Page.UICulture = "es-MX"; 

但無論是那些按預期工作!我在頁面的初始化方法初始化文化,但它將始終顯示默認語言。我正在檢查這些屬性的值以及那些具有正確文化的值,但仍未使用RESX文件呈現。有任何想法嗎?建議?

由於

回答

2

萬一有人用明確定位工作時運行到這個問題,這裏是有許多工作要做:

protected override void InitializeCulture() 
{ 
    Page.Culture = "en-US"; 
    Page.UICulture = "en-US"; 
} 

從net-tutorials.com網站:

由於頁目錄ective只是Page類的一個捷徑,這也可以從CodeBehind完成。但是,我們必須在頁面呈現之前的某個時刻執行此操作,以確保它具有所需的效果。這就是InitializeCulture()方法開始發揮作用的地方,ASP.NET頁面在頁面生命週期中很早就調用了一個方法,您可以重寫該方法。

0

嘗試此 System.Resources.ResourceReader resourceReader =新System.Resources.ResourceReader( 「RES_PATH」);

現在你可以使用這個加載用戶語言如es.resx

System.Resources.ResourceReader resourceReader 
    = new System.Resources.ResourceReader(HttpContext.Current.Request.UserLanguages[0] 
    + ".resource"); 
+0

感謝德米特里,但這隻會加載一個資源文件供我處理。我在做的是使用meta:resource語法,該語法根據瀏覽器用戶語言自動加載標籤的值,然後查找相應的RESX文件並從中獲取值。我沒有在任何時候閱讀它。一切都是由CLR在飛行中完成的。 – 2012-02-13 17:43:13

+0

當然!你可以重寫page.culture – 2012-02-13 19:45:27