如何实现软件的多语言切换?????

时间:2023-01-26 04:25:19
窗体的本地化 不用说了。  切换Language的时候会自动生成一个资源文件。
我想要做到的是,如何在切换Language的时候能让程序中的提示信息也能切换语言? 
比如说  后台程序中有  MessageBox.Show("欢迎光临!");
在切换到英语的时候,应该是弹出一个  “Welcome!” 的窗体,而不是“欢迎光临!”
我现在已经添加了两个资源文件,一个是中文的Language-CH.resx,一个是英文的Language-EN.resx,但是不知道如何在程序中判断是调用Language-CH.resx还是Language-EN.resx???
我可不想在每次有MessageBox.Show()的时候都判断一下Thread.CurrentThread.CurrentUICulture

最好是能有一个类似于工厂模式的办法,能根据Thread.CurrentThread.CurrentUICulture来判断是应该用Language-CH.resx还是Language-EN.resx
这样就只需要 MessageBox.show(CurLanguage.****)就可以了。
其中CurLanguage是根据Thread.CurrentThread.CurrentUICulture来决定是返回的Resource.Language-CH还是Resource.Language-EN

请问有高人知道怎么实现吗????

8 个解决方案

#1


这个是要卖钱的。。。

#2


做的时候做成多种语言的呗!!!

#3


public static Languages SystemLanguages
{
     get
     {
         return (Languages)System.Reflection.Assembly.Load(".......").CreateInstance(string.Format("......."), true);

     }
}
不可以吗?

#4


你可以这样啊,自己写一个弹消息的类,然后在这个类里面进行判断,然后其他弹消息的调用你这个类的方法,不就可以了,写个静态方法,基本一样的啊

#5


  public class MsgShow
{
        //1是什么语,2是什么语
        int language = 0;
        public MsgShow()
        {
            //判断语言
            language = ?;
        }
        public static void showMsg()
        {
            switch (switch_on)
            {
                    MessageBox.Show();
                default:
            }
        }
}

#6


不单单是 MessageBox.Show()
也可能是程序中对 界面元素的覆值啊。
比如说: button1.text="保存";button1.text="更新";

#7


经研究   已经解决..........
资源文件命名上采用:Language.zh-CH.resx和Language.en-EN.resx再默认一个Language.resx文件即可。
但是又发现一个新问题。。。。。。。
MessageBox.Show(Language.***,MessageBoxButtons.OK,MessageBoxIcon.Information);
这个时候   弹出来的  按钮 是“确定”而不是“OK”............

#8


资源文件

#1


这个是要卖钱的。。。

#2


做的时候做成多种语言的呗!!!

#3


public static Languages SystemLanguages
{
     get
     {
         return (Languages)System.Reflection.Assembly.Load(".......").CreateInstance(string.Format("......."), true);

     }
}
不可以吗?

#4


你可以这样啊,自己写一个弹消息的类,然后在这个类里面进行判断,然后其他弹消息的调用你这个类的方法,不就可以了,写个静态方法,基本一样的啊

#5


  public class MsgShow
{
        //1是什么语,2是什么语
        int language = 0;
        public MsgShow()
        {
            //判断语言
            language = ?;
        }
        public static void showMsg()
        {
            switch (switch_on)
            {
                    MessageBox.Show();
                default:
            }
        }
}

#6


不单单是 MessageBox.Show()
也可能是程序中对 界面元素的覆值啊。
比如说: button1.text="保存";button1.text="更新";

#7


经研究   已经解决..........
资源文件命名上采用:Language.zh-CH.resx和Language.en-EN.resx再默认一个Language.resx文件即可。
但是又发现一个新问题。。。。。。。
MessageBox.Show(Language.***,MessageBoxButtons.OK,MessageBoxIcon.Information);
这个时候   弹出来的  按钮 是“确定”而不是“OK”............

#8


资源文件