Mehrsprachige Silverlight Anwendungen

In meiner letzten Schulung hatte ein Teilnehmer die Frage nach Mehrsprachigkeit aufgeworfen. Leider hatte ich kein aktuelles Beispiel zur Hand und wie immer liefere ich die Antwort per Blog Eintrag nach. Wenn ich ganz ehrlich sein soll ein paar Fragen sind auch für mich offen geblieben. Aber dazu später mehr. Zunächst erzeugen wir im Projekt einen Resources Ordner. In diesem Ordner wird eine Resources Datei angelegt.

image

Wichtig ist das der  Access Modifier Public weil wir das später für die Bindung brauchen. Dort eine (oder mehrere ) Resource Keys eingefügt.

image

Dann müssen weitere Ressource Dateien angelegt die jeweils namentlich dem Schema resource.de-DE.resx folgen. Normalerweise müsste auch ein verkürztes Namensschema in der Form de  genügen. Das funktioniert aber in meinem Beispiel nicht. Die weiteren Resource Dateien erhalten den Access Modifier no Code Generation.  Am Ende stehen Dateien im Verzeichnis wie resources.de-DE.resx, resource.en-US usw. Dann wird's schon fast haarig. Wir müssen das Silverligth Projekt File manipulieren. Dazu per Unload Project das Projekt entladen und dann im Texteditor editieren.

<SupportedCultures>
     <SupportedCultures>en;en-US;de-DE</SupportedCultures>
   </SupportedCultures>

Dann wieder per Load Project zurück damit.

In der XAML Datei wird dann der  Namensraum für die Resources eingebunden. Weiters die Ressource als Ressource eingebunden.  Ich habe hier den Namen Hannes1 als Datei Name der mehrsprachigen Dateien im Resources Verzeichnis gewählt.

xmlns:local="clr-namespace:KoelnSL.My.Resources"
                       >
<UserControl.Resources>
        <local:hannes1 x:Key="ResSettings"></local:hannes1>
</UserControl.Resources>

Der Key wird dann später für die Datenbindung gebraucht. Die Bindung muss über Bindung Syntax erfolgen und nicht wie man annehmen könnte per StaticResource.

<TextBlock Text="{Binding Danke, Source={StaticResource ResSettings}}"></TextBlock>

In der fertigen XAP Datei muss es dann Unterverzeichnisse mit den Ressource DLL’s geben. Hier entpackt mit Winrar.

image

Jetzt müssen wir noch dafür sorgen das man das auch vom Browser in die Website und davon in das Silverlight Control bekommt. Dazu habe ich zunächst im Browser mehrere Sprachschemen eingestellt.

image

In der ASPX Seite hole ich diese Einstellungen im Page Attribut per auto. Man könnte diese auch handcodiert vorbelegen.

<%

@ Page Language="VB" AutoEventWireup="true" Culture="auto" UICulture="auto" %>

Das Silverlight Plugin bekommt dann die Culture Einstellungen mitgeteilt. Auch dazu ein wenig ASP.net Code.

<param name="culture" value="<%=Threading.Thread.CurrentThread.CurrentCulture %>" />

<param name="uiculture" value="<%=Threading.Thread.CurrentThread.CurrentCulture %>"/>

Mein kleines Problem ist das eigentlich in UICulture it steht und damit die Silverlight Anwendung die default Ressource verwendet. Der Trick ist das Culture Setting zu verwenden in dem steht it-IT.

 

 

Kommentar schreiben