Silverlight Tipp der Woche: Lokalisierte Ressourcen verwenden

by St. Lange 6. August 2010 18:35

In diesem Tipp geht es um das richtige Einbinden von lokalisierten Ressource-Dateien beispielsweise aus dem Silverlight Toolkit.

Zusammenfassung

Das Control DataPager zeigt auch unter einem deutschsprachigen Windows den Text "Page ... of ..." anstatt "Seite ... von ..." an, wenn man nicht manuell in der Projektdatei das Element <SupportedCultures> manuell anpasst.

Beschreibung

Bei manchen Controls kann es vorkommen, dass der angezeigte Content sprachabhängig ist. Das Control DataPager beispielsweise zeigt "Page ... of ..." an, selbst wenn Windows und Browser Deutsch sind. Ein kurzer Blick mit dem Debugger auf den aktuellen Thread zeigt, dass sowohl CurrentCulture als auch CurrentUICulture wie erwartet auf "de" stehen. Auch die DataPager Property Language im XAML Code auf "de" zu setzen bringt keine Veränderung - der Text bleibt englisch.

Das Problem kennen viele und im Web finden sich diverse Lösungsversuche: Von DataPager eine eigene Klasse ableiten und dann mittels Control Template eine eigene TextBox anlegen oder auch von der Assembly System.Windows.Controls.Data.dll die Strong Name Signatur entfernen und dann mit einem externen Resource Editor den String "Page" auf "Seite" ändern. Das ist aber alles unnötig, denn Microsoft hat sämtlich Controls für die von Silverlight unterstützten Sprachen lokalisiert. Man muss die Verwendung der für die jeweiligen Sprachen vorhandenen Satellite Assemblies nur aktivieren.

Der richtige Weg ist eher unerwartet: Die Projektdatei ist mit einem XML-Editor zu öffnen und im Element SupportedCultures sind die benötigten Sprachen einzutragen, beispielsweise so:

<SupportedCultures>en;de;fr</SupportedCultures>

Dieser Eintrag führt dazu, das beim Build für alle im Projekt referenzierten Assemblies geprüft wird, ob es dazu zusätzliche deutsche bzw. französische Satellite Assemblies gibt. Alle diese zusätzlichen Assemblies werden mit in die XAP-Datei gepackt. Zur Laufzeit werden sie dann von der Klasse ResourceManager automatisch verwendet, sofern die aktuelle Culture Einstellung des Browsers dazu passt. Im Detail ist das hier beschrieben: How to: Create a Build that Targets a Specific Culture

Wenn man genauer darüber nachdenkt, ist es eigentlich logisch, dass man Visual Studio irgendwie mitteilen muss, für welche Sprachen es die Satellite Assemblies mit den lokalisierten Ressourcen in die XAP-Datei packen soll. Es wäre bei Silverlight ja ziemlich unklug, immer alle Satellite Assemblies für sämtliche vorhandenen Sprachen hinzuzufügen, selbst wenn die Anwendung beispielsweise nur für den deutschsprachigen Raum bestimmt ist. Die XAP-Datei würde unnötig vergrößert.

Dass man allerdings das XML der Projektdatei manuell bearbeiten muss, passt überhaupt nicht zu Visual Studio (und schon gar nicht zu Visual Studio 2010). Ein Eingabefeld unter den Silverlight Projektoptionen wäre sehr hilfreich, da vermutlich kaum jemand erwartet, dass eine so grundsätzliche Information direkt in die Projektdatei eingetragen werden muss.

Das Setzten der Property Language aus der Klasse FrameworkElement hat übrigens in Silverlight (im Gegensatz zu WPF) bei den meisten Controls keine weitere Auswirkung. Insbesondere führt der folgende XAML-Code nicht dazu, dass jetzt etwa französische Ressourcen verwendet werden.

<sdk:DataPager Language="fr" .../>

Möchte man die Sprache für eine Anwendung global umschalten, muss man der Property CurrentUICulture des Main-Threads bei Programmstart eine entsprechende neue CultureInfo zuweisen.

Hier geht's zum nächsten Tipp.

 
kick it on dotnet-kicks.de

Tags:

Silverlight

Comments are closed

Powered by BlogEngine.NET 1.6.1.0 - Impressum