2011-02-23 32 views
6

我有一個asp.net網站(不是web應用程序),我已經使用資源文件(.resx)爲UI本地化了文本。我還有一個包含業務邏輯的類庫,並且有一個驗證方法返回錯誤消息。我需要本地化該錯誤消息,但無法找到訪問我的網站中的全局資源文件的方法。在網站上,在後面的代碼中說,我可以使用Resources.LocalisedText.MyErrorMessage(其中LocalisedText是我的資源文件LocalisedText.resx的名稱)。但是在我的課程庫中,我無法獲得它的參考。如何訪問全球資源以便在類庫中進行本地化?

我發現這個鏈接http://weblogs.asp.net/rinze/archive/2008/12/03/using-globalization-resources-resx-in-a-class-library-or-custom-control.aspx它說,它可以完成,但它似乎並沒有爲我工作可能是因爲我無法得到正確的網站名稱空間?

+1

我設法找到一個解決方案,這是通過在類庫本身中添加一個資源文件。這工作正常,但我希望只有一個資源文件,如果可能的話。所以,如果你們中有人知道如何引用網站中的.resx文件,請告訴我。 – gices 2011-02-23 17:06:15

回答

0
new ResourceManager("YourRessourceName", Assembly.GetEntryAssembly()).GetString("MyLocalizedString"); 

這裏你建立一個使用執行的程序集(您的網站)一個ressourceManager,「YourRessourcenName」是沒有的resx和語言你的ressource文件的名稱。

+0

裝配。GetEntryAssembly()似乎爲Web應用程序返回null。 – 2012-10-03 07:01:10

4

我設法讓這個工作基於resx的設計器文件。如果您打開它並查看ResourceManager屬性的get訪問者,則基本上只需複製該行即可訪問相同的資源。

充分說明

首先,你需要打開資源文件的.designer.cs文件。它應該是在解決方案資源管理器中,如下圖所示:

Resource file designer file location in solution explorer

只需雙擊,要打開它,然後掃描(應該是靠近頂部):
internal static global::System.Resources.ResourceManager ResourceManager {

get訪問器,您應該看到它將某些內容分配給臨時變量。在我的情況是這樣的:

ResourceManager lang = new ResourceManager("Resources.Lang", 
              Assembly.Load("App_GlobalResources")); 

注1:

/*...*/ temp = new global::System.Resources.ResourceManager("Resources.Lang", 
       global::System.Reflection.Assembly.Load("App_GlobalResources")); 

因此,基於這一點,我在我想在我的類庫使用像這樣的類創建的ResourceManager不要忘記將using System.Resources;using System.Reflection;添加到文件的頂部。
注2:這不需要將對Web項目的引用添加到類庫中。

然後,我只需撥打我的lang變量上的GetString方法即可獲取我想要的資源。
例如lang.GetString("MyErrorMessage")
它不像呼叫Resources.Lang.MyErrorMessage那麼優雅,但它完成了工作。

希望這會有所幫助。如果您有任何問題,請在下面留言。