Ich habe eine sehr häufige Frage. Was ist der beste Weg, um eine Lokalisierung in einer WPF-App zu machen? Nun, ich habe viel in SO und Binged gesucht. Aber ich konnte keine Hinweise finden, die wirklich einfach und elegant sind.
Angenommen, ich muss in der Benutzeroberfläche etwa Folgendes anzeigen:
In Englisch: Orgnanization - Beoing
Auf Französisch: Organizzazione - Beoing
%Vor%Grundsätzlich muss ich den lokalisierten Text dem Organization Label TextBlock zuweisen. Soll ich den Bindestrich von "Organisation -" trennen und auf ein separates Etikett setzen?
Wie mache ich das?
Erstellen Sie ein Projekt WpfApplication1
Erstellen Sie einen Ordner 'Lokalisierung'
Fügen Sie eine Ressourcendatei (Strings.resx) in 'localization \' hinzu und fügen Sie die Zeichenfolge 'OrganizationText' und den Wert 'Organization'
hinzuBeim Kompilieren wird eine Datei namens designer.cs generiert. Leider sind alle Methoden in dieser Datei intern und wir benötigen öffentliche Zugriffsrechte, um String-Referenzen von wpf zu aktivieren. Ersetzen Sie dazu das benutzerdefinierte Tool .resx durch 'PublicResXFileCodeGenerator' (& gt; = vs2008) und bauen Sie es erneut auf. Verwenden Sie diese XAML in MainWindow.xaml:
%Vor%Um '-' hinzuzufügen, müssen Sie Multibinding verwenden (siehe Eric Bole-Feysot 27.09.2012 10:49
I Binden Sie alle Beschriftungen usw. in meiner Anwendung an ein Objekt, das ich für die Anzeige der verschiedenen Sprachen verwende. Ich speichere alle Zeichenfolgen in einer Datenbank und lade nur die richtigen Zeichenfolgen auf der Grundlage der Sprache, die der Benutzer ausgewählt hat. Dies hat den Vorteil, dass es während der Laufzeit sofort aktualisiert wird. Auf diese Weise muss der Benutzer die Anwendung nicht neu starten, als würden Sie das Fenster "Localizable" machen.
Sehen Sie sich dieses Whitepaper an. Wenn ich mich richtig erinnere, wird erklärt, wie man das Ressourcenwörterbuch in xaml für die Lokalisierung verwendet -
Dieses Projekt enthält ein Whitepaper mit Codebeispielen, um Windows zu helfen Präsentationsstiftung (WPF) Entwickler lokalisieren ihre Anwendungen. Das Whitepaper vergleicht LocBaml und klassische Resx Ansätze mit Vor- und Nachteilen.
Wir verfügen über eine Anwendung, die zur Laufzeit UI-Sprachen wechseln kann und neue UI-Sprachen verwenden kann, indem die entsprechenden Ressourcen in ein bestimmtes Verzeichnis kopiert werden. Die Verwendung einiger kompilierter Resoures hierfür ist viel zu unflexibel in Bezug auf die Verteilung usw. So haben wir unsere Sprachressourcen in einem ResourceDictionary als System: Strings - ein ResourceDictionary in einer separaten XAML-Datei für jede Sprache. Die XAML-Dateien werden in VS mit Inhalt gekennzeichnet und kopiert. Sie können sie als DynamicResources in XAML oder über eine Localizer-Instanz in C # verwenden. Dieses Konzept hat sich in unserer Anwendung als sehr nützlich erwiesen.
Ich habe eine komplette Lokalisierungslösung (inkl. Übersetzungseditor) erstellt, die auch XAML-Übersetzungen durch eine Reihe von MarkupExtensions unterstützt. Es verwendet ein Wörterbuch mit allen übersetzten Texten (einschließlich Singular- / Pluralformen), auf die über MarkupExtensions von XAML oder normale Methoden aus anderem Code zugegriffen werden kann. Die MarkupExtensions unterstützen auch das Ändern der Sprache zur Laufzeit und sogar ein Update, wenn die zugrunde liegende Wörterbuchdatei geändert wird.
Weitere Funktionen sind lokalisierte Datums- / Uhrzeit- und Zahlenformatierungen und typografische Helfer.
Ich verwende diese Bibliothek erfolgreich in einigen Anwendungen und plane, sie in Zukunft in weiteren Apps einzusetzen.
Tags und Links wpf .net xaml localization