Zitat: |
das mit den Design-Objekten (Formular) hab ich (fast) vestanden. Nur wie weise ich nun einem Formualr die Sprache dynamisch zur Laufzeit zu? |
Da hast du das System misverstanden.
Die App startet soll ja mit den lokalisierten einstellungen _starten_. Nachträgliches Ändern erfordert ein bisschen Gefriemel:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| void cultureInfoBindingSource_PositionChanged(object sender, EventArgs e) { Thread.CurrentThread.CurrentUICulture = cultureInfoBindingSource.Current as CultureInfo;
ApplyResources(this); }
static void ApplyResources(Control owner) { ComponentResourceManager resourceManager = new ComponentResourceManager(owner.GetType());
resourceManager.ApplyResources(owner, "$this");
foreach (Control control in owner.Controls) { ApplyTo(resourceManager, control); } }
static void ApplyTo(ComponentResourceManager resourceManager, Control control) { resourceManager.ApplyResources(control, control.Name);
foreach (Control subControl in control.Controls) { ApplyTo(resourceManager, subControl); } } |
Zitat: |
Nur könntest du mir für "nomrale resources, die nicht mit einer designable class verknüpft sind"ein Beispiel posten? |
Schaue mal in die Properties deines Projektes. Dort findest du bereits eine Resources.resx.
Öffne sie mal und trage einen String namens Hello mit dem Wert Hello ein.
Jetzt kommen wir zu einer absolut widerlichen Macken im VS:
Um deine Default resx vernünftig benutzen zu können, musst du sie aus denm Properties Ordner auf deinen Projektnamen ziehen. (Der Solution Explorer verhält sich einfach nur dämlich innerhalb der Properties)
Ctrl gedrückt halten und die Resource nochmal auf's Projekt ziehen. (Wie im richtigen Explorer kopiert das die Datei.
Bei dieser Kopie änderst du den Namen auf Resources.de.resx und darin den Wert für Hello auf Hallo.
Außerdem kannst im PropertyGrid das CustomTool entfernen. (Die Resource-Klasse wird bereits für die .resx angelegt und ist somit für die .de.resx witzlos.
)
Zitat: |
Wie greif ich dann besipielsweise bei der Ausgabe einer MessageBox zu? |
Unglaublich easy:
C#-Quelltext
1:
| MessageBox.Show(Resources.Hello); |
Jeder Eintrag in der resx wird als statische Property abgebildet.
Zitat: |
Und wie muß ich die Hierarchie der resx Files genau aufbauen, damit das Framework das richtige File findet? |
Schaue dir einfach mal die Ordnerstruktur in deinem Debug/Release ordner an. Durch diese Spielereien hat das nämlich das VS schon für dich gemacht.