用资源更改WinForm的语言

我有以下方法来更改winform的语言。

private void LoadLanguage(string lang) { foreach (Control c in this.Controls) { ComponentResourceManager resources = new ComponentResourceManager(typeof(MainForm)); resources.ApplyResources(c, c.Name, new CultureInfo(lang)); } } 

我在Form_Load方法上调用此方法。 在窗体内部我有一个选项卡控件但tabPage文本属性不会更改。 另一方面, Label正确地更改为适当的语言。 有什么建议?

删除您的方法,并尝试在Program.cs文件中执行此操作:

 //Add this line Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageString); Application.Run(new Form()); 

编辑:

您的代码无效的主要原因是您为表单控件应用了语言。 这意味着您应用于TabControl控件,但TabControl也有“内部”控件(标签页)。 因此,您需要通过控件递归迭代以应用所有控件和子控件的语言。 试试这段代码:

 private void LoadLanguage(string lang) { ComponentResourceManager resources = new ComponentResourceManager(typeof(main)); CultureInfo cultureInfo = new CultureInfo(lang); doRecursiveLoading(this, cultureInfo, resources); } private void doRecursiveLoading(Control parent, CultureInfo cultureInfo, ComponentResourceManager resources) { foreach (Control c in parent.Controls) { resources.ApplyResources(c, c.Name, cultureInfo); if (c.Controls.Count > 0) doRecursiveLoading(c, cultureInfo, resources); } }