在做网站时能常会遇到需要把网站做成多种语言,asp.net2.0提供了良好的处理方式,但发现会有些问题,如果是大型社区并发请求的效率就比较明显了,所以如果用cache或泛型来处理,会快些,把这些资源包进行散列存储
现在介绍一种并发不算高的处理方式:
先建一个.txt文件(cn.txt)注意要存成utf-8的格式,要不然会乱码
在里面输入内容:
_name=姓名
_list =显示
然后,选择开发菜单下面的vs2005>工具下面的>命令提示符
C:\Program Files\Microsoft Visual Studio 8\VC\>resgen E:\多种资源文件\Resource\cn.txt
成功后会自动生成一个cn.resources的资源文件。
新建建一个类,代码如下
using System;
using System.Resources;
using System.Globalization;
namespace 多种资源文件
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class ResourceClass
{
/// <summary>界面资源对象</summary>
public ResourceManager myResManager;
/// <summary>界面区域对象对象</summary>
protected CultureInfo myCulture;
protected string strPath = @"E:\开源项目\多语言\多种资源文件\Resource"; //这里要修改成自己的实际路径
private string _strLangString = "zh-CN";
public string LangString
{
get { return _strLangString; }
set { _strLangString = value; }
}
string languageFle = "en";
public ResourceClass()
{
}
private void GetCulture()
{
if (myResManager == null || myCulture == null)
{
switch (_strLangString.ToLower())
{
case "zh-tw":
break;
case "zh-cn":
languageFle = "cn";
break;
case "en":
languageFle = "en";
break;
}
// 建立資源管理器实例
this.myResManager = ResourceManager.CreateFileBasedResourceManager(languageFle, this.strPath, null);
// 建立区域实例
this.myCulture = new CultureInfo(this._strLangString);
}
}
public string GetResource(string strKey)
{
GetCulture();
string strValue = "";
strValue = myResManager.GetString(strKey,myCulture);
return strValue;
}
}
}
页面上调用示例:
ResourceClass myClass = new ResourceClass();
protected void Page_Load(object sender, EventArgs e)
{
GetItemText();
}
//在页面上放一个dropDownList控件,它的value分面为zh-cn,en等,供用户选择不同的语言
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
GetItemText();
}
private void GetItemText()
{
myClass.LangString = DropDownList1.SelectedValue.ToString();
string str = myClass.GetResource("_list");
this.Label1.Text = str;
Response.Write(myClass.GetResource("_name"));
}
现在介绍一种并发不算高的处理方式:
先建一个.txt文件(cn.txt)注意要存成utf-8的格式,要不然会乱码
在里面输入内容:
_name=姓名
_list =显示
然后,选择开发菜单下面的vs2005>工具下面的>命令提示符
C:\Program Files\Microsoft Visual Studio 8\VC\>resgen E:\多种资源文件\Resource\cn.txt
成功后会自动生成一个cn.resources的资源文件。
新建建一个类,代码如下
using System;
using System.Resources;
using System.Globalization;
namespace 多种资源文件
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class ResourceClass
{
/// <summary>界面资源对象</summary>
public ResourceManager myResManager;
/// <summary>界面区域对象对象</summary>
protected CultureInfo myCulture;
protected string strPath = @"E:\开源项目\多语言\多种资源文件\Resource"; //这里要修改成自己的实际路径
private string _strLangString = "zh-CN";
public string LangString
{
get { return _strLangString; }
set { _strLangString = value; }
}
string languageFle = "en";
public ResourceClass()
{
}
private void GetCulture()
{
if (myResManager == null || myCulture == null)
{
switch (_strLangString.ToLower())
{
case "zh-tw":
break;
case "zh-cn":
languageFle = "cn";
break;
case "en":
languageFle = "en";
break;
}
// 建立資源管理器实例
this.myResManager = ResourceManager.CreateFileBasedResourceManager(languageFle, this.strPath, null);
// 建立区域实例
this.myCulture = new CultureInfo(this._strLangString);
}
}
public string GetResource(string strKey)
{
GetCulture();
string strValue = "";
strValue = myResManager.GetString(strKey,myCulture);
return strValue;
}
}
}
页面上调用示例:
ResourceClass myClass = new ResourceClass();
protected void Page_Load(object sender, EventArgs e)
{
GetItemText();
}
//在页面上放一个dropDownList控件,它的value分面为zh-cn,en等,供用户选择不同的语言
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
GetItemText();
}
private void GetItemText()
{
myClass.LangString = DropDownList1.SelectedValue.ToString();
string str = myClass.GetResource("_list");
this.Label1.Text = str;
Response.Write(myClass.GetResource("_name"));
}