| 

.NET C# Java Javascript Exception

4
Hallo zusammen,

ich lese mich gerade in Lokalisierung von WPF Anwendungen ein und bin auf einen sehr hilfreichen Artikel in der MSDN gestoßen.
Aber mal ganz ehrlich, das erfordert schon viel Aufwand (kommt mir zumindest im Moment so vor). Das war meiner Meinung nach mit WinForms wesentlich einfacher zu realisieren. Allerdings habe ich für WinForms-Anwendungen auch irgendwann ein Vorgehen als Best-Practice identifizieren können, das fehlt mir natürlich bei WPF noch komplett. Vielleicht ist es ja doch nicht so aufwändig, wie mir das im Moment erscheint.

Daher meine Frage an Euch:

Macht Ihr das mehr oder weniger so, wie in der MSDN beschrieben, gibt es Fallstricke, auf die man sich einstellen sollte und habt Ihr vielleicht bereits für Euch etablierte Best-Practices? Kennt jemand evtl. kommerzielle Tools, die einem viel Arbeit ersparen?

Ich suche quasi eine minimalinvasive und effiziente Methode. Könnt Ihr mir da bitte weiterhelfen?

EDIT:
Für mich wäre auch ganz wichtig, das ich die vers. Sprachen in SatelliteAssemblies unterbringen kann.

Danke im Voraus für Eure Beiträge.
Gruß
Florian
26.07.2011
ffordermaier 8,4k 3 9
1
Ich bin mit dem MSDN-Artikel nicht klar gekommen und habe mir daher etwas anderes rausgesucht: http://www.wpftutorial.net/LocalizeMarkupExtension.html
Damit lässt sich im XAML recht einfach eine Lokalisierung verwenden. Nachteil: Im Desinger stehen dann nur die MarkupExtensions statt der Texte.
jsc 26.07.2011
Danke für den Link. Das sieht auch sehr interessant aus. Werd ich mir die Tage auch mal genauer anschauen.
ffordermaier 26.07.2011
3 Antworten
6
Hallo,

in WPF ist das am einfachsten wenn du die ganzen Strings in Resource Dictionaries packst.
Im ResourceDictionary gibst du dann jedem String einen eindeutigen Key mit welchem du nachher den String laden kannst.

Im C# Code kannst du die Daten aus dem ResourceDictionary laden. Da erstellst du dir noch am besten eine kleine Helperklasse welche das für dich macht. Dann kannst du deine Texte mit dem Key laden

Im Xaml Code kannst du die Strings aus dem ResourceDictionary mit DynamicResource laden. Damit wird es automatisch aktualisiert wenn die resourcen-datei gewechselt wird
Also z.B.

<TextBlock Text="{DynamicResource MyString}" />

Sobald du die Sprache in deinem Programm wechseln willst, muss du das aktuelle Sprach-ResourceDictionary mit dem neuen ResourceDictionary austauschuen (also in dem MergedDictionary). Zudem musst du auch noch CurrentUICulture und CurrentCulture setzen

Ist jetzt vielleicht etwas viel Input auf einmal aber das Ganze ist in WPF relativ einfach

Das was da in der MSDN beschrieben wird hab ich mir auch mal angeschaut. Aber wirklich überzeugt hat mich das nicht.
Das ist einfach viel zu umständlich. Und gerade in WPF hat man mit den ResourceDictionaries ein praktisches Hilfsmittel

Gruß
Michael
26.07.2011
michlG 1,7k 1 5
Danke erstmal für die Antwort, das klingt ganz ähnlich wie ich das in WinForms immer gemacht habe. Ich schau mir das gleich mal an. Was für mich nocht wichtig wäre, dass die einzelnen ResourceDictionaries der vers. Sprachen in Satellite-Assemblies untergebracht werden können (hab ich im OP ergänzt). Hast Du hierzu noch einen Hinweis für mich? Danke.
ffordermaier 26.07.2011
Das mit den Satellite-Assemblies sollte auch kein Problem sein. Die Resource Dictionaries kannst du im Prinzip von überall laden
michlG 26.07.2011
Danke michlG. Daraus hab ich ein Vorgehen ableiten können, das bis auf wenige Details meinem Vorgehen bei WinForms entspricht. :-))
ffordermaier 26.07.2011
2
Hallo Florian,

den Weg den Microsoft in dem von Dir verlinkten Artikel beschreibt solltest Du ganz schnell wieder vergessen. In der Praxis ist das so nicht durchführbar.

Neben dem Microsoft Weg gibt es prinzipiell zwei Möglichkeiten für die Lokalisierung:

Die erste Möglichkeit wäre, die Anwendung manuell lokalisierbar zu machen, in dem Du Resx-Dateien verwendest und Deine XAML-Dateien so anpasst, dass sie alle Texte (und was sonst noch so lokalisiert werden muss) aus den Resx-Dateien lesen. Dafür gibt es etliche kostenlose Bibliotheken aus der .NET Community, die z.B. über Bindings, Markuperweiterungen oder Attached Properties arbeiten. Einige davon werden z.B. in der WPF Localization Guidance auf Codeplex vorgestellt: http://wpflocalization.codeplex.com/. Da diese aber inzwischen auch nicht mehr ganz aktuell ist findest Du sicher auch noch weitere Tools, die ähnlich arbeiten.

Nachteil bei diesem Weg ist, dass Du sämtliche XAML-Dateien manuell anpassen musst und keinerlei Toolunterstützung dafür bekommst. Außerdem sind Resx-Dateien und der Resx-Editor nicht unbedingt der komfortabelste Weg, Ressourcen zu bearbeiten (wobei es hier auch gute kostenlose Editoren wie den Zeta Resource Editor gibt, http://www.zeta-resource-editor.com/index.html).

Die zweite Möglichkeit ist der Einsatz eines Lokalisierungstools. Da gibt es etliche Anbieter, die schon seit Jahren Tools für alle möglichen Plattformen entwickeln und nebenbei auch noch WPF unterstützen. <Eigenwerbung>Und dann gibt's da noch unser Tool, NLocalize. Wir bieten ein Lokalisierungstool speziell für WPF, Silverlight und WP7 (also XAML), das auf diese Technologien spezialisiert ist und sich direkt in Visual Studio 2010 integriert. Ein Video zu NLocalize findest Du unter http://www.neovelop.de/nlocalize.</Eigenwerbung>

Nachteil des zweiten Ansatzes sind natürlich die Lizenzkosten. Hier musst Du selbst für Dich entscheiden, ob die durch die Tools gesparte Arbeitszeit den Anschaffungspreis rechtfertigt oder nicht.

Falls Du noch Fragen zum Thema Lokalisierung hast kannst Du mir auch gern schreiben (am besten einfach über die Kontaktfunktion auf neovelop.de).

Grüße,
Mathias
28.07.2011
oocx 71 1 5
Danke für Deinen Beitrag. Die Tools werd ich mir die Tage mal anschauen.
ffordermaier 28.07.2011
2
Falls nochmal jemand ein ähnliches Problem haben sollte:

Ich bin mittlerweile bei den WpfLocalizeExtensions gelandet und kann nur Positives darüber berichten. Lokalisierung so wie ich sie mir vorgestellt habe. Einstiegshürde minimal, funktioniert tadellos.

Ich hab vieles ausprobiert in der Zwischenzeit, aber das angesprochene Projekt ist wirklich erstklassig.
02.10.2013
ffordermaier 8,4k 3 9
Danke für den Tipp, war auch gerade auf der Suche nach einem geeigneten Weg für die Lokalisierung in WPF.
multi1209 07.10.2013

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH