`
yidongkaifa
  • 浏览: 4052144 次
文章分类
社区版块
存档分类
最新评论

C#编程实现多语言WinForm程序

 
阅读更多

网上看了一些,还要自己编译生成.resources文件,然后动态加载,这个方法没有试,感觉也挺麻烦的,本来VS可以很方便地生成.resx的资源文件,然后一起编译时DLL,搞了很久也没有弄清楚如何将一个个字符串分别读出,不过也通过其它方法实现了多语言的支持,唯一一点遗憾就是需要重启程序,其实这个在很多情况下也是可以接受的嘛,至于立即生效的方法以后再研究吧。

首先,生成资源文件。
1.将FORM的属性Localizable置为true
2.将Form的属性Language置成default,用于通过操作系统的UI界面语言设置自动加载默认语言,如果设置的语言找不到的话则默认成中文(可能默认成英文好点),设置各个控件的属性,填写完整。
3.将Form的Language置成English(United States)即en-US或其它语言,修改各控件上的字符串,一旦改变某个控件的属性,VS就会自动生成一个资源文件formname.en-US.resx。

这样就可以分别编辑各种语言的资源文件,当你选择Language时VS会给你加载相应的语言界面,当然你也可以进行修改。本来想修改这个语言属性来显示不同语言界面,但Form类中没有这上属性,应该是VS在设计时添加的一个属性。

然后,在程序启动时进行语言设置的加载,核心代码为:

  
static void Main()
{
	if (WordCracker.Config.ConfigManager.Language != "default") {
		System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(WordCracker.Config.ConfigManager.Language);
	}
	Application.EnableVisualStyles();
	Application.SetCompatibleTextRenderingDefault(false);
	Application.Run(new MainForm());
}
其中,WordCracker.Config.ConfigManager是我写的一个操作xml配置文件的一个类,代码如下:
namespace WordCracker.Config
{
	static class ConfigManager
	{
		private static XmlDocument doc = new XmlDocument();
		private static FileInfo file = new FileInfo("config.xml");
		static ConfigManager()
		{
			if( !file.Exists ) return;
			FileStream fs = new FileStream(file.Name, FileMode.Open);
			doc.Load(fs);
			fs.Close();
		}

		public static string Language
		{
			get
			{
				XmlNode lan = doc.SelectSingleNode("/configuration/UI/language");
				if (lan == null) return "default";
				else return lan.InnerText;
			}

			set
			{
				XmlNode lan = doc.SelectSingleNode("/configuration/UI/language");
				if (lan == null) {	// create node
					return;
				}
				lan.InnerText = value;
				if (file.Exists) file.Delete();
				doc.Save(file.Name);
			}
		}
	}
}

配置文件config.xml放在与程序同一目录中,内容为:
<?xml version="1.0" encoding="utf-8" ?>
<configuration><br><ui><br><language>en-US</language><br></ui><br></configuration>
当然,这里还可以添加其它配置信息,就是一个小软件,我也没有添加太多东西

到这里就实现了启动时检测配置文件中设置的语言,并加载相应语言的界面,但是还没有修改语言的功能, 修改语言的操作写在一个菜单中,一个显示中文一个显示英文,代码如下:

private void menuOptionsLanguageChinese_Click(object sender, EventArgs e)
{
	WordCracker.Config.ConfigManager.Language = "zh-cn";
	PromptRestart();			
}

private void menuOptionsLanguageEnglish_Click(object sender, EventArgs e)
{
	WordCracker.Config.ConfigManager.Language = "en-US";
	PromptRestart();
}
private bool PromptRestart()
{
	if (MessageBox.Show("If you want to chang language, the program need restart, would you restart now?",
		"Restart needed",
		 MessageBoxButtons.YesNo,
		 MessageBoxIcon.Warning) == DialogResult.Yes) {
		System.Windows.Forms.Application.Restart();
		return true;
	}
	return false;
}

这里另一个问题就出来了,这个弹出的提示要重启的消息是用中文还是用英文,最好也写到配置文件里,并检测语言设置,设置为什么语言就显示什么语言的提示消息。

这种方法的缺点就是不能立即生效,如果要立即生效的话需要重新手动加资源,需要手动添加很多东西如果有必要的话才那样干吧。

分享到:
评论

相关推荐

    C#的Winform多语言实现(XML文件)

    在Winform中,使用XML文件实现多语言切换(简体中文,繁体中文,英文),可以同时切换所有打开的窗口的语言

    winform财务凭证管理系统VS开发sqlserver数据库CS结构c#编程源码程序

    winform财务凭证管理系统 是一套完善的桌面程序,设计管理系统,系统具有完整的代码数据库,系统主要采用C/S模式开发。 应用技术:winform c#+sqlserver 开发工具:vs2010 +sqlserver 二、功能介绍 (1)权限管理:对...

    抢答器用C#语言实现

    抢答器用C#语言实现 抢答器 用软件实现抢答器 .net环境实现抢答器 用c#语言实现抢答器 remoting实现抢答器 winform实现抢答器 局域网抢答器 多客户端抢答器,靠,这么多的关键字看你还搜不到!!

    C#浏览器编程,学习使用

    浏览器代码设计主要是确定对上述的设计的功能在代码上怎样实现,包括选用的程序语言和编程平台选择、程序代码的编写、程序代码的调试、程序功能的测试等等。 4.4 浏览器编程设计平台(老师讲解2学时,学生理解4学时...

    C# Winform数据库应用设计(附开发案例

    c#编程集合资料,不错的应用设计,另附一些开发案例的下载地址,欢迎大家下载学习。 学习完本课程之后,我们需要达到以下目标: (1) 掌握基本的C#语法,熟练运用C#编写基本的程序逻辑。 (2) 能够创建C#控制台...

    截图识别工具-OCR识别文字-WinForm-电脑桌面程序项目源码

    这是一个运行在Windows系统上的WinForm的桌面程序,截图识别工具,OCR识别文字项目源码,使用Visual Studio 开发工具打开修改,C#语言编程,直接编译正常运行,请放心下载,以下还有... 想要定制电脑桌面程序截图...

    win8磁贴编程多语言版(tiles)(C#,C++,JS,VB)

    win8磁贴编程相关编程,涉及tiles的样式,大小,位置,动态,及2级磁贴等等。

    C#WinForm创建数据库方法

    了解为什么建多个数据库,如何加载本机的数据库所有实例,如休登录数据库,如何用恢复的方法创建数据库和附加已有的数据库。

    截图计算器-累加计算器-WinForm-电脑桌面程序项目源码

    这是一个运行在Windows系统上的WinForm的桌面程序,截图计算器,累加计算器项目源码,使用Visual Studio 开发工具打开修改,C#语言编程,直接编译正常运行,请放心下载,以下还有... 想要定制电脑桌面程序截图识别...

    基于C#(WinForm)设计火柴棍移动【100011663】

    本项目的全部程序使用 C#语言编写,我从头学习了 C#的使用和 Windows 窗体的设计,现如今已基本掌握了这一门语言。在一开始我选择了七巧板题目,自学了 C#+openCV 的相关操作,但最终由于数图知识的欠缺,还是没能...

    摇奖机2005

    .net2005工具,C#编程语言,winform应用程序, 采用多线程

    C#菜鸟教程,每一步都有详细的注释001篇

    C#目前业内主流语言版本,本资源为C#案例教程,从最最初级开始教学,主攻刚入手C#的初学者,对编程怀有一定兴趣的,网上太多的案例都只有简单的注释,没有一个明确的分级以及拓展,本教程从零开始,每一步都有详细的...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    第1篇 C#编程基础篇 第1章 C#开发环境的使用 2 1.1 Visual Studio开发环境的安装与配置 3 实例001 配置合适的Visual Studio 2012开发环境 3 实例002 设置程序代码行号 4 实例003 使开发环境全屏显示 5 实例004 根据...

    C#编程模式之工厂方法模式+抽象工厂模式

    它适用于需要一次性创建多个相关对象,以形成一个族群。抽象工厂模式通常由抽象工厂、具体工厂、抽象产品和具体产品组成。通过切换具体工厂实现类,可以改变整个族群。 工厂方法模式:它将对象的创建延迟到子类中...

    计算机软件编程全套教程(500多页文档,包括教学代码和案例)

    下载文件为word文档全文540页,包括C#基础教学,C#Winform编程,SQL数据库,HTml网页制作,Javascript脚本语言,ASP.NET教学等等

    C#调用C++底层代码

    WCF、WPF、Silverlight和区别(转) SilverLight可以看作是WPF的一个简化版本,... WPF相对于WinForm,将美工(控件样式设置)与实现(代码的业务实现)分开,是一种新的架构方式。 VS2008新特性是.Net Framework 3.5。

    C# 教程PPT完整版(15章)适合初学者学习使用

    第2章-Visual C#.NET语言基础.pdf 第3章-流程控制.pdf 第4章-函数.pdf 第5章-定义类.pdf 第6章-数组、字符串和集合.pdf 第7章-Winform初步-第1部分.pdf 第7章-Winform初步-扩展.pdf 第8章-程序调试、异常处理及不...

    基于.NET的SunnyUI.NET开源控件库设计源码

    项目包含589个文件,主要使用C#编程语言。文件类型包括357个C#源代码文件、121个资源文件、76个PNG图片文件、7个TTF字体文件、3个Markdown文档、3个配置文件、3个ICO图标文件、2个EditorConfig文件、2个SLN解决方案...

Global site tag (gtag.js) - Google Analytics