资源文件分两种,嵌入的资源文件和外部资源文件。第一种资源文件使用比较简单,直接选添加项目选资源文件就可以了,调用上也是非常简单。
由于第一种资源文件已经嵌入了dll,所以一旦想修改,可能会比较麻烦,所以我个人比较倾向于第二种。此种方法是创建一个resx,譬如说是aaa.resx,再建一个中文版本aaa.zh-cn.resx,然后将这些resx放入App_GlobalResources文件夹,具体使用时用 HttpContext.GetGlobalResourceObject("aaa", key, culture) 来得到值。修改resx可以直接使用文本编辑器(修改文本类资源文件),也可以拖入vs再编辑。需要注意的是此文件夹下的任何文件变化都会引起session清空,就和web.config修改了一样的效果。
HttpContext还有一个GetLocalResourceObject方法,这个主要是针对与页面级别的资源文件。
MOSS站点中App_GlobalResources这个文件夹是在当应用程序建立时创建的,而App_GlobalResources文件夹里面的文件是从“C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG\Resources”中拷贝过来的,而且仅当应用程序建立时才把文件全部拷贝过来,
所以部署时候要注意不但要将我们的文件copy到moss的系统文件夹,也要拷入我们的站点相应文件夹。
App_GlobalResources文件夹中的资源文件是应用程序的全局资源,因而可以从任何页面中引用它。
<asp:LabelRunat="server"Text="<$Resources:ResxFile,MyResName>"/>
App_LocalResources文件夹位于包含一些ASP.NET页面的文件夹下的一个子目录。该文件夹可以使用位于目录结构中高一级目录中的页面命名的.resx文件进行填充。假定父文件夹包含test.aspx,则可以在App_LocalResources文件夹中找到一些可用的资源文件如下:test.aspx.resx、test.aspx.it.resx和test.aspx.fr.resx。显然,上述文件中存储的资源仅对test.aspx页面有影响,因而只能在链接的页面中看见它们(可以使用它们)。
如何访问一个页面特有的资源呢?对于编程访问,可使用如下代码:
HttpContext.GetLocalResourceObject("/ProAspNet20/ResPage.aspx",
"PageResource1.Title")
第1个参数指出页面虚拟路径;第2个参数是资源名称。对于声明式访问,使用meta:ResourceKey属性。例如,
<asp:ButtonRunat="server"meta:resourcekey="ButtonResource1"/>
该声明将一个惟一的资源键与特定按钮实例关联。局部文件.resx包含prefix.name形式的条目,其中prefix是资源键,而name是绑定控件上的属性名。为了赋予按钮一个本地化标题(Text属性),只要在资源文件中创建一个ButtonResource1.Text条目即可。
局部和全局资源文件夹中存在的资源文件都被编译,以创建附属程序集的类。最后的结果是开发人员创建.resx文件,并测试该页面。而ASP.NET编译机制会完成其余工作。
关于culture可以查看http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx