【发布时间】:2017-10-15 20:20:07
【问题描述】:
我正在尝试制作一个简单的方法来翻译我的应用程序。 我想也许可以通过覆盖 Graphics 类在文本绘图级别使用 Dictionary 翻译表单。 甚至以相同的方式编辑绘图点以支持 RightToLeft 语言。 有人有什么好主意吗?
【问题讨论】:
标签: c# winforms graphics drawtext language-translation
我正在尝试制作一个简单的方法来翻译我的应用程序。 我想也许可以通过覆盖 Graphics 类在文本绘图级别使用 Dictionary 翻译表单。 甚至以相同的方式编辑绘图点以支持 RightToLeft 语言。 有人有什么好主意吗?
【问题讨论】:
标签: c# winforms graphics drawtext language-translation
我认为也许可以通过覆盖 Graphics 类在文本绘制级别使用 Dictionary 翻译表单。
Graphics 类不能被覆盖。您可以覆盖控件的OnPaint 方法。但是,您如何将文本绘图与任何其他绘图区分开来?例如,如果有人读取Text 属性,您期望得到什么?
有人有什么好主意吗?
是的,使用内置解决方案进行本地化。只需将表单上的Localizable 属性设置为true。现在,您可以在设计时切换语言并在设计时编辑该语言的所有内容,不仅是文本,还包括 RightToLeft 属性、大小以及基本上所有内容。
当您启动应用程序时,表单将使用 Windows 语言或回退到固定语言。如果您想以编程方式更改语言,只需设置 Thread.CurrentThread.CurrentUICulture 属性。您可能需要重新打开表单以应用该语言或明确致电 InitializeComponent()。
【讨论】:
Text 属性返回控件上的文本,为什么会出现问题?如果您需要固定的东西,可以使用 Name 属性,您也可以将 Tag 用于任何自定义目的。
Localizable就可以看到生成的InitializeComponents方法是如何变化的。 ApplyResources(它是内置的“翻译引擎”)也使用 Name 属性。因此,在您的翻译字典中,Name 属性应该是键(常量),Text 是值(可变)。