我有一个MenuStrip控件,其中包含为多种语言输入的所有翻译。当我尝试动态更改文化时,除了MenuStrip之外,所有控件都在更改语言。这是我专门为MenuStrip使用的代码:
protected ComponentResourceManager res2;
private void signOutToolStripMenuItem_Click(object sender, EventArgs e)
{
LoginForm login = new LoginForm();
if (login.ShowDialog() == DialogResult.OK)
{
//this is for other controls
resManager = new ComponentResourceManager(this.GetType());
this.ApplyResources(this, Thread.CurrentThread.CurrentCulture);
//this is for MenuStrip
res2 = new ComponentResourceManager(typeof(MenuStrip));
this.ApplyResourcesToolStripMenuItem(Thread.CurrentThread.CurrentCulture);
}
}
private void ApplyResourcesToolStripMenuItem(CultureInfo lang)
{
foreach (ToolStripItem m in this.menuStrip1.Items)
{
//resources.ApplyResources(m, m.Name, lang);
if (m is ToolStripMenuItem)
{
string text = res2.GetString(m.Name + ".Text", lang); //Exception is thrown here
if (text != null)
m.Text = text;
}
}
}
我在本论坛中使用了另一个开发人员的代码示例,并做了一些小改动。 现在,当我在运行时更改文化时,我得到以下异常:
发生了'System.Resources.MissingManifestResourceException'类型的未处理异常 mscorlib.dll中
其他信息:找不到适合的资源 指定的文化或中性文化。确保 “System.Windows.Forms.MenuStrip.resources”已正确嵌入或 在编译时链接到程序集“System.Windows.Forms”,或者 所需的所有卫星组件都是可加载的并且已完全签名。
我检查了资源文件,并且所有的MenuStripItem都包含所有的翻译/值......
我未能在互联网上找到解决方案,所以非常感谢您的帮助。
提前致谢!
答案 0 :(得分:0)
因此,由于我是本地化的初学者,因此解决方案比我发布的解决方案容易得多。也许这对其他初学者也有帮助。
因此,我删除了所有实际上令人头疼的代码,并将其替换为以下代码:
Thread.CurrentThread.CurrentUICulture = new CultureInfo(StaticValues.currentCulture);
this.Controls.Clear();
this.InitializeComponent();
它很容易。是的,感谢Adriano Repetti!