Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要多语言UI类的帮助吗_C#_Oop_Class_Interface_Multilingual - Fatal编程技术网

C# 需要多语言UI类的帮助吗

C# 需要多语言UI类的帮助吗,c#,oop,class,interface,multilingual,C#,Oop,Class,Interface,Multilingual,我是OOD新手,所以我对如何使用类来创建多语言UI有一个疑问 我想创建一个可用于我应用程序中所有表单的类,这样我就可以随时更改UI语言。基本思想是将语言资源保存在xml文件中,并为所有控件创建数据绑定,以便在加载新语言资源文件时更改Text属性 最后,我为应用程序主窗体上的所有控件创建了绑定,当窗体加载绑定源的datasource类时,会从语言存储类的字段中读取字符串。在我想同时更改所有其他表单的UI语言之前,一切都可以。静态类的数据绑定似乎不起作用,或者我太笨了,不想使用它 .NET 3.5、

我是OOD新手,所以我对如何使用类来创建多语言UI有一个疑问

我想创建一个可用于我应用程序中所有表单的类,这样我就可以随时更改UI语言。基本思想是将语言资源保存在xml文件中,并为所有控件创建数据绑定,以便在加载新语言资源文件时更改Text属性

最后,我为应用程序主窗体上的所有控件创建了绑定,当窗体加载绑定源的datasource类时,会从语言存储类的字段中读取字符串。在我想同时更改所有其他表单的UI语言之前,一切都可以。静态类的数据绑定似乎不起作用,或者我太笨了,不想使用它

.NET 3.5、C、VS2008 Express用于WPF的解决方案

您需要创建XML文件,第一个文件将包含静态控件的本地化,即在应用程序模板点上获取本地化字符串的控件,第二个文件将包含动态表单(如MessageBox)的本地化字符串,或者动态更改控件内容的位置。然后,对于动态字符串,您需要描述enum,例如,哪些值应该是DynamicStrings.xml的键

这是基地。然后在更改语言时,您需要在两个字典中填入两种本地化字符串类型的键和值。此外,您还需要经理,他将关心如何为每个需要出现的地方获得具体的字符串

对于控件:绑定到任何字符串属性,例如,将其命名为EmptyText,然后写入转换器,该转换器将作为静态字典的转换器参数键获取,并返回该键的值:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (parameter != null && parameter is string)
                       return MessageManager.Instance.GetUITextById((string)parameter);
            return value;
        }
对于动态控件:只需将其作为管理器的初始化参数传递:

MessageBox.Show(MessageManager.Instance.GetDynamicMessage(Messages.HelloWorldMessage));

如果MessageManager使用singleton模式-您是一个使用XML和字典处理所有本地化操作的类,则GetDynamicMessage将从DynamicDictionary中按枚举值获取字符串,消息-您的枚举。

您使用什么平台,WPF或WinForms?这样做,更改静态类中的语言也会启动表单刷新。正如我提到的,数据绑定对静态类成员不起作用。当我尝试添加绑定时,它会导致异常:label1Binding=label1.DataBindings.AddText,interfaceBinding,label1;DataMember Label1是静态类的字段。为什么要使用数据绑定进行本地化?只需创建一个本地化方法和本地化标题,或使用winForms:和Form.Language等的本地化属性。有完整源代码示例的最终解决方案吗?他正在使用Windows窗体,正如他在评论中所述。Eugene,谢谢你的回答。单例模式似乎适合我的应用程序,所以我将尝试使用它