Samstag, 3. April 2010

Localization in Silverlight 3

Um eine Silverlight 3 Anwendung zu lokalisieren, gibt es einen wichtigen Punkt, den man auch nicht unbedingt auf den Microsoft “How-To-Dos” findet. Man muss nämlich zum Notepad greifen und das csproj-File seines Silverlight-Projekts editieren. In der Sektion SupportedCultures müssen alle unterstützen Cultures der Silverlight Anwendung eingetragen werden. Macht man dies nicht, so werden im XAP durch den Compiler keine Ressourcendateien erzeugt.

Beispiel (nur deutsche und Default-Culture verfügbar):

   1: <SupportedCultures>de
   2:     </SupportedCultures>

Folgende Schritte sind zur Lokalisierung notwendig:

  1. Ressourcen-Dateien hinzufügen
  2. Access-Modifier der Ressourcen-Dateien (im Ressource Editor) auf Public stellen
  3. Eine Zugriffsklasse auf das Ressource-File definieren (Namespace des Ressource-Files im Beispiel AppServices.Ressources und Name des Ressource-File ist CommonRessources).
       1: namespace AppServices
       2: {
       3:     public class LocalizedStrings
       4:     {
       5:         public LocalizedStrings()
       6:         {
       7:         }
       8:         private static AppServices.Resources.CommonRessource commonRessource = new AppServices.Resources.CommonRessource();
       9:         public AppServices.Resources.CommonRessource CommonRessource { get { return commonRessource; } }
      10:     }
      11:  
      12: }
  4. In UserControl.Ressources oder Application.Ressources des Silverlight UserControls oder der Silverlight Seite die angelegte Zugriffsklasse aus (3) referenzieren (Namespace und Name anpassen)

       1: <UserControl.Resources>
       2:         <local:LocalizedStrings xmlns:local ="clr-namespace:AppServices"
       3:                            x:Key="LocalizedStrings" />
  5. Das Silverlight Control an die Ressource binden. Hier muss im Binding Path der Dateiname des Ressource-Files und der Key der Resource verwendet werden! Die Source-Eigenschaft enthält den Key aus (4)

       1: <Button Height="23" Width="73.5" 
       2:        Canvas.Left="24" Canvas.Top="118.5" 
       3:        Content="{Binding Path=CommonRessource.btn_signin, Source={StaticResource LocalizedStrings }}" 
  6. Die neutrale Sprache im Assembly Info File einstellen. Entweder über die Properties->Assembly Information in Visual Studio oder direkt in der AssembleyInfo.cs-Datei.

  7. [assembly: NeutralResourcesLanguageAttribute("en")]

Keine Kommentare:

Kommentar veröffentlichen