0

フォームの言語を変更する際に問題があります。私のフォームのテキストはすべて英語のテキストです。コンボボックスでスペイン語を選択しても何も起こりません。フランス語を選択する場合も同じです。私のフォームのローカライズ可能性は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;

4

1 に答える 1

1

IYou は、選択したカルチャに一致するように Thread.CurrentUICulture を変更する必要があります。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));
            }
        }
    }
}

おそらくあなた自身のために遅れるでしょうが、そうであれば他の人の助けになることを願っています.

于 2013-05-08T08:39:23.077 に答える