我希望我的WinForms应用程序有三种不同的语言,即阿拉伯语,英语和法语。我现在这样做的方法是使用资源文件(转换表)和遍历控件层次结构的递归过程(root是最顶层的Form)并将每个控件的当前Text
的翻译版本分配给它的Text
财产。问题是这不适用于菜单(和其他控件)。
有什么想法吗?
答案 0 :(得分:1)
可以使用System.Windows.Forms.Form
属性本地化Localizable
个实例。然后,这将启用Language
属性,允许您根据需要更改区域设置以对表单进行修改。然后将这些修订存储在以区域设置为后缀的资源文件中(与标准资源文件完全相同)。然后将它们编译成附属程序集,其余部分由CLR处理。
我已经看到这种情况并没有成功 - 如果我记得,VS设计师在图像列表方面存在问题。
http://msdn.microsoft.com/en-us/library/y99d1cd3(v=vs.100).aspx
滚动自己有好处 - 但是UI通常总是是这条路线的主要障碍。
答案 1 :(得分:1)
我认为你应该使用不同的方法。
对于您要本地化的每个表单,请转到表单的属性并将其可本地化属性设置为true。
然后,从语言下拉列表属性中,选择您要支持的语言并输入相应的文字。
为每种语言冲洗并重复。
对于字符串表,您可以为每种语言添加新的Resources.??.resx文件 (例如,德语的Resources.de.resx)
答案 2 :(得分:1)
如果您想在不重新启动应用程序的情况下即时更改语言,则需要使用与上述人员相关的功能。
//refresh all the controls e sub-controls of the form
private void RefreshResources(Control ctrl, ComponentResourceManager res)
{
ctrl.SuspendLayout();
res.ApplyResources(ctrl, ctrl.Name, CurrentLocale);
foreach (Control control in ctrl.Controls)
RefreshResources(control, res); // recursion
ctrl.ResumeLayout(false);
}
如果您想要更完整的示例,请检查my blog
答案 3 :(得分:0)
您可以使用Winforms的Localizable属性。
CodeProject有一个很好的步行。
我们分解了多个资源文件中的资源,一些是本地化的,一些是标准的(非显示字符串)。然后我们使用Resourcemanager来管理字符串。