我有一个带有许多控件的窗口,它们以容器形式组织,并且想要翻译UI(即“text”属性)。
最好的方法是什么?
我试图迭代表单中的所有控件,但遇到麻烦,因为每个容器提供了访问其子级的不同方式。
有更复杂的方法吗?我已经在使用不同文化的ResourceManager,所以如果我可以将它用于我的目标,那就太棒了。
编辑: 我的问题是我不能使用递归,因为MenuStrip控件,例如,它使用“Items”属性而不是“Controls”来访问其项目。 StatusStrip控件类似。
我已在https://codereview.stackexchange.com/questions/721/automatic-translation-of-forms发布了我的解决方案 - 我很想听听您的评论!
答案 0 :(得分:1)
您需要做的只是两个步骤: 1 - 将窗体的Localizable属性设置为true。 2 - 将表单的语言设置为所需的语言并编辑文本属性。 - 默认情况下,语言设置为(默认)。您需要将语言设置为某种特定语言,如西班牙语,日语等。在设置语言时,您还需要进行一些更改以获取生成所需语言的.resx文件。完成此操作后,您需要将表单的语言设置为另一种所需的语言,并修改控件的text属性。
执行上述步骤后,您会注意到每种语言都有一个资源文件,在更改操作系统的UI文化/区域设置时会自动加载。
答案 1 :(得分:0)
要迭代表单中的所有控件,您需要递归。假设您在某种形式的方法中放置了“Walk(this)”,那么下面的代码将检查每个控件。
static void Walk(Control control)
{
foreach (var c in control.Control)
Walk(c);
}