朋友托我帮他做个小站,2钟语言版本的,我想既然是小站那也得给它加点料。刚学了
点资源文件的皮毛,那就用上了哈。示例网站如下http://www.donglongcf.cn.
下面开始如何一步步建立多语言化网站。
第一步:
新建2个资源文件,其中命名为Resource.resx,Resource_En.resx代表英文。
在界面上Aspx文件上,直接
1
<%=
Resources.Resource.String1
%>
1
<
asp:Label ID
=
"
lbl_global
"
runat
=
"
server
"
Text
=
"
<%# Resources.Resource.Button1 %>
"
></
asp:Label
>
也可以这样
1
<
asp:TextBox ID
=
"
TextBox1
"
runat
=
"
server
"
Text
=
"
<%$ Resources:Resource, String1 %>
"
></
asp:TextBox
>
就可以将对应的资源文件的值读取出来
但是,通常我们不是这样使用资源文件。只有在语言切换的时候,才显示不同的语言。比如
点击中文,显示中文语言包,英文则显示英文语言包。所以 我们要对当前语言环境进行设置
第二步:
在页面初始化的时候,设定当前语言环境,中文值为zh-CN,英文则为en-US
1
Thread.CurrentThread.CurrentUICulture
=
CultureInfo.CreateSpecificCulture(
"
zh-CN
"
);
但是,我们依然不满足,我们没必要在每个页面的page_load里都加这么一句,太繁琐。
第三步,重写页面的InitializeCulture方法
新建一个InitialCulture
1
protected
override
void
InitializeCulture()
2 {
3 // 当前语言变量放在了Session里 也可以放Cookie
4 if (Session[ " lang " ] != null )
5 {
6 Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(Session[ " lang " ].ToString());
7 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session[ " lang " ].ToString());
8 // base.InitializeCulture();
9 }
10 else
11 {
12 Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture( " zh-CN " );
13 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture( " zh-CN " );
14 }
15 base .InitializeCulture();
16 }
2 {
3 // 当前语言变量放在了Session里 也可以放Cookie
4 if (Session[ " lang " ] != null )
5 {
6 Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(Session[ " lang " ].ToString());
7 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session[ " lang " ].ToString());
8 // base.InitializeCulture();
9 }
10 else
11 {
12 Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture( " zh-CN " );
13 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture( " zh-CN " );
14 }
15 base .InitializeCulture();
16 }
1
public
partial
class
_Default :InitialCulture
如果你是个懒惰的程序员,那么每个页面加这么一句肯定也不会满足你。这时 就嗅到了bad smell.
第四步,
建立httpMoudle
通过在httpModle实现全局的控制
1
//
应用程序初始化
2 public void Init(HttpApplication app)
3 {
4 app.AcquireRequestState += new EventHandler(context_AcquireRequestState);
5 // 这里委托在AcquireRequestState 进行操作是 因为我把全局语言变量 放在了session里
6 // 而session 的生成是 在AcquireRequestState 才有效
7 }
8
9 void context_AcquireRequestState( object sender, EventArgs e)
10 {
11 HttpApplication app = sender as HttpApplication;
12 LangGuage(app);
13 }
14
15 private void LangGuage(HttpApplication app)
16 {
17
18 if (app.Context.Session[ " lang " ] == null )
19 app.Context.Session[ " lang " ] = " zh-CN " ;
20 Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(app.Context.Session[ " lang " ].ToString());
21 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(app.Context.Session[ " lang " ].ToString());
22 }
23 #endregion
2 public void Init(HttpApplication app)
3 {
4 app.AcquireRequestState += new EventHandler(context_AcquireRequestState);
5 // 这里委托在AcquireRequestState 进行操作是 因为我把全局语言变量 放在了session里
6 // 而session 的生成是 在AcquireRequestState 才有效
7 }
8
9 void context_AcquireRequestState( object sender, EventArgs e)
10 {
11 HttpApplication app = sender as HttpApplication;
12 LangGuage(app);
13 }
14
15 private void LangGuage(HttpApplication app)
16 {
17
18 if (app.Context.Session[ " lang " ] == null )
19 app.Context.Session[ " lang " ] = " zh-CN " ;
20 Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(app.Context.Session[ " lang " ].ToString());
21 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(app.Context.Session[ " lang " ].ToString());
22 }
23 #endregion
这样我们的网站多语言话就初步完成了 剩下的就只是对资源文件的使用而已了
源码下载地址 http://www/kobewang.cn