网上看了一些,还要自己编译生成.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;
}
这里另一个问题就出来了,这个弹出的提示要重启的消息是用中文还是用英文,最好也写到配置文件里,并检测语言设置,设置为什么语言就显示什么语言的提示消息。
这种方法的缺点就是不能立即生效,如果要立即生效的话需要重新手动加资源,需要手动添加很多东西如果有必要的话才那样干吧。
分享到:
相关推荐
在Winform中,使用XML文件实现多语言切换(简体中文,繁体中文,英文),可以同时切换所有打开的窗口的语言
winform财务凭证管理系统 是一套完善的桌面程序,设计管理系统,系统具有完整的代码数据库,系统主要采用C/S模式开发。 应用技术:winform c#+sqlserver 开发工具:vs2010 +sqlserver 二、功能介绍 (1)权限管理:对...
抢答器用C#语言实现 抢答器 用软件实现抢答器 .net环境实现抢答器 用c#语言实现抢答器 remoting实现抢答器 winform实现抢答器 局域网抢答器 多客户端抢答器,靠,这么多的关键字看你还搜不到!!
浏览器代码设计主要是确定对上述的设计的功能在代码上怎样实现,包括选用的程序语言和编程平台选择、程序代码的编写、程序代码的调试、程序功能的测试等等。 4.4 浏览器编程设计平台(老师讲解2学时,学生理解4学时...
c#编程集合资料,不错的应用设计,另附一些开发案例的下载地址,欢迎大家下载学习。 学习完本课程之后,我们需要达到以下目标: (1) 掌握基本的C#语法,熟练运用C#编写基本的程序逻辑。 (2) 能够创建C#控制台...
这是一个运行在Windows系统上的WinForm的桌面程序,截图识别工具,OCR识别文字项目源码,使用Visual Studio 开发工具打开修改,C#语言编程,直接编译正常运行,请放心下载,以下还有... 想要定制电脑桌面程序截图...
win8磁贴编程相关编程,涉及tiles的样式,大小,位置,动态,及2级磁贴等等。
了解为什么建多个数据库,如何加载本机的数据库所有实例,如休登录数据库,如何用恢复的方法创建数据库和附加已有的数据库。
这是一个运行在Windows系统上的WinForm的桌面程序,截图计算器,累加计算器项目源码,使用Visual Studio 开发工具打开修改,C#语言编程,直接编译正常运行,请放心下载,以下还有... 想要定制电脑桌面程序截图识别...
本项目的全部程序使用 C#语言编写,我从头学习了 C#的使用和 Windows 窗体的设计,现如今已基本掌握了这一门语言。在一开始我选择了七巧板题目,自学了 C#+openCV 的相关操作,但最终由于数图知识的欠缺,还是没能...
.net2005工具,C#编程语言,winform应用程序, 采用多线程
C#目前业内主流语言版本,本资源为C#案例教程,从最最初级开始教学,主攻刚入手C#的初学者,对编程怀有一定兴趣的,网上太多的案例都只有简单的注释,没有一个明确的分级以及拓展,本教程从零开始,每一步都有详细的...
第1篇 C#编程基础篇 第1章 C#开发环境的使用 2 1.1 Visual Studio开发环境的安装与配置 3 实例001 配置合适的Visual Studio 2012开发环境 3 实例002 设置程序代码行号 4 实例003 使开发环境全屏显示 5 实例004 根据...
它适用于需要一次性创建多个相关对象,以形成一个族群。抽象工厂模式通常由抽象工厂、具体工厂、抽象产品和具体产品组成。通过切换具体工厂实现类,可以改变整个族群。 工厂方法模式:它将对象的创建延迟到子类中...
下载文件为word文档全文540页,包括C#基础教学,C#Winform编程,SQL数据库,HTml网页制作,Javascript脚本语言,ASP.NET教学等等
WCF、WPF、Silverlight和区别(转) SilverLight可以看作是WPF的一个简化版本,... WPF相对于WinForm,将美工(控件样式设置)与实现(代码的业务实现)分开,是一种新的架构方式。 VS2008新特性是.Net Framework 3.5。
第2章-Visual C#.NET语言基础.pdf 第3章-流程控制.pdf 第4章-函数.pdf 第5章-定义类.pdf 第6章-数组、字符串和集合.pdf 第7章-Winform初步-第1部分.pdf 第7章-Winform初步-扩展.pdf 第8章-程序调试、异常处理及不...
项目包含589个文件,主要使用C#编程语言。文件类型包括357个C#源代码文件、121个资源文件、76个PNG图片文件、7个TTF字体文件、3个Markdown文档、3个配置文件、3个ICO图标文件、2个EditorConfig文件、2个SLN解决方案...