Lokalisierung von Usercontrols bei Laufzeit

howc1

Grünschnabel
Hallo

Ich hab folgendes Problem in C#: (Framework anfangs 2... seit gestern 3.5)
Ich hab eine Mainform mit Menu, Toolstrip und mehreren Usercontrols. Ein Button auf der Form sorgt für die Lokalisierung. Ich schalt einfach um zwischen Deutsch-Französisch.

Beim Klick auf den Language-Button führe ich das aus:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR"); //oder "de-DE"

Alle neuen Forms werden in Französisch angezeigt. Super... äh... superb :)

ABER: Die Mainform bleibt davon völlig unbeeindruckt. Wie in einem anderen älteren Thread hier beschrieben geh ich rekursiv dann alle Controls durch.

foreach (Control ctrl in AllControls)
{
if (ctrl.Controls.Count > 0)
Rekursion
else
resources.ApplyResources(ctrl, ctrl.Name);
}

//Codekurzform. Ich caste den Menustrip noch mal eigen weil man einen Seperator so //schlecht übersetzen kann. etc

So weit so gut. Das Menu wird übersetzt -> Funktioniert.
Nur hab ich dann mehrere Usercontrols auf der Mainform.

In der Rekursion taucht als Control mein Usercontrol auf. Ja, es hat noch mehr child-controls-> wir gehen in die Rekursion. In der Rekursion wird auch jedes ChildControl im UC behandelt und geht in das resources.ApplyResources rein. Aber es übersetzt sich nicht.

Um mal die Basics-Gegenfragen auszuschließen: Ja ich habs (fast) richtig lokalisiert.
Beweis: Wenn ich vor dem Initialize Component der Mainform die Culture setze, dann wird das Usercontrol übersetzt. (Mit dem kleinen Feature, dass die Größe sich verändert.)
Wenn ich nach meiner Rekursion ein Usercontrol.Controls.Clear und ein InitializeComponent ausführe, dann wird auch übersetzt.

Ich hab schon versucht die Resourcen von der Usercontrol-Ressource-Datei ebenfalls in der Ressource-Datei der Mainform abzulegen. Interessiert das Control auch nicht.

Also beim Programmstart lokalisieren: No Problem
Bei Laufzeit... ist tricky.

Also... hat jemand eine Theorie was ich falsch mache?

thx
Andreas
 
Zuletzt bearbeitet:

Nico Graichen

Erfahrenes Mitglied
Hi

Du musst in deinem UserControl ebenfalls diese Routine implementieren, da das UserControl eigene Resourcen nutzt.
 

howc1

Grünschnabel
Die Lösung war so simpel, ....bzw. mein Problem äußerst dämlich.

Ich hab mir den Resourcemanager erzeugt

ComponentResourceManager res = new ComponentResourceManager(typeof(MainForm));

und dann völlig vergessen.
Das Typeof... räusper...

Jetzt erweitere ich meine Rekursion. Bei den Usercontrols wird ein neuer ComponentResourceManager erzeugt und schon gehts. THX