我是OOD的新手所以我对使用类创建多语言UI有疑问。
我想在我的应用中创建一个可用于所有表单的类,这样我就可以随时更改UI语言。基本思想是保持xml文件中的语言资源并为所有控件创建数据绑定,以便每当我加载新的语言资源文件时都会更改Text属性。
我最终为app的主窗体上的所有控件创建了绑定,当表单加载绑定源时,datasource类从语言存储类的字段中读取字符串。一切都很好,直到我想同时更改所有其他形式的UI语言。静态类的数据绑定似乎不起作用,或者我只是太愚蠢而无法使用它。
.NET 3.5,C#,VS2008 Express
答案 0 :(得分:0)
解决方案 FOR 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(使用单例模式) - 您是使用xmls和词典处理所有本地化操作的类,GetDynamicMessage将通过DynamicDictionary的枚举值获取字符串,消息 - 您的枚举。