2012-04-03 82 views
2

我希望我的WinForms应用程序有三种不同的语言,即阿拉伯语,英语和法语。我现在这样做的方式是使用资源文件(转换表)和遍历控件层次结构的递归过程(root是最上面的Form),并将每个控件的当前Text的翻译版本分配给它的Text属性。问题是这对菜单(和其他控件)不起作用。国际化我的独立应用程序

任何想法?

+0

这是对的WinForms? – 2012-04-03 13:51:34

+0

@AdamHouldsworth是 – saadtaame 2012-04-03 13:52:05

+1

是的。请按照[Microsoft I18n指南](http://msdn.microsoft.com/en-us/goglobal/bb688110)。使用阿拉伯语你有更多的工作要做(正确处理方向性,使用'MessageBox.Show()'的有效重载,确保正确的字体等)。看看[这个问题](http://programmers.stackexchange.com/q/98358/2554)。 – 2012-04-03 18:26:25

回答

1

可以使用Localizable属性本地化System.Windows.Forms.Form实例。这样可以使Language属性允许您根据需要更改语言环境,以对表单进行修改。然后将这些修改存储在以语言环境(与标准资源文件完全相同)为后缀的资源文件中。然后将它们编译成附属程序集,其余部分由CLR处理。

我已经看到了这种混合成功的使用 - 如果我记得,VS设计师有图像列表的问题。

http://msdn.microsoft.com/en-us/library/y99d1cd3(v=vs.100).aspx

有滚动自己的优势 - 但是UI往往是总是的主要障碍这条路线。

0

您可以使用Winforms的Localizable属性。

CodeProject有一个很好的散步。

我们分解了多个资源文件中的资源,一些是本地化的,一些是标准的(非显示字符串)。然后我们使用Resourcemanager来管理字符串。

1

我认为你应该使用不同的方法。

对于您要本地化的每个表单,请转到表单的属性并将其可本地化的属性设置为true。

然后从语言 droplist属性中,选择要支持的语言并输入相应的文本。

冲洗并重复每种语言。

对于字符串表,您可以为每种语言 添加新Resources.??.resx文件(例如,Resources.de.resx德国)

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