【问题标题】:Is it possible to translate form language at the text drawing level?是否可以在文本绘图级别翻译表单语言?
【发布时间】:2017-10-15 20:20:07
【问题描述】:

我正在尝试制作一个简单的方法来翻译我的应用程序。 我想也许可以通过覆盖 Graphics 类在文本绘图级别使用 Dictionary 翻译表单。 甚至以相同的方式编辑绘图点以支持 RightToLeft 语言。 有人有什么好主意吗?

【问题讨论】:

    标签: c# winforms graphics drawtext language-translation


    【解决方案1】:

    我认为也许可以通过覆盖 Graphics 类在文本绘制级别使用 Dictionary 翻译表单。

    Graphics 类不能被覆盖。您可以覆盖控件的OnPaint 方法。但是,您如何将文本绘图与任何其他绘图区分开来?例如,如果有人读取Text 属性,您期望得到什么?

    有人有什么好主意吗?

    是的,使用内置解决方案进行本地化。只需将表单上的Localizable 属性设置为true。现在,您可以在设计时切换语言并在设计时编辑该语言的所有内容,不仅是文本,还包括 RightToLeft 属性、大小以及基本上所有内容。

    当您启动应用程序时,表单将使用 Windows 语言或回退到固定语言。如果您想以编程方式更改语言,只需设置 Thread.CurrentThread.CurrentUICulture 属性。您可能需要重新打开表单以应用该语言或明确致电 InitializeComponent()

    【讨论】:

    • 这个方法很有趣,我会去看看。对于您的问题,我的意思是仅将输出转换为显示,以便 Text 属性保持原始状态。
    • 那会非常具有误导性,并且缺乏所有约定。顺便说一句,如果Text 属性返回控件上的文本,为什么会出现问题?如果您需要固定的东西,可以使用 Name 属性,您也可以将 Tag 用于任何自定义目的。
    • 如果我正在翻译 Text 属性,我无法返回原始属性,如果翻译是在绘图时间内完成的,这可能会在某些情况下导致问题(例如,带有选项列表的 ComboBox) Text 属性仍然是源,因此可以随时通过重绘轻松更改语言。
    • 只要设置Localizable就可以看到生成的InitializeComponents方法是如何变化的。 ApplyResources(它是内置的“翻译引擎”)也使用 Name 属性。因此,在您的翻译字典中,Name 属性应该是键(常量),Text 是值(可变)。
    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多