2010-07-14 41 views
0

我是OOD新手,所以我有一个关于使用类创建多语言用户界面的问题。需要帮助与多种语言的用户界面

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

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

.NET 3.5,C#,VS2008快递

+0

你使用什么平台,WPF或WinForms? – 2010-07-14 10:23:03

+0

我正在使用WinForms – beastofman 2010-07-14 10:28:29

+0

在静态类中更改语言也会启动表单的刷新。 – 2010-07-14 10:31:05

回答

0

解决方案为WPF

您需要创建XML文件时,首先会包含静态控件的本地化(意味着在获得有本地化字符串控制OnApplyTemplate点),第二个将包含像MessageBox这样的动态表单的本地化字符串,或者您将动态地改变控件的内容。然后,对于动态字符串,您需要描述枚举,这些值应该是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在哪里(使用单件模式) - 是你的类,处理所有的本地化操作与XML,并字典,GetDynamicMessage将通过来自DynamicDictionary的枚举值获得字符串,Messages - 您的枚举。

+0

他正在使用** Windows Forms **,如他的评论中所述。 – 2010-07-14 10:47:48

+0

尤金,谢谢你的回答。单例模式似乎适合我的应用程序,所以我会尝试使用它 – beastofman 2010-07-14 10:59:55