我在更改表单中的语言时遇到问题。我的表格中的文字都是英文文本。当我在组合框中选择西班牙语时,没有任何事情发生。选择法语时也一样。我的表格中的本地化是正确的。我的语言是默认的。我的代码出了什么问题?需要帮忙。对于我的项目。
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedItem.ToString() == "English")
{
ChangeLanguage("en");
}
else if (comboBox1.SelectedItem.ToString() == "Spanish")
{
ChangeLanguage("es-ES");
}
else if (comboBox1.SelectedItem.ToString() == "French")
{
ChangeLanguage("fr-FR");
}
}
private void ChangeLanguage(string lang)
{
foreach (Control c in this.Controls)
{
ComponentResourceManager resources = new ComponentResourceManager(typeof(UserLogin));
resources.ApplyResources(c, c.Name, new CultureInfo(lang));
}
}
我添加的名称空间
using System.Globalization;
using System.Threading;
答案 0 :(得分:1)
我应该更改Thread.CurrentUICulture以匹配所选的文化。即使AFAIK如果指定要在ApplyResources方法中应用哪种文化并不重要,它对于本地化字符串(例如,对于MessageBoxes)以及之后加载的任何其他表单都很重要。
此外,请确保还将新资源应用于子GroupBox控件,这对我来说非常有用。这将是代码:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedItem.ToString() == "English")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
ChangeLanguage("en");
}
else if (comboBox1.SelectedItem.ToString() == "Spanish")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES");
ChangeLanguage("es-ES");
}
else if (comboBox1.SelectedItem.ToString() == "French")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
ChangeLanguage("fr-FR");
}
}
private void ChangeLanguage(string lang)
{
foreach (Control c in this.Controls)
{
ComponentResourceManager resources = new ComponentResourceManager(typeof(UserLogin));
resources.ApplyResources(c, c.Name, new CultureInfo(lang));
if (c.ToString().StartsWith("System.Windows.Forms.GroupBox"))
{
foreach (Control child in c.Controls)
{
ComponentResourceManager resources_child = new ComponentResourceManager(typeof(UserLogin));
resources_child.ApplyResources(child, child.Name, new CultureInfo(lang));
}
}
}
}
可能会为自己迟到,但我希望如果有的话可以帮助其他人。