多语言,资源文件的运用(转载)
由于第一种资源文件已经嵌入了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编译机制会完成其余工作。
在as.p.net程序中资源文件(Resource)分为两种,一种是全局资源(GlobalResource),还一种是本地资源(LocalResource)
我们做一个Test1.aspx页面来测试,这个页面上只有一个Label lblHello。
1.使用GlobalResource
添加GlobalResource。添加GlobalResource文件夹,在下面添加资源文件,比如aaa.resx,添加字符串"strhello","你好"。 再添加一个aaa.en-us.resx,添加字符串"strhello","Hello"。
读取GlobalResource。可以通过HttpContext.GetGlobalResourceObject("aaa", "strHello");
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("zh-cn");//用英文的话换成"en-us"
Thread.CurrentThread.CurrentUICulture = culture;//设置当前语言区域
object obj = HttpContext.GetGlobalResourceObject("aaa", "strHello");
if (obj != null)
{
lblHello.Text = obj.ToString();
}
//lblHello.Text = Resources.aaa.strHello; //也可以这样读取
.使用LocalResource
添加LocalResource。先添加一个App_LocalResources文件夹,然后添加一个和页面名称一样的.resx文件,比如页面叫“Test1.aspx”,那在App_LocalResources文件夹下面建一个Test1.aspx.resx,里面加一条记录"strhello","你好"。 Test1.aspx.en-us.resx加记录"strhello","Hello"。
读取LocalResource:
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("zh-cn");//用英文的话换成"en-us"
Thread.CurrentThread.CurrentUICulture = culture;//设置当前语言区域
object obj = HttpContext.GetLocalResourceObject("~/Test1.aspx", "strHello");
//object obj = GetLocalResourceObject("strHello");//也可以直接这样读取
if (obj != null)
{
lblHello.Text = obj.ToString();
}