C#实现多国语言的界面切换
2016-03-12 09:30
525 查看
在PictureStudio中,我需要实现多国语言的界面切换,而且切换各种语言版本的时候希望程序是动态的加载语言,不希望切换语言后重新启动程序。
实现这样的功能可以有很愚蠢的方法,比如说你可以在程序中为界面上的所有国家的文字信息,在代码中进行赋值,你可以想像这样的做法是可以的,但绝对是愚蠢的,代码不应该写得这么丑陋。如果需要实现10个不同语言的版本,那你的代码中每一个涉及到界面文字的控件都要有至少10行代码,而且维护的时候,需要到代码中去修改不同语言显示,这显然是很糟糕的。
把语言文字作为资源,而不是放在代码中。在.NET开发中,VS2005为每一个窗口都自动创建一个与窗口同名的资源文件,后缀名为.resx(如下图)
private void languageMenuEnglish_Click(object sender, EventArgs e)
//根据当前的语言区域,更新主窗口的语言信息
private void UpDataMainFormUILanguage()
//根据当前的语言区域,更新主窗口菜单的语言
private void UpDataMainFormMenuLanguage(ResourceManager rm)
//根据当前的语言区域,更新主窗口工具栏的语言
private void UpDataMainFormToolBarLanguage(ResourceManager rm)
private void languageMenuSimlpeChinese_Click(object sender, EventArgs e)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CHS");
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
UpDataMainFormUILanguage();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
以上的处理方法,在有众多语言版本需要实现时,代码量都差不多,添加一种语言版本,只要添加相应的资源文件,代码中只要加上两句,1设置程序当前语言区域属性,2调用读取资源的函数。当发现语言有需要更正的地方时,可以相当方便在资源文件中修改,而不用动源代码。切换文字区域后,程序也不用重新启动,Paint.Net程序切换后需要重新启动,我不知道他们的具体做法是怎样的。但我使用的方法避免了重新启动程序,应该更好些吧。
切换为中文的情况:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/gamer_gerald/%E4%B8%AD%E6%96%87%E7%95%8C%E9%9D%A2.jpg)
切换为英文的情况:
实现这样的功能可以有很愚蠢的方法,比如说你可以在程序中为界面上的所有国家的文字信息,在代码中进行赋值,你可以想像这样的做法是可以的,但绝对是愚蠢的,代码不应该写得这么丑陋。如果需要实现10个不同语言的版本,那你的代码中每一个涉及到界面文字的控件都要有至少10行代码,而且维护的时候,需要到代码中去修改不同语言显示,这显然是很糟糕的。
把语言文字作为资源,而不是放在代码中。在.NET开发中,VS2005为每一个窗口都自动创建一个与窗口同名的资源文件,后缀名为.resx(如下图)
private void languageMenuEnglish_Click(object sender, EventArgs e)
//根据当前的语言区域,更新主窗口的语言信息
private void UpDataMainFormUILanguage()
//根据当前的语言区域,更新主窗口菜单的语言
private void UpDataMainFormMenuLanguage(ResourceManager rm)
//根据当前的语言区域,更新主窗口工具栏的语言
private void UpDataMainFormToolBarLanguage(ResourceManager rm)
private void languageMenuSimlpeChinese_Click(object sender, EventArgs e)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CHS");
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
UpDataMainFormUILanguage();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
以上的处理方法,在有众多语言版本需要实现时,代码量都差不多,添加一种语言版本,只要添加相应的资源文件,代码中只要加上两句,1设置程序当前语言区域属性,2调用读取资源的函数。当发现语言有需要更正的地方时,可以相当方便在资源文件中修改,而不用动源代码。切换文字区域后,程序也不用重新启动,Paint.Net程序切换后需要重新启动,我不知道他们的具体做法是怎样的。但我使用的方法避免了重新启动程序,应该更好些吧。
切换为中文的情况:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/gamer_gerald/%E4%B8%AD%E6%96%87%E7%95%8C%E9%9D%A2.jpg)
切换为英文的情况:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/gamer_gerald/%E8%8B%B1%E6%96%87%E7%95%8C%E9%9D%A2.jpg)