资源文件是解决本地化的有效途径之一。
建立一个空白的项目。
首先建立一个FORM。摆上两个BUTTON。
第一个BUTTON用来切换语言。第二个BUTTON用来显示对应的语言资源。
查看FORM的属性。在杂项里面,有一个Language。我们首先选择中文(简体)。然后编辑窗体的text为“这是一个例子”。button1的text为“切换语言”,button2的text为“得到信息”。保存。然后选择英语(美国),编辑窗体的text为“This is a Example”,button1.Text为“Switch Language”,button2.Text为“Get Info”。保存。
这些信息保存在bin/debug下面的zh-CH和en-US的文件夹下面。
然后我们切换回代码页面,请大家重点看看InitializeComponent()这个方法。这个方法和普通的(没有设置语言属性)的窗体就不一样了。看下面的代码,它尝试从资源文件里面来读取窗体有关的信息。
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
...................................
this.button2.Text = resources.GetString("button2.Text");
this.button2.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("button2.TextAlign")));
this.button2.Visible = ((bool)(resources.GetObject("button2.Visible")));
...................................
我们编写button1的click事件,如下:
if(System.Threading.Thread.CurrentThread.CurrentUICulture.Name == "en-US")
{
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture("zh-CN");?
}
else
{
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");?
}
//这段代码,大家可以从InitializeComponent方法里面拷贝出来。用来重新设置窗体的信息。
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
this.button1.Location = ((System.Drawing.Point)(resources.GetObject("button1.Location")));
this.button1.Size = ((System.Drawing.Size)(resources.GetObject("button1.Size")));
this.button1.Text = resources.GetString("button1.Text");
this.button1.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("button1.TextAlign")));
this.button2.Location = ((System.Drawing.Point)(resources.GetObject("button2.Location")));
this.button2.Size = ((System.Drawing.Size)(resources.GetObject("button2.Size")));
this.button2.TabIndex = ((int)(resources.GetObject("button2.TabIndex")));
this.button2.Text = resources.GetString("button2.Text");
this.button2.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("button2.TextAlign")));
this.Text = resources.GetString("$this.Text");
然后给项目添加两个资源文件,分别为MyResource.resx和MyResource.en-US.resx。
双击MyResource.en-US.resx,添加一个内容。name栏里面添加ONE,value里面添加ONE.
同样给MyResource.resx添加一项,name里面也是ONE,value里面是"一".
然后编写button2的click事件。
如下:
ResourceManager rm = new ResourceManager("ResourceMgr.MyResource",this.GetType().Assembly);
MessageBox.Show(rm.GetString("ONE"));
OK.运行起来这个FORM,点击按钮查看效果。