繁体   English   中英

在运行时本地化winform并更改语言

[英]localize winform and change language at runtime

我在更改表格中的语言时遇到问题。 我表格中的文字全部是英语文字。 当我在组合框中选择西班牙语时,没有任何反应。 在选择法语时也是如此。我的本地化格式为TRUE。 我的语言是默认语言。 我的代码有什么问题? 需要帮忙。 为我的项目。

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;

IYou应该更改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));
            }
        }
    }
}

可能对您自己来说会迟到,但我希望这样可以对其他人有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM