Heute wollen wir uns mal anschauen, wie wir eine WPF-Anwendung lokalisieren können. Dies geht etwas anders als bei klassischen Winforms-Anwendungen.
Bei Windows-Forms schaltet man einfach die Sprache im visuellen Designer um. Anschließend können die Texte im grafischen Editor übersetzt werden. Auch Abstände, Positionen und Ausrichtung der Elemente kann hier geändert werden. Diese Möglichkeit gibt es in WPF nicht. Da hier tendentiell auch eher mit dynamischen Layouts gearbeitet wird, ist das auch nicht unbedingt notwendig. Idealerweise passt sich die Programmoberfläche entsprechend der Breite der Texte an.
Anlegen der Resourcendateien
Zuerst legen wir die Resourcen-Dateien an. In unserem Projekt befindet sich bereits eine im Properties-Ordner, welche wir für die Default-Sprache verwenden werden.
Idealerweise legen wir hier zuerst alle Strings an, welche wir später übersetzen werden.
Nun kopieren wir die Datei für die gewünschte Sprache bzw. Sprachen. In den Dateinamen fügen wir den Sprachencode ein:
Nun folgt die Übersetzung der Strings.
Zuletzt ändern wir den Zugriff auf die Resourcen-Dateien aus „Public“.
Übersetzungen in Xaml einfügen
Zuerst binden wir den Namespace unserer Resourcen ein:
xmlns:p="clr-namespace:FormMakerWPF.Properties"
Anschließend können wir die Texte in den Xaml-Code einbinden:
Title="{x:Static p:Resources.FormCreationWizardWindow_Title}"
Auch im Code können wir auf unsere Resourcen zugreifen:
this.Title = FormMakerWPF.Properties.Resources.FormCreationWizardWindow_Title;
Manuelles setzen der Sprache im Code
Um die Sprache der Anwendung zu setzen, führen wir zum Programmstart folgenden Code aus:
CultureInfo myCultureInfo = new CultureInfo("de"); CultureInfo.DefaultThreadCurrentCulture = myCultureInfo; CultureInfo.DefaultThreadCurrentUICulture = myCultureInfo; Thread.CurrentThread.CurrentCulture = myCultureInfo; Thread.CurrentThread.CurrentUICulture = myCultureInfo;
Im Beispiel wird die Sprache auf Deutsch gesetzt, sowohl für die Threads, als auch für den Default-Thread. Das Ergebnis ist die Übersetzung der Anwendung:
Fazit
Wie man sieht funktioniert die Lokalisierung etwas anders, als mit Winforms-Anwendungen. Es ist etwas mehr Handarbeit, aber insgesamt gefällt mir diese manuelle Art deutlich besser. Man hat mehr Kontrolle und kann sich seine eigenen Resourcen-Dateien anlegen und verwalten.