国际化我的独立应用程序

时间:2012-04-03 13:50:03

标签: c# winforms internationalization translation

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

有什么想法吗?

4 个答案:

答案 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来管理字符串。