2010-02-25 42 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

相关问题