2010-02-26 147 views
6

我目前的解決方案由多個類庫和一個網站組成。我正在全球化應用程序,我意識到我的資源需要被所有項目訪問,而不僅僅是網站,所以將我的資源放在App_GlobalResources文件夾中不起作用。如何從網站訪問外部資源Aspx

我將我的資源添加到一個我的類庫中,現在我試圖找出訪問資源的最佳方式是從我的標記中獲得的。當我的資源是在App_GlobalResources文件夾,我能夠通過使用表達式,比如用它來訪問他們:

<$ Resources: MyApp.Name %> for server controls 

或者

<%=Resources.MyApp.Name %> for plain text 

什麼是從我的網站的aspx訪問我的資源的最佳途徑現在他們在一個類庫DLL中的文件?

感謝您的幫助!

+0

也許將ASPX的項目設置爲依賴於類庫項目。如果只是簡單地包含DLL而不是類庫項目本身,請確保在項目中引用了DLL。 – 2010-02-27 06:33:06

回答

4

我發現了一篇很好的文章,討論了擴展Resource-Provider Model。它允許使用表達式來訪問外部資源:

缺省提供程序模型(顯式全局資源)的$ Resources表達式的語法如下。

<%$ Resources: [resourceType], [resourceKey] %> 

當配置ExternalResourceProviderFactory時,可以使用相同的表達式訪問外部資源,並更改以下語法。

<%$ Resources: [assemblyName]|[resourceType], [resourceKey] %> 

例如,檢索從CommonResources.dll組裝的資源,從全球資源類型「CommonTerms」,你可以使用下面的外在表現。

<asp:Label ID="labGlobalResource" runat="server" Text="<%$ Resources:CommonResources|CommonTerms, Hello %>" ></asp:Label> 
0

我使用了一個Util類庫,它除了大量其他有用的類和函數外,還包含一個具有公共共享函數的i18n類,該函數根據資源文件的名稱和LCID返回資源的值(字符串) 。 我在我的web項目添加到該DLL的引用何地需要,比方說在代碼隱藏文件的標籤我寫:

MyLabel.Text = i18n.GetResourceString("MyStringName",1033) 

您可以找到方法的更詳細的描述我用here 我相信,隨着在那裏提供的細節,你可以採用或適應我的解決方案。

+0

這適用於代碼隱藏,但標記又如何? – mga911 2010-03-04 18:20:22

+0

對不起,但我不明白。 您可以使用標記: 假設該程序集稱爲Util.dll。 但是你仍然需要從代碼隱藏中調用MyLabel.DataBind才能工作。 因此,您不妨直接在code-behind onload中寫入 MyLabel.Text = i18n.GetResourceString(「MyStringName」,1033) 。 – esjr 2010-03-05 04:37:12

+0

順便說一句,這將工作沒有代碼隱藏:

<%=Util.i18n.GetResourceString("NameText", 1033)%>
再次假設,程序集是Util.dll,在您的項目中引用和國際化的GetResourceString是一個公共共享功能。 – esjr 2010-03-06 06:41:07