2014-03-06 39 views
1

我正在創建一個具有多種語言的Web應用程序。 我已經設置了文化這樣從標記頁訪問資源文本

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); 

我有幾個語言文件,如「en.resx」和「de.resx」。 我可以從他們身上揹着我這樣的代碼

var test = GetGlobalResourceObject(Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk"); 

但如何從標記網頁約閱讀。 我一直在尋找網頁和大部分頁面是在暗示這樣的事情

<asp:Literal Text='<%$ Resources:Resource, aboutUsLnk %>' runat="server" /> 

,如果我有一個名爲資源.resx文件,但我這不是我想要的工作。我錯過了什麼?

+0

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

3

如果我有一個稱爲資源的.resx文件,但我不是我想要的那樣。我錯過了什麼?

您可能正在尋找本地資源和元:獲取ResourceKey屬性。

本地是按頁面定義的(您爲它們定義與您的頁面完全相同的名稱),您可以使用它們來存儲特定於一個頁面的資源。

App_LocalResources/{pagename}.resx 

然後調用從資源文件資源對象(AboutUs.resx,AboutUs.fr-:您可以通過添加ASP.NET特定的文件夾(App_LocalResources文件),然後它裏面的本地資源爲每個頁面創建它們BE.resx,...)從頁面標記(AboutUs.aspx)將是這樣的:

你提到accros整個網站被定義
<asp:Literal Text='About Us' meta:resourcekey="aboutUsLnk" runat="server" /> 

環球資源(通常是你存儲在這裏,如「編輯資源「,」保存「等),通常會按照您所示的方式進行調用。

這裏瞭解更多詳情:http://msdn.microsoft.com/en-us/magazine/cc163566.aspx

編輯

啊抱歉誤會,你可能會問如何調用您的全球資源,這名每文化差異。您可以使用GetGlobalResourceObject,在您的標記代碼中執行該操作,與您在後面的代碼中執行的操作幾乎相同。

以外的任何服務器控件,你可以這樣寫:

<%= GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk")%> 

要調用GetGlobalResourceObject服務器控件的屬性不能使用<%= %>裏面,但是你可以用服務器控件周圍(在那些允許這樣做,像Label爲例):

<asp:Label ID="Label1" runat="server"><%= GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk")%></asp:Label> 

或者,您可以使用綁定語法:

<asp:Label ID="Label1" runat="server" Text='<%# GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk")%>'></asp:Label> 

注意,在使用後者時,你會需要綁定控件:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Label1.DataBind(); 
} 

EDIT 2

你可以用上面的代碼中一些輔助的方法來提高代碼readabilty。在後面的代碼,你把它聲明:

protected string GetResource(string resourceName) 
{ 
    return GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), resourceName).ToString(); 
} 

而且在標記可以similiar稱其爲以前:

<asp:Label ID="Label1" runat="server" Text='<%# GetResource("aboutUsLnk")%>'></asp:Label> 
<asp:Label ID="Label2" runat="server"><%= GetResource("aboutUsLnk")%></asp:Label> 
+0

謝謝,但我想使用全球資源不本地。我想每個語言一個文件 – WIRN

+0

@WIRN:我已經更新了我的答案 – Janez

+0

謝謝,現在它可以工作。這是一個很長的代碼,是不是也可以像我寫的那樣做?總之,非常感謝。 – WIRN