WPF Anwendung lokalisieren und übersetzen

Veröffentlicht von

WPF-Anwendungen bzw. Formulare zu übersetzungen funktioniert etwas anders als bei Windows-Forms-Dialogen. Bei diesen kann man bequem die Sprache in der IDE umschalten und anschließend die Texte übersetzen.

Bei WPF-Anwendungen hat man den Komfort nicht ganz. Aber auch hier lässt sich die Übersetzung recht schnell bewerkstelligen.

Gehen wir von einer einfachen Anwendung mit einem Dialog aus:

Wir haben hier den Anwendungstitel, zwei Labels und den Button zu übersetzen. Für jeden dieser Texte legen wir einen Eintrag in der Resourcendatei an:

Ebenfalls setzen wir den "AccesModifier" auf "Public". Dies ist notwendig um aus der XAML-Datei darauf zugreifen zu können.

Die Resourcendatei wird nun kopiert, bzw. dupliziert, und mit entsprechend der Lokalisierung benannt. Da ich die Anwendung nach Deutsch übersetzen möchte, heißt die neue Datei Resources.de.resx:

Nun müssen wir in der Formulardatei die Texte noch zuweisen. Im Quelltext der XAML-Datei machen wir zuerst den Namespace des Properties Namespaces bekannt:

xmlns:p = "clr-namespace:WPFLocExample.Properties"

Anschließend können die Texte ersetzt werden. Dies geschieht z.B. so, dass wir für den "Content" des Schließen-Buttons folgenden Code einsetzen:

{x:Static p:Resources.buttonClose}

Dies wird für alle Elemente gemacht:

Um der Anwendung zu sagen, welche Sprache genutzt werden soll, wird abschließend noch die Datei "App.xml.cs" bearbeitet:

public partial class App : Application
{
    App()
    {
        System.Threading.Thread.CurrentThread.CurrentUICulture 
                    = new System.Globalization.CultureInfo("de");
    }
}

Starten wir die Anwendung, sollte diese in der gewählten Sprache, im Beispiel Deutsch erscheinen:

Wie man sieht lassen sich WPF-Anwendungen leicht übersetzen. Auch wenn im Gegensatz zu Windows-Forms-Anwendungen etwas mehr Gefummel notwendig ist. Manch einer wird dies auch als Vorteil ansehen. 🙂

Texte im Quelltext können wie gehabt ebenfalls über die Resourcendateien übersetzt werden. Siehe dazu in den weiterführenden Links.

Download des Beispiels

Das Beispielprojekt kann hier heruntergeladen werden.

Weiterführende Links

2 Kommentare

  1. Bei meinem Projekt, als auch bei deinem heruntergeladenen kommt folgende Meldung bei “Content=”{x:Static…”: Der Name “Resources” ist im Namespace “clr-namespace:WPFLocExample.Properties” nicht vorhanden.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert