Вы должны удалить последние 2 строки в цикле foreach.
В этих строках указывается, что вы ищете информацию о локализации в файле System.Windows.Forms.ToolStripMenuItem.resx, но вы хотите просмотреть файл ресурсов Forms.
ToolstripMenuItems добавляются в коллекцию DropStownItems ToolStripItems, а не в коллекцию Controls вашей формы. Это может помочь вам решить вашу проблему.
private void ChangeLanguage(string lang) {
ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));
foreach (Control c in this.Controls) {
resources.ApplyResources(c, c.Name, new CultureInfo(lang));
}
foreach (ToolStripItem item in toolStrip1.Items) {
if (item is ToolStripDropDownItem)
foreach (ToolStripItem dropDownItem in ((ToolStripDropDownItem)item).DropDownItems) {
resources.ApplyResources(dropDownItem, dropDownItem.Name, new CultureInfo(lang));
}
}
}
Если у вас есть другие выпадающие элементы, вы должны рассмотреть рекурсивный подход.
Редактировать: На мой первый комментарий
private void ChangeLanguage(string lang) {
ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));
foreach (Control c in this.Controls) {
resources.ApplyResources(c, c.Name, new CultureInfo(lang));
}
ChangeLanguage (toolStrip1.Items);
}
private void ChangeLanguage(ToolStripItemCollection collection) {
foreach (ToolStripItem item in collection) {
resources.ApplyResources(item, item.Name, new CultureInfo(lang));
if (item is ToolStripDropDownItem)
ChangeLanguage(((ToolStripDropDownItem)item).DropDownItems);
}
}