c#

位置:IT落伍者 >> c# >> 浏览文章

开发一个多种语言版本的C#程序


发布日期:2022年05月08日
 
开发一个多种语言版本的C#程序
在C#中有多种使用资源文件的方法能够很方便地开发全球通用的应用程序本文通过一个简单的小例子来讲解在C#中如何利用资源文件快速开发一个多种语言版本的程序本例中只有一个窗体三个控件能够根据用户的设置以中文或英文界面运行开发环境是Windows ProfessionalMicrosoft Visual StudioNET 具体开发步骤如下

新建项目

启动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退出程序后再次运行程序时直接显示中文界面

上一篇:c#中如何实现3层架构

下一篇:.NET中Image转Icon