TaskVision本地化

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

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

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

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

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

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

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

代码下载:http://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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出
原文连接,否则保留追究法律责任的权利。
*************************************************************************
posted @ 2008-10-05 21:43 阿鹏 阅读(1644) 评论(9)  编辑 收藏 网摘 所属分类: 小菜之智能客户端

  回复  引用  查看    
#1楼 2008-10-05 22:47 | 代码乱了      
TaskVision针对智能客户端这块,不知道2.0有哪些变化
  回复  引用    
#2楼 2008-10-06 08:54 | novice [未注册用户]
我还是比较喜欢WinForm的,不喜欢做网页。
  回复  引用    
#3楼 2008-10-06 10:40 | 番茄花园 [未注册用户]
楼主用的是番茄花园XP?
  回复  引用  查看    
#4楼 [楼主]2008-10-06 12:50 | 阿鹏      
@代码乱了
暂时才发现TaskVision1.0并没有很好的利用类型化DataSet的特性.
由于TaskVision并没有2.0版本,所以我只能一步一步将其转为2.0版本,等我发现需要变化的地方都会指出.


  回复  引用  查看    
#5楼 [楼主]2008-10-06 12:52 | 阿鹏      
@novice
--引用--------------------------------------------------
novice: 我还是比较喜欢WinForm的,不喜欢做网页。
--------------------------------------------------------
我二者都挺喜欢, :) .不过web弄多了,想玩点新花样.


  回复  引用  查看    
#6楼 [楼主]2008-10-06 12:53 | 阿鹏      
@番茄花园
--引用--------------------------------------------------
番茄花园: 楼主用的是番茄花园XP?
--------------------------------------------------------
这都被你看出来,真强. :)
  回复  引用  查看    
#7楼 2008-10-06 15:55 | 毁于随      
那些软件都是没有标题行的空窗体,上面的东西要么是画上去,要么是图片堆的.然后进行必要的模拟,比提拖动.你试一下这些窗体,正常情况的窗体是需要拉标题行才能够移动的,而模拟的只要在窗体的任一部分(非最大化状态)拖动都可以.
  回复  引用  查看    
#8楼 2008-10-06 16:53 | www.guyazi.com      
呵呵,本人做的多语言网站可能更强,随时可以变换界面语言,并且允许任何人参与翻译,最后由管理员确定使用哪种翻译版本。

我一直关注这方面开发,不过我真的不喜欢使用VS自带的那种多语言支持文件的方式来搞多语言开发——无法或者很难让对VS非专业的翻译人员使用。
  回复  引用  查看    
#9楼 [楼主]2008-10-06 18:19 | 阿鹏      
@毁于随
--引用--------------------------------------------------
毁于随: 那些软件都是没有标题行的空窗体,上面的东西要么是画上去,要么是图片堆的.然后进行必要的模拟,比提拖动.你试一下这些窗体,正常情况的窗体是需要拉标题行才能够移动的,而模拟的只要在窗体的任一部分(非最大化状态)拖动都可以.
--------------------------------------------------------
我刚才试了腾迅qq,确实,不过那么多图片,就像最小化,最大化,关闭,使用button一个个加图片?还有其它部份使用PictureBox等,拼出来的?
因为没有见过类似这种专业软件界面的源码,所以感觉很抽象.




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-10-07 20:17 编辑过
Google站内搜索
[推荐职位]上海盛大网络招聘架构师



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: