博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

TaskVision本地化

Posted on 2008-10-05 21:43  a-peng  阅读(2521)  评论(9编辑  收藏  举报

(一)、引言
本地化可能有点专业术语,通俗一点说就是支持多国语言。
本地化在.Net中的实现真的是太简单了,不过对于没有接触过的朋友可能并不知道。

(二)、完成效果
先看下完成后的效果有助于提高大家的兴趣。

情节:默认中文显示 TaskVision1.0  自动更新为 TaskVision2.0
   更改显示方式为英文

image 
间隔15秒左右,客户端检测到更新
image
点击是,提示更新完成
image
点击是,运行新版本TaskVision 2.0
image
选择语言-》英文
image
image 
点击是,启动英文版本
 image

情节:从英文显示 TaskVision1.0 自动更新为 TaskVision2.0
   更改显示方式为中文

具体省略,怕图片太多,大家加载速度会很慢,显示重点。
检测到更新

image 
下载完成
image 
启动新版本,切换为中文
image 

代码下载:https://files.cnblogs.com/a-peng/SmartClient_Chapter02.rar

(三)、分析
看了上面的效果后,你心动了吗,心动的话就看下去,你很快就将拥有它。

注意:左边栏类似Windows XP左边栏的效果使用TaskVision中自带的第三方控件XPanderControl.dll。没有源码。
不过还有一个效果一样名称一样的开源控件大家可以看下:http://www.codeproject.com/KB/cpp/XPander.aspx 


我们设计完主窗体MainForm后,设置其属性Localizable为true。
则主窗体中显示的文本都被嵌入到资源文件中,如下图:
image

我们复制该资源文件,命名为MainForm.en.resx
修改内容如下图:
image 

修改主窗体MainForm构造函数如下:

public MainForm()
{
    Thread.CurrentThread.CurrentUICulture 
= new System.Globalization.CultureInfo("en");
    InitializeComponent();
}

运行程序,我们立马可以看到英文本的效果。注意修改当前UI界面文化必须在InitializeComponent()之前。
为何修改文化为en,则会显示英文呢?因为修改文化为en,则系统会自动加载相关文化的资源如MainForm.en.resx就显示英文了,同理可以添加其它语言的资源文件,则可支持其它语言。

我们还创建了两个资源:Localize.resx,Localize.en.resx用来存放程序中用到的一些文本。
注意使用ResourceManager加载该资源文件时,必须加上命名空间TaskVision。
主窗体源码如下:

using System;
using System.Windows.Forms;

using System.Resources;
using System.Threading;
using Microsoft.Win32;

namespace TaskVision
{
    
public partial class MainForm : Form
    
{
        
private const string m_registryKey = @"Software\Microsoft\TaskVision"// 注册表位置
        private const string m_defaultCultureName = "";
        
private const string m_englistCultureName = "en";

        
private ResourceManager m_resourceManager = new ResourceManager("TaskVision.Localize", System.Reflection.Assembly.GetExecutingAssembly());

        
public MainForm()
        
{
            
string selectedLanguage = Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName;
            RegistryKey regKey 
= Registry.CurrentUser.OpenSubKey(m_registryKey);

            
try
            
{
                
if (regKey != null && regKey.GetValue("Language"!= null)
                
{
                    selectedLanguage 
= regKey.GetValue("Language").ToString();
                    regKey.Close();
                    Thread.CurrentThread.CurrentUICulture 
= new System.Globalization.CultureInfo(selectedLanguage);
                }

            }

            
catch
            
{
            }


            InitializeComponent();

            
if (selectedLanguage == m_englistCultureName)
            
{
                menuChinese.Checked 
= false;
                menuEnglish.Checked 
= true;
            }

            
else
            
{
                menuChinese.Checked 
= true;
                menuEnglish.Checked 
= false;
            }

        }


        
private void MainForm_Load(object sender, EventArgs e)
        
{

        }


        
菜单栏

        
AppUpdater自动更新
    }

}

好了,就到这里了。

希望越来越多的朋友加入到WinForms的开发中,多写一些心得体会互相交流。
比如如何不使用第三方控件,构建中类似千千静听,PPStream,腾迅qq之类专业软件的界面效果。小菜不知道如何下手。

*************************************************************************
作者:a-peng
出处:
http://a-peng.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出
原文连接,否则保留追究法律责任的权利。
*************************************************************************