ASP.NET网站支持多语言
(本地资源文件和全局资源文件的调用及需注意的地方总结)
一、 本地资源文件(App_LocalResources):
①、 本地资源的生成及调用
1、本地资源的VS自动生成方法:
将页面调整到【设计】视图,然后在VS2008菜单栏中
【工具】=》【生成本地资源】即可生成该页面的资源文件,在App_LocalResources文件夹中可查看。eg:Default2.aspx.resx
2、本地资源的手动生成方法:
选中网站=》添加新项=》然后选择【资源文件】即可创建一个资源文件,但是此时可以看到刚刚创建的资源文件.resx存放在App_GlobalResources文件夹中,当前为全局资源文件,需要在网站中创建一个名为App_LocalResources的文件夹(即本地资源文件夹)然后将刚刚创建的全局资源文件拖到当前文件夹中即可,然后在调用的时候需要在控件中添加meta:resourcekey=”资源键” 代码,具体在调用中讲解。
3、本地资源的调用:
(1)、服务器控件
1.1、前台隐示使用本地化资源,VS2008自动生成本地资源在控件中就会自动包含meta:resourcekey=”资源键” 代码,如果某控件未扫描到则就不会有该代码标识需要手动添加此代码
eg:
<asp:Label ruant=”server” ID=”lbl_msg” meta:resourcekey=”lbl_msg” ></asp:Label>
1.2、前台显示使用本地化资源
eg:
<asp:Label ruant=”server” ID=”lbl_msg”
Text=”<%$ Resources: lbl_msg .Text %>”
ToolTip=”<%$ Resources: lbl_msg .ToolTip %>”
></asp:Label>
蓝色图标和红色图标表示绑定数据形式(显示/隐示),如下图示:
1.3、后台编码时使用本地化资源
方法一:
//后台通过资源键来获取资源值,然后赋值给页面对象
this.txtbox1.Text=(string)GetLocalResourceObject("资源键");
或
this.txtbox1.Text=(string)HttpContext.GetLocalResourceObject("资源文件名", "资源键");
(2)、非服务器控件(HTML控件,input …):
1.1、html控件或input控件都无法自动生成资源文件,需要手动添加meta:resourcekey=”资源键” 标记,并将其添加到资源文件中,但必须注意的是控件中必须添加服务器标识属性,即:runat=”server”
eg:
<input id=”txt_msg” type=”text” meta:resourcekey=” txt_msg” />
测试结果:无法显示资源txt_msg值,将其修改如下:
<input id=”txt_msg” type=”text” meta:resourcekey=”txt_msg” runat="server" />
测试结果:正常显示资源txt_msg值
②、注意事项:
1、 每个页面必须包含一个默认的本地资源文件,(资源文件名和页面文件名区别在于资源文件名是在页面文件名(包含文件的后缀)基础上添加一个.resx后缀)
eg:index.aspx.resx。
默认的本地资源文件的作用:当其他本地资源文件,eg:index.aspx.en-US.resx 或…资源文件中未包含某键,而默认的本地资源文件中包含某键,则从默认的本地资源文件中取值。
2、 如果页面需要支持多语言则可以复制默认的本地资源文件,然后修改其文件名称
eg:index.aspx.en-US.resx(英文)
然后将index.aspx.en-US.resx中的键值修改为英文即可
3、 1)如果需要将所有的页面都使用同一种语言则可以配置web.config文件,前提将页面Page指令中的culture="auto" uiCulture="auto" 删除,否则首先使用页面中的语言形式
eg:
<system.web>
<!—en-US(英文),zh-CN(中文) …
UICulture - 针对用户界面的安钮之类的控件显示
Culture - 决定各种数据类型是如何组织,如数字与日期,货币
-->
<globalization culture="en-US" uiCulture="en-US"/>
</system.web>
2)如果某个页面和其他的页面使用的语言不同,则可以在某个页面Page命令中设置culture和uiCulture, 这两个属性的作用是使页面优先跟据浏览器的语言设置自动加载相应语言的资源文件等显示方式
eg:
<%@ Page culture="zh-CN" uiCulture="zh-CN" %>
4、 如果想在页面后台(即.cs文件)通过传递参数的方式设置使用的语言,则
eg:
命名空间引用:
using System.Threading;
using System.Globalization;
protected override void InitializeCulture()
{
string culture = Request.QueryString[“culture”].ToString();
if (culture != "")
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
}
else
{
//默认中文
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-CN");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
}
base.InitializeCulture();
}
通过传递编码参数的方式,进行重写InitializeCulture (初始化语言方法)来改变页面语言显示方式。
5、 本地资源文件只能在本页面调用,不能被其他页面调用,假如有两个页面Index1.aspx和Page 2.aspx则,如下资源文件
eg:Index1.aspx.resx
Page2.aspx.resx
Index1.aspx页面不能调用Page 2.aspx.resx中的资源键值;
Page 2.aspx页面也不能调用Index1.aspx.resx中的资源键值;
Index1.aspx页面只能调用Index1.aspx.resx中的资源键值;
Page 2.aspx页面只能调用Page 2.aspx.resx中的资源键值;
二、 全局资源文件(App_GlobalResources):
① 、全局资源的生成及调用
1、全局资源的手动生成方法:
选中网站=》添加新项=》然后选择【资源文件】即可创建一个资源文件,但是此时可以看到刚刚创建的资源文件.resx存放在App_GlobalResources文件夹中,当前为全局资源文件.
2、前台全局资源文件的调用:
1)、在需要调用的控件中添加<%$ Resources : 资源文件名,资源键 %>
eg:
<asp:Label ID="lbl_global" runat ="server" Text ="<%$ Resources:lang,lbl_global %>">
</asp:Label>
2)、前台页面级JavaScript中调用全局资源文件方法:
<%= Resources .资源文件名 . 资源键 %>
eg:
<script>
var msg=” <%= Resources . lang . lbl_global %>”
</script>
3、后台全局资源文件的调用:
1)、在后台直接使用Resources .资源文件名 .资源键 方可获取资源值
eg:
this. lbl_global.Text=Resources . lang . lbl_global ;
//后台获取image类型对象
System.Drawing.Bitmap imgJpg= Resources.lang.img_jpg
2)、
//后台通过资源键来获取资源值,然后赋值给页面对象
this.lbl_global.Text=(string)GetGlobalResourceObject ("资源键");
或
this.lbl_global.Text=(string)HttpContext.GetGlobalResourceObject("资源文件名", "资源键");
3)、后台使用 ResourceManager类来获取资源
ResourceManager rm = new ResourceManager(Resource1.ResourceManager.BaseName,
Assembly.GetExecutingAssembly());
string str=rm. GetString(“资源键”);
② 注意事项:
1、全局的资源文件,存放在App_GlobalResources文件夹中,以.resx为后缀,首先必须添加一个默认的全局资源文件
eg:lang.resx。
默认的全局资源文件的作用:①、当其他全局资源文件,eg:lang.en-US.resx 或lang.zh-CN.resx等 资源文件中未包含某键,而默认的全局资源文件中包含某键,则从默认的全局资源文件中取值;②、资源调用时只能通过默认的资源文件名去调用,即
Resources . lang . 资源键 (正确√)
而不能使用
Resources . lang . en-US . 资源键; (错误×)
lang.en-US.resx 或lang.zh-CN.resx 只是根据使用的语言不同来自动调用
2、全局资源文件可以在本网站的所有页面中调用。
其他需要注意的地方和本地资源差不多,这里就不重复讲解。
以上是我对本地资源和全局资源的理解, 如果有错误的地方请各位大神给予指导。^.^
※未解决的问题:
无法实现外部Javascript中调用资源的问题,如果各位大神有好的解决办法,麻烦分享下噢,谢谢哈!
※关于网站支持多语言问题相关文章:
http://www.cnblogs.com/FredTang/archive/2013/01/23/2873231.html
http://www.cnblogs.com/wenjl520/archive/2010/10/17/1853367.html
http://www.cnblogs.com/lansetiankong/archive/2010/07/30/1788790.html
http://www.cnblogs.com/winsonet/archive/2010/09/08/1821107.html
多语言资源文件制作工具:
http://www.cnblogs.com/LifelongLearning/archive/2010/07/04/1771019.html