一、 演示如下图:

 

二、 下载源代码:/Files/NewLand/CustomerCulter.rar

三、 参考资料:

Msdn:

http://msdn.microsoft.com/zh-cn/library/system.globalization.cultureinfo(VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/c6zyy3s9(VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/y99d1cd3.aspx
http://msdn.microsoft.com/zh-cn/library/9xdxwwkc.aspx

StringResourceTool:
http://stringresourcetool.codeplex.com/
http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/8f92a4cf-9598-4758-b385-1adeccf56afd 

Other:

http://www.codeproject.com/KB/cs/formlanguageswitch.aspx?fid=132823&select=2307173#xx2307173xx


四、关键步骤

    1)本地化UI

           1. 将Form的localizable设为true

           此时你将看到Form1.Designer.cs中关于控件的属性都消失了,而是用类似这样的语句替代了:
           resources.ApplyResources(this.button1, "button1");
           其他:其他控件如图所示摆放,并写上中文Text
           2. 将Form的language选为‘英语’
           此时你将看到在解决方案资源管理器中新生成了一个名为Form1.en.resx。这个文件存放了英文环境下的资源。
           3. 将Form中的button的Text改为‘I`m english’;菜单项也做相应的英文修改
           4. 接下来就是点击【英文】菜单时候将界面的元素应用英文的资源 
        private void ReInitial()//重新应用界面元素的资源,没有找到更好的方法,就采取了这种简单的方法,有待提高
         {
            this.Controls.Clear();
            InitializeComponent(); 
         }
           void ChangeUICulter(string language)
          {
             Thread.CurrentThread.CurrentCulture = new CultureInfo(language);
             Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
          }

         private void englishToolStripMenuItem_Click(object sender, EventArgs e)
          {
              ChangeUICulter("en-us");
                    ReInitial();
                } 
         

           2)本地化动态字符串

                   1.  在项目上右击添加新项->资源文件:取名为WinFormStrings.resx

                    在资源文件中添加一个变量msgStr,值为’好‘
            按照1的步骤再加一个资源文件取名为:WinFormStrings.en-us.resx
            在资源文件中添加一个变量msgStr,值为’ok‘
               2.  在按钮点击时间中这样写:
              private void button1_Click(object sender, EventArgs e)
              {
                  ResourceManager LocRM = new ResourceManager("CustomerCulter.WinFormStrings"typeof(Form1).Assembly);

                   MessageBox.Show(LocRM.GetString("msgStr"));

               }

             

            posted on 2009-05-11 14:50  kuning的程序博客  阅读(658)  评论(1编辑  收藏  举报