【问题标题】:need help with classes for multilingual UI需要有关多语言 UI 类的帮助
【发布时间】:2010-07-14 10:19:32
【问题描述】:

我是 OOD 新手,所以我有一个关于使用类创建多语言 UI 的问题。

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

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

.NET 3.5、C#、VS2008 Express

【问题讨论】:

  • 你使用什么平台,WPF 还是 WinForms?
  • 让它在你的静态类中改变语言也会启动你的表单刷新。
  • 正如我提到的,数据绑定不适用于静态类成员。当我尝试添加绑定时,它会导致异常: label1Binding = label1.DataBindings.Add("Text", interfaceBinding, "Label1"); DataMember "Label1" 是一个静态类的字段。
  • 为什么要使用数据绑定进行本地化?只需创建一个Localize 方法并本地化字幕或使用winForms 的本地化属性:msdn.microsoft.com/en-us/library/y99d1cd3.aspx(和Form.Language 等)。
  • 任何带有完整源代码示例的最终解决方案?

标签: c# oop class interface multilingual


【解决方案1】:

解决方案针对 WPF

您需要创建 XML 文件,第一个将包含静态控件的本地化(意味着在 OnApplyTemplate 点上获取本地化字符串的控件),第二个将包含动态表单的本地化字符串,例如 MessageBox 或您将更改的任何内容动态控制。然后对于动态字符串,你需要描述枚举,哪些值应该是 DynamicStrings.xml 的键(例如)。

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

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

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 - 您的枚举。

【讨论】:

  • 他正在使用 Windows 窗体,如他的评论中所述。
  • 尤金,感谢您的回答。单例模式似乎适合我的应用,所以我会尝试使用它
猜你喜欢
  • 2023-02-24
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2014-12-26
  • 2013-08-12
  • 2014-06-11
相关资源
最近更新 更多