0

我有一个 WinForms 应用程序,我目前正在其中实现翻译引擎。到目前为止,我拥有的是一堆遵循以下语法的文本文档:

messages.manualupdate="There is a manual update available for ProgName.\n\nDo you want to update to version {0}.{1}.{2}{3}?"
messages.errorcopy="Clicking OK will copy the error so you can paste it elsewhere!"
messages.error="Error"
messages.notsupported.title="Unsupported client"
messages.notsupported.message="This version is no long supported. Please wait for an update."

我有很多不同语言的,例如:

messages.manualupdate="é disponibile un'aggiornamento manuale del programma ProgName.\n\nVuoi aggiornare alla versione {0}.{1}.{2}{3}?"
messages.errorcopy="Cliccando OK eseguirete una copia degli errori visualizzati"
messages.error="Error"
messages.notsupported.title="Client non supportato"
messages.notsupported.message="Questa versione non è utilizzabile al momento. attendi il prossimo aggiornamento!"

然后我将其解析为DynamicObject我可以访问的language.messages.notsupported.error. 我想知道的是我是否可以以某种方式链接表单上的所有控件以在创建时使用来自动态对象的变量。例如,我的表单上有一个按钮,我希望在其中包含文本“错误”。在表单显示之前,我将language变量设置为用户选择的语言,然后当表单显示时,它只是从language. 有没有办法在设计器中执行此操作,而不必编写在 Forms 构造函数中调用的方法,因为在我看来,将所有按钮文本设置为一个值然后全部更改它们有点浪费当表单加载时。我正在寻找一种绑定,但要控制 Text 参数。

有人有想法么?

4

2 回答 2

1

MSDN 有一个可能对您有用的字符串本地化演练链接

于 2012-12-21T07:35:46.720 回答
0

老实说,你试图避免的方法对我来说是最好的。我建议您为尝试设置文本的控件创建一个属性。在设置属性中,检查选择的语言并为您获取适当的文本。

public string Error
{
    set { _errorLabel.Text = value; }
}

private void SetText()
{
    if(EnglishSelected)
        Error = "English";
}

关于浪费时间,好吧,我只是建议不要在设计器中设置任何东西,直接在加载表单中设置属性。但我想在这里再补充一点,任何方法都不会影响您的应用程序速度。首先是关于使您的应用程序可扩展和可维护,然后是关于使其快速。在设计器中设置逻辑事物始终是一种不好的做法。如果您的应用程序不是很小/很小,那么我建议您遵循一些设计模式,例如MVP,并将所有这些逻辑的东西移到 Presenter 中。不是试图说教,只是建议。

是的,我们公司的一个团队正在处理应用程序的本地化部分。使用资源可能是这样做的更好方法。

希望能帮助到你。

于 2012-12-21T07:37:48.650 回答