我有一个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参数。
有人有什么想法吗?
答案 0 :(得分:1)
MSDN对字符串本地化进行了演练,可能对您有用link
答案 1 :(得分:0)
老实说,你试图避免的方法对我来说是最好的。我建议你为控件创建一个属性,你试图设置Text。在“设置”属性中,检查所选语言并为您获取相应的文本。
public string Error
{
set { _errorLabel.Text = value; }
}
private void SetText()
{
if(EnglishSelected)
Error = "English";
}
关于浪费时间,我建议不要在设计器中设置任何内容,并直接在Load表单中设置属性。但我想再补充一点,任何方法都不会达到您的应用程序速度。首先是它使您的应用程序可扩展和可维护,然后快速实现。在设计师中设置逻辑事物总是一种不好的做法。如果您的应用程序不小/小,那么我建议您遵循一些设计模式,如MVP,并在Presenter中移动所有这些逻辑事物。不试图传教,只是建议。
是的,在我们公司,其中一个团队正在开发应用程序的本地化部分。使用资源可能是更好的方法。
希望它有所帮助。