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.
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":
Im nächsten Schritt, wird eine einfache Oberfläche erstellt. Dazu benutzen wir den integrierten Designer von Visual Studio:
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.
Das erste Wörterbuch „CultResource.xaml“ stellt das Default-Wörterbuch dar. Dieses wird immer geladen, wenn ein anderes Wörterbuch nicht vorhanden ist.
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.
Die XAML-Dateien sollten nach dem Übersetzen ungefähr so aussehen: