2010-02-25 41 views
1

所以我有:有沒有辦法來重寫.NET .resx文件中的特定資源值?

App_GlobalResources文件/ MyApp.resx

與名稱/值對的「電子郵件」 =「電子郵件地址」

在我的應用程序,有沒有辦法來覆蓋該值?在應用程序的某個時刻,我想要更改名稱/值對的值。

「電子郵件」= 「電子郵件地址」 ... ...變成 「電子郵件」= 「Email地址」

而且有引用同樣的方式,Resources.MyApp.Email。

回答

3

爲什麼不在你的資源文件中創建2個條目?一個用於「聯繫人電子郵件地址」,另一個用於「電子郵件地址」並使用您的代碼決定在該情況下顯示哪一個。

因此,如果您使用的電子郵件地址作爲默認你會:

<asp:Label ID="EmailAddressLabel" runat="server" meta:resourcekey="EmailAddressLabel"></asp:Label> 

然後越過你會把這樣的事情在後面的代碼:

if (your logic here) 
{ 
    Email.Text = (String)GetLocalResourceObject ("ContactEmailAddressLabel"); 
} 

以上是爲本地資源文件。對於全球,您可以使用:

Email.Text = (String)GetGlobalResourceObject("MyApp", "ContactEmailAddressLabel"); 

並且會爲您讀取全局資源密鑰。

+0

謝謝理查德,這絕對是一種方法,我必須仔細考慮一下。 我看到的第一個問題是,我在20個其他文件中有一個電子郵件地址標籤的情況。我絕對不想把我的邏輯放在每個代碼後面的文件中。理想情況下,當應用程序加載並使用單個引用時,我可以設置/覆蓋Resources.MyApp.Email一次。 你的想法絕對很好,直截了當,只需要找到一種更好地管理邏輯的方法。感謝分享! – Kevin 2010-02-26 02:48:12

+0

你可以把邏輯放在一個類中,如果它用在大量的頁面上,只需從後面的代碼中調用這個類 - 但是你仍然需要添加類似Email.Text = EmailWording.GetLabelWords();到您的代碼隱藏頁面。儘管我感到你的痛苦,但最近不得不將語言複製到一個大的網站上。不好玩!祝你好運! :) – 2010-02-26 10:43:45

+0

這正是我昨晚想的。 CustomResource.GetLabel(「Email」)的某些內容以及某些系統設置的基礎上,從相同的全局資源文件返回適當的字符串。 – Kevin 2010-02-26 15:11:47

相關問題