在C#中有多种使用资源文件的方法
能够很方便地开发全球通用的应用程序
本文通过一个简单的小例子
来讲解在C#中如何利用资源文件
快速开发一个多种语言版本的程序
本例中只有一个窗体
三个控件
能够根据用户的设置以中文或英文界面运行
开发环境是Windows
Professional
Microsoft Visual Studio
NET
具体开发步骤如下
一新建项目
启动Microsoft Visual Studio NET新建一个C#项目MyApp本例工程存放于F:\Csharp\MyApp
二添加控件
在Form 窗体上添加三个控件(见图)主菜单MainMenu标签Label和按钮ButtonLabel和Button控件的属性均采用缺省设置MainMenu控件中添加三个菜单项menuItemmenuItemmenuItemText属性分别设为语言中文和EnglishmenuItem
menuItem 的RadioCheck属性设为True
图
三创建配置文件
在项目中添加一个文本文件MyAppConfigini保存当前程序的语言版本设置该文件中只有一行内容如果是English则表示程序为英文版如果是Chinese则为中文版这里暂且保存为English
四创建资源文件
NET中的资源文件有三种: 文本(txt )文件XML 格式的Resx 文件和Resources 文件文本文件只能包含形如 名称= 值格式的字符串资源Resx文件和Resources 文件中不仅能保存字符串资源还能保存图像等可序列化的持久对象资源但是只有resources 文件格式的资源文件才能被嵌入到运行库可执行文件中或被编译为附属程序集利用Visual Studio NET 中自带的资源文件生成器
(Resgenexe)可以将txt文件和Resx文件转换为resources 文件格式本例中只用到了字符串资源所以在项目中添加两个文本文件Resource_zhtxt 和Reource_entxt
Reource_entxt 文件中的内容
menuItem_Name=Language button_Name=Exit
label_Text=This is English version!
Resource_zhtxt 文件中的内容
menuItem_Name=语言button_Name=退出
label_Text=这是中文版!
需要注意的是Resource_zhtxt文件中含有汉字必须以UTF编码保存在Visual Studio NET集成开发环境中可以先点击文件菜单中的高级保存选项选中UTF编码格式再保存文件
然后点击程序菜单中的Visual Studio NET命令提示菜单进入DOS方式输入以下两行命令生成程序中能够访问的资源文件MyAppresources和MyAppzhCNresources英文资源文件MyAppresources 作为默认的后备资源文件MyAppzhCNresources
是中文资源文件文件名中的MyApp是资源文件的根名称必须与后备资源文件的根名称相同zhCN指定资源文件的区域性
F:\Csharp\MyApp>resgen Resource_entxtMyAppresources
F:\Csharp\MyApp>resgen Resource_zhtxtMyAppzhCN
resources
五修改代码在代码的开头添加需引用的命名空间
using SystemGlobalization; using SystemResources;
using SystemThreading;
using SystemIO;
在Form 中定义两个字段ci和rmCultureInfo对象ci用来指定读取资源文件时的区域性ResourceManager对象rm用来在指定的资源文件中读取资源
CultureInfo ci = new CultureInfo(); Res ource Manag er rm = Res ource Manag erCreateFileBasedResourceManager(MyAPP null);
在Form中添加一个方法ReadResources用来读取相应资源文件中的字符串资源来修改界面菜单标签和按钮上文字显示
private void ReadResources(){ nuItemText = rmGetString(menuItem_Textci) ;
thisbuttonText = rmGetString(button_Textci);
thislabelText = rmGetString(label_Textci);
thisRefresh();
}
在Form 的Load事件处理过程中根据配置文件的内容调用ReadResources方法读取资源显示程序界面
private void Form_Load() { StreamReader sr=FileOpenText(MyAppConfigini);
if (srReadLine()==Chinese){
ci = new CultureInfo(zhCN);
menuItemChecked=true; }
else {
ci = new CultureInfo(en);
menuItemChecked=true;
}
srClose();
thisReadResources();
}
在Form 中添加一个方法SaveConfig用来修改配置文件在menuItem 和menuItem 的Click事件过程中调用S a v e C o n f i g 方法分别将字符串ChineseEnglish 写入配置文件并调用ReadResources方法来更新界面
private void SaveConfig(string p_Language){ StreamWriter sw=FileCreateText(MyAppConfigini);
swWriteLine(p_Language);
swClose();
}
private void menuItem_Click(){
thisSaveConfig(Chinese);ci = new CultureInfo(zhCN);
menuItemChecked=true; menuItemChecked=false;
thisReadResources();
}
private void menuItem_Click(){
thisSaveConfig(English);
ci = new CultureInfo(en);
menuItemChecked=false;
menuItemChecked=true;
thisReadResources();
}
在按钮button的Click事件过程中关闭窗体结束运行程序
private void button_Click() {
thisClose();
}
六编译并运行程序
如果手工编译源程序只需点击Visual StudioNET 命令提示菜单进入DOS方式输入下面命令即可生成二进制的可执行文件MyAppexe然后输入MyApp就能运行程序
F:\Csharp\MyApp>csc /out:MyAppexe formcs
如果是在Microsoft Visual Studio NET 集成开发环境中运行程序将自动进行编译并将编译的二进制可执行文件放到bin\Debug子目录下此时需要注意的是要将MyAppConfiginiMyAppresources 和MyAppzhCNresources 这三个文件也复制到bin\Debug\子目录下程序才能正常运行
程序第一次运行时是英文界面(见图)点击菜单中文将变成中文界面(见图)单击按钮Exit退出程序后再次运行程序时直接显示中文界面
图
图