Ändern der Sprache zur Laufzeit in C# winform
Ich möchte, um die Sprache zu ändern, aber wenn ich kompilieren dies eine Ausnahme pop-up. es sagt
"Konnten keine entsprechenden Ressourcen für die angegebene Kultur oder
die Neutrale Kultur. Stellen Sie sicher, dass "System.Typ.Ressourcen" war richtig
eingebettete oder verknüpfte in assembly "mscorlib" zur compile-Zeit oder, dass
alle Satelliten-Assemblys erforderlich sind belastbar und voll signiert."
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() == "German")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("De");
ChangeLanguage("De");
}
}
private void ChangeLanguage(string lang)
{
foreach (Control c in this.Controls)
{
ComponentResourceManager resources = new ComponentResourceManager(typeof(Type));
resources.ApplyResources(c, c.Name, new CultureInfo(lang));
}
}
Irgendwelche Vorschläge?
In comboBox1_SelectedIndexChanged setzen-Konsole.Writeline ("comboBox1".SelectedItem.ToString()); so können Sie sehen, wo ist der Fehler
Mann, das ist gonna lösen nichts ...
Ich weiß, aber ich möchte wissen, ob die comboBox1_SelectedIndexChanged heißt in der formLoad
ja, es ist SettingsForm aber was auch immer, seine nicht in Hauptformular
Mann, das ist gonna lösen nichts ...
Ich weiß, aber ich möchte wissen, ob die comboBox1_SelectedIndexChanged heißt in der formLoad
ja, es ist SettingsForm aber was auch immer, seine nicht in Hauptformular
InformationsquelleAutor franzp | 2014-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem argument an den Konstruktor falsch ist, Sie sagen, es zu finden, die Ressourcen für das System.Typ. Das ist, warum es zu Klagen, dass kann es nicht finden " - System.Typ.Ressourcen". Es wird nie finden diese.
Du musst die Art von form, die Sie wirklich wollen, zu lokalisieren. Verwenden
this.GetType()
statt. Auch wenn dies wahrscheinlich nur lokalisieren, Ihre Optionen in form und nicht der rest der Fenster in Ihrem app. Man könnte die Iteration Anwendung.OpenForms() statt. Es ist auch notwendig, gelten die Lokalisierung alle die Kontrollen. Nicht nur diejenigen, auf die form, auch diejenigen, die sich in den Container wie panels. Also:Vorsichtig sein mit wiz-bang Funktionen wie diese. Eigentlich niemand änderungen Ihrer Muttersprache, während Sie mit Ihren Programm.
Wenn es funktioniert, dann gab ich Ihr die am meisten bevorzugte Ansatz. Wenn es nicht ist, dann werde ich behaupten, ich weiß nicht, wer diesen code schrieb und sagen, du bist besser dran, vorausgesetzt, dass der Benutzer die Standard-Kultur bereits entspricht seiner Sprache 🙂 Scherz beiseite, ich kann nicht garantieren, dass es funktionieren wird überall in der Welt. Es sollte nicht testen, das es so ist. Eines Tages werde ich herausfinden, wie Neutrale Kulturen der Arbeit, der Tag ist noch nicht zu schließen.
Was passiert ist, um die lang-argument übergeben wurde in ChangeLanguage()? Ich sehe es nicht überall eingesetzt.
Die Antwort war basiert auf dem OP-Auszug, beachten Sie, wie er tritt Thread.CurrentThread.CurrentUICulture vor dem Aufruf ChangeLanguage(). Nach dem das lang - argument ist eigentlich nicht mehr benötigt. Ich änderte es ein bisschen logischer.
Vielen Dank für die schnelle und hilfreiche Antwort.
InformationsquelleAutor Hans Passant
Müssen Sie über die entsprechenden Ressourcen für alle Sprachen, obwohl.
wie das zu tun, was?
ich habe resx-Datei, mit der deutschen version und englis ist usid standardmäßig. sorry im newbie habe ich nicht bekommen, diese Kultur in der Klasse viel. will nur wissen, warum mein code nicht funktioniert ...
InformationsquelleAutor Mayank