C#多语言应用程序菜单条项

C#多语言应用程序菜单条项,c#,winforms,multilingual,contextmenustrip,C#,Winforms,Multilingual,Contextmenustrip,我正在努力使我的程序多语言,我几乎做到了。其余的控件运行正常,但我的菜单条出现问题 当我在英语和土耳其语之间切换程序语言时,子菜单项会发生变化,但主菜单项不会发生变化 如您所见,当选择土耳其语项时,子菜单项使用土耳其语,当选择英语项时,子菜单项也使用英语 以下是我切换语言的代码: private void türkçeToolStripMenuItem_Click(object sender, EventArgs e) { türkçeToolStripMenuItem

我正在努力使我的程序多语言,我几乎做到了。其余的控件运行正常,但我的菜单条出现问题

当我在英语和土耳其语之间切换程序语言时,子菜单项会发生变化,但主菜单项不会发生变化

如您所见,当选择土耳其语项时,子菜单项使用土耳其语,当选择英语项时,子菜单项也使用英语

以下是我切换语言的代码:

private void türkçeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        türkçeToolStripMenuItem.Checked = true;
        ingilizceToolStripMenuItem.Checked = false;

        ChangeLanguage(typeof(MainForm), "tr");
    }

    private void ingilizceToolStripMenuItem_Click_1(object sender, EventArgs e)
    {
        ingilizceToolStripMenuItem.Checked = true;
        türkçeToolStripMenuItem.Checked = false;

        ChangeLanguage(typeof(MainForm), "en");
    }

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

        foreach (ToolStripItem item in metroContextMenu1.Items)
        {
            if (item is ToolStripDropDownItem)
                foreach (ToolStripItem dropDownItem in ((ToolStripDropDownItem)item).DropDownItems)
                {
                    resources.ApplyResources(dropDownItem, dropDownItem.Name, new CultureInfo(lang));
                }
        }
    }

您的
ApplyResources
仅应用于
dropDownItem
,而不是主

    foreach (ToolStripItem item in metroContextMenu1.Items)
    {
        if (item is ToolStripDropDownItem)
            foreach (ToolStripItem dropDownItem in ((ToolStripDropDownItem)item).DropDownItems)
            {
                resources.ApplyResources(dropDownItem, dropDownItem.Name, new CultureInfo(lang));
            }
        //Also apply resources to main toolstrip items. 
        resources.ApplyResources(item, item.Name, new CultureInfo(lang));
    }

哇,这真的很简单,我很惊讶我怎么会错过这个。谢谢@colmde,它帮了很多忙。