需要帮助多语言UI的类

时间:2010-07-14 10:19:32

标签: c# oop class interface multilingual

我是OOD的新手所以我对使用类创建多语言UI有疑问。

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

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

.NET 3.5,C#,VS2008 Express

1 个答案:

答案 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的枚举值获取字符串,消息 - 您的枚举。