Lokalisierung in WPF

Da die Lokalisierung, auch Mehrsprachigkeit genannt, im Vergleich zu Windows-Forms sich verändert hat, möchte ich hier eine einfache Lösung darstellen:

Zu allererst erstellen wir ein neues Projekt mit dem Namen "Lokalisierung":

wpf-cult1

Im nächsten Schritt, wird eine einfache Oberfläche erstellt. Dazu benutzen wir den integrierten Designer von Visual Studio:

wpf-cult2

Mit dem dazu gehörenden XAML-Code:

<Window x:Class="Lokalisierung.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="{DynamicResource MainWindow-Title}" 
    Height="155" Width="525" ResizeMode="NoResize">
  <Grid>
  <StackPanel>
    <StackPanel Orientation="Horizontal" VerticalAlignment="Top">
    <Label Width="120" Margin="10" 
      Content="{DynamicResource MainWindow-lblExample}"
      Height="28" Name="lblTxt" VerticalAlignment="Top" />
    <Border BorderBrush="#000000" BorderThickness="1" Margin="10">
      <TextBlock Height="30" Width="340" Name="txtBlock"
        Text="{DynamicResource MainWindow-lblLang}" Padding="5" />
    </Border>
    </StackPanel>
    <StackPanel Orientation="Horizontal" VerticalAlignment="Top">
    <Label  Width="120" Margin="10" Content="{DynamicResource MainWindow-cbLang}"
      Height="28"  Name="lblLang" VerticalAlignment="Top" />
    <ComboBox Margin="10" Height="23" Name="cbLang" Width="120"
      ItemsSource="{Binding}"
      SelectionChanged="cbLang_SelectionChanged">
      <ComboBoxItem Content="Deutsch" IsEnabled="True"
        IsSelected="True" />
      <ComboBoxItem Content="English" />
    </ComboBox>
    </StackPanel>
  </StackPanel>
  </Grid>
</Window>

Als nächsten Schritt fügen wir ein Resource Dictionary zum Projekt hinzu.

wpf-cult3

Das erste Wörterbuch „CultResource.xaml“ stellt das Default-Wörterbuch dar. Dieses wird immer geladen, wenn ein anderes Wörterbuch nicht vorhanden ist.

wpf-cult4

In diesem Wörterbuch werden nun die Zeichenketten definiert, welche wir in der Oberfläche dynamisch geändert haben möchten. Für die Zuordnung werden eindeutige Schlüssel (x:Key) vergeben:

<ResourceDictionary 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:system="clr-namespace:System;assembly=mscorlib">

  <system:String x:Key="MainWindow-Title">MainWindow-Titel</system:String>
  <system:String x:Key="MainWindow-lblExample">lblExample</system:String>
  <system:String x:Key="MainWindow-lblLang">lblLang</system:String>
  <system:String x:Key="MainWindow-cbLang">cbLang</system:String>
</ResourceDictionary>

Im Folgenden werden schließlich die Wörterbücher für die einzelnen Sprachen angelegt. Dazu braucht man nur das Standard-Wörterbuch zu kopieren und dessen Einträge übersetzen.

Den Wörterbüchern werden noch die Culture-Kennungen, „de-DE“ für das deutsche Wörterbuch und „en-US“ für das englische Wörterbuch, angehangen.

wpf-cult5

Die XAML-Dateien sollten nach dem Übersetzen ungefähr so aussehen: