Übersicht über WPF-Globalisierung und -Lokalisierung

Wenn Sie die Verfügbarkeit Ihres Produkts auf eine Sprache beschränken, beschränken Sie damit auch Ihre potentielle Kundenbasis auf einen Bruchteil der 7,5 Milliarden Einwohner unseres Planeten. Wenn Ihre Anwendung eine globale Zielgruppe erreichen soll, ist die kostengünstige Lokalisierung Ihres Produktes eine der besten und effizientesten Möglichkeiten, mehr Kunden zu erreichen.

In dieser Übersicht werden Globalisierung und Lokalisierung in Windows Presentation Foundation (WPF) vorgestellt. Unter Globalisierung versteht man den Entwurf und die Entwicklung von Anwendungen, die an verschiedenen Orten funktionieren. So unterstützt Globalisierung z.B. lokalisierte Benutzeroberflächen und regionale Daten für Benutzer in unterschiedlichen Kulturen. WPF stellt globalisierte Entwurfsfeatures zur Verfügung. Dazu zählen automatisches Layout, Satellitenassemblys sowie lokalisierte Attribute und Kommentare.

Unter Lokalisierung versteht man die Übersetzung von Anwendungsressourcen in lokalisierte Versionen für die jeweiligen von der Anwendung unterstützten Kulturen. Wenn Sie in WPF lokalisieren, verwenden Sie die APIs im System.Windows.Markup.Localizer-Namespace. Diese APIs stehen hinter dem Beispieltool LocBaml-Befehlszeilentool. Informationen zum Erstellen und Verwenden von LocBaml finden Sie unter Lokalisieren einer Anwendung.

Warnung

Das Tool LocBaml funktioniert nur mit WPF für .NET Framework-Projekte, aber mit WPF für .NET.

Bewährte Methoden zur Globalisierung und Lokalisierung in WPF.

Um die in WPF integrierte Globalisierungs- und Lokalisierungs-Funktionalität optimal zu nutzen, folgen Sie bitte den Hinweisen zum Design der Benutzeroberfläche und anderen lokalisierungsbezogenen Hinweisen in diesem Abschnitt.

Bewährte Methoden für den Entwurf von WPF-Benutzeroberflächen

Halten Sie sich beim Entwerfen einer WPF-basierten Benutzeroberfläche an folgende bewährte Methoden:

  • Schreiben Sie Ihre Benutzeroberfläche in XAML. Vermeiden Sie die Erstellung von Benutzeroberflächen in Code. Wenn Sie Ihre Benutzeroberfläche mithilfe von XAML erstellen, machen Sie durch die integrierten Lokalisierungs-APIs verfügbar.

  • Vermeiden Sie beim Setzen von Inhaltselementen die Verwendung absoluter Positionierung und Dimensionierung; verwenden Sie stattdessen relative oder automatische Dimensionierung.

    • Verwenden Sie SizeToContent und setzen Sie Breiten und Höhen auf Auto.

    • Vermeiden Sie die Verwendung des Canvas für Layouts von Benutzeroberfläcen.

    • Verwenden Sie das Grid und seine Funktion zur Größenteilung.

  • Lassen Sie an den Rändern zusätzlichen freien Platz, da lokalisierter Text häufig mehr Platz beansprucht. Zusätzlicher Leerraum kann überstehende Zeichen aufnehmen.

  • Aktivieren Sie TextWrapping im TextBlock, um Clipping zu vermeiden.

  • Legen Sie das xml:lang -Attribut fest. Dieses Attribut beschreibt die Kultur eines bestimmten Elements und seiner untergeordneten Elemente. Der Wert dieser Eigenschaft ändert das Verhalten mehrerer Features in WPF. Es ändert z.B. das Verhalten von Silbentrennung, Rechtschreibprüfung, Zahlenersetzung, Formen komplexer Schriften und die Ausweich-Schriftart. Weitere Informationen zum Einrichten des XML: lang Handling in XAML finden Sie unter Globalisierung für WPF.

  • Erstellen Sie eine benutzerdefinierte zusammengesetzte Schriftart, um bessere Kontrolle über Schriftarten zu erhalten, die für verschiedene Sprachen verwendet werden. In der Standardeinstellung verwendet WPF die Schriftart GlobalUserInterface.composite im Verzeichnis Windows\Fonts.

  • Beim Erstellen von Navigations-Anwendungen, die in einer Kultur lokalisiert werden dürfen, die Text in rechts-nach-links-Schreibweise darstellt, sollten Sie den Wert für FlowDirection auf jeder Seite explizit festlegen, um sicherzustellen, dass die Seite den Wert für FlowDirection nicht vom NavigationWindow-Objekt erbt.

  • Wenn Sie eigenständige Navigationsanwendungen erstellen, die außerhalb eines Browsers gehostet werden, setzen Sie den StartupUri für Ihre ursprüngliche Anwendung auf ein NavigationWindow statt auf eine Seite (z. B. <Application StartupUri="NavigationWindow.xaml"> ). Diese Vorgehensweise ermöglicht es Ihnen, den Wert für die FlowDirection des Fensters und der Navigationsleiste zu ändern. Weitere Informationen und ein Beispiel finden Sie unter Beispiel für eine globalisierte Homepage.

Bewährte Methoden für die Lokalisierung in WPF

Wenn Sie WPF-basierte Anwendungen lokalisieren, sollten Sie sich an diese bewährten Methoden halten:

  • Verwenden Sie Lokalisierungskommentare, um zusätzlichen Kontext für Lokalisierer bereitzustellen.

  • Verwenden Sie Lokalisierungsattribute, um die Lokalisierung zu steuern, anstatt die Uid-Eigenschaften von Elementen selektiv wegzulassen. Weitere Informationen finden Sie unter Lokalisierungsattribute und -kommentare.

  • Verwenden Sie msbuild -t:updateuid und -t:checkuid, um Uid-Eigenschaften in Ihrem XAML-Code hinzuzufügen und zu überprüfen. Verwenden Sie Uid-Eigenschaften, um Änderungen zwischen Entwicklung und Lokalisierung nachzuverfolgen. Uid-Eigenschaften unterstützen Sie bei der Lokalisierung neuer Entwicklungsänderungen. Wenn Sie einer Benutzeroberfläche manuell Uid-Eigenschaften hinzufügen, ist das in der Regel mühsam und weniger genau.

    • Bearbeiten oder ändern Sie Uid-Eigenschaften nicht mehr, nachdem Sie mit der Lokalisierung begonnen haben.

    • Verwenden Sie keine doppelten Uid-Eigenschaften (denken Sie an diesen Tipp, wenn Sie den Befehl Kopieren und Einfügen verwenden).

    • Legen Sie den UltimateResourceFallback-Speicherort in AssemblyInfo.* fest, um die entsprechende Ausweichsprache anzugeben (z. B. [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).

      Sollten Sie sich entscheiden, durch Auslassen des <UICulture>-Tags in der Projektdatei Ihre Quellsprache in die Hauptassembly einzuschließen, geben Sie für den UltimateResourceFallback-Speicherort die Hauptassembly statt des Satelliten an (z. B. [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).

Lokalisieren einer WPF-Anwendung

Bei der Lokalisierung einer WPF-Anwendung haben Sie mehrere Optionen. Sie können z. B. die lokalisierbaren Ressourcen in Ihrer Anwendung an eine XML-Datei binden, lokalisierbaren Text in RESX-Tabellen speichern oder Ihren Lokalisierer XAML-Dateien verwenden lassen. Dieser Abschnitt beschreibt einen Lokalisierungsworkflow, der die BAML-Form von XAML verwendet, die mehrere Vorteile bietet:

  • Sie können lokalisieren, nachdem die Anwendung erstellt ist.

  • Sie können mit lokalisierten Versionen einer älteren Version der BAML-Form von XAML auf eine neuere Version der BAML-Form von XAML aktualisieren, damit Sie lokalisieren können, während Sie noch entwickeln.

  • Sie können die originalen Quellelemente und Semantik zur Kompilierungszeit überprüfen, weil die BAML-Form von XAML die kompilierte Form von XAML ist.

Buildprozess für die Lokalisierung

Bei der Entwicklung einer WPF-Anwendung ist der Buildprozesses für die Lokalisierung wie folgt:

  • Der Entwickler erstellt und globalisiert die WPF-Anwendung. Der Entwickler legt in der Projektdatei <UICulture>en-US</UICulture> fest, sodass bei der Kompilierung der Anwendung eine sprachneutrale Hauptassembly generiert wird. Diese Assembly verfügt über eine ausgelagerte .resources.dll-Datei, die alle lokalisierbaren Ressourcen enthält. Sie können wahlweise Ihre Quellsprache in der Hauptassembly belassen, da unsere Lokalisierungs-APIs eine Extraktion aus der Hauptassembly unterstützen.

  • Wenn die Datei in den Build kompiliert wird, wird der XAML-Code in die BAML-Form von XAML konvertiert. Die kulturneutrale MyDialog.exe und die kulturspezifische (englische) MyDialog.resources.dll-Datei werden an englischsprachige Kunden freigegeben.

Lokalisierungsworkflow

Der Lokalisierungsprozess beginnt nach Erstellen der nicht lokalisierten MyDialog.resources.dll-Datei. Die Elemente und Eigenschaften der Benutzeroberfläche Ihres ursprünglichen XAML werden aus der BAML-Form von XAML mithilfe der APIs unter System.Windows.Markup.Localizer in Schlüssel-Wert-Paare extrahiert. Lokalisierer verwenden die Schlüssel-Wert-Paare, um die Anwendung zu lokalisieren. Sie können nach Abschluss der Lokalisierung aus den neuen Werten eine neue .resource.dll-Datei generieren.

Die Schlüssel der Schlüssel-Wert-Paare sind x:Uid-Werte, die vom Entwickler im ursprünglichen XAML-Code platziert werden. Diese x:Uid-Werte ermöglichen es der API, Änderungen, die sich während der Lokalisierung zwischen Entwickler und Lokalisierer ergeben, nachzuverfolgen und zusammenzuführen. Wenn der Entwickler z. B. die Benutzeroberfläche ändert, nachdem der Lokalisierer bereits mit seiner Arbeit begonnen hat, können Sie die Änderungen des Entwicklers mit der bereits abgeschlossenen Lokalisierung zusammenführen, um den Verlust von Übersetzungsarbeit zu minimieren.

Die folgende Abbildung zeigt einen typischen auf der BAML-Form von XAML-basierenden Lokalisierungsworkflow. In diesem Diagramm wird davon ausgegangen, dass der Entwickler die Anwendung auf Englisch schreibt. Der Entwickler erstellt und globalisiert die WPF-Anwendung. Der Entwickler legt in der Projektdatei <UICulture>en-US</UICulture> fest, damit beim Buildvorgang eine sprachneutrale Hauptassembly generiert wird, sowie eine .resources.dll-Satellitenassembly, die alle lokalisierbare Ressourcen enthält. Alternativ dazu können Sie auch Ihre Quellsprache in der Hauptassembly belassen, da unsere Lokalisierungs-APIs eine Extraktion aus der Hauptassembly unterstützen. Nach dem Buildprozess wird XAML in BAML kompiliert. Die kulturneutrale Datei „MyDialog.exe.resources.dll” wird an den englischsprachigen Kunden ausgeliefert.

Diagram showing the Localization workflow.

Diagram showing the Unlocalized workflow.

Beispiele für WPF-Lokalisierung

Dieser Abschnitt enthält Beispiele von lokalisierten Anwendungen, die Ihnen helfen sollen, besser zu verstehen, wie WPF-Anwendungen erstellt und lokalisiert werden.

Beispiel-Dialogfeld „Ausführen”

Die folgende Abbildung zeigt die Ausgabe des Beispiel-Dialogfelds Ausführen.

Englisch:

Screenshot showing an English Run dialog box.

Deutsch:

Screenshot showing a German Run dialog box.

Entwerfen eines globalen Dialogfelds „Ausführen”

Dieses Beispiel erzeugt ein Dialogfeld Ausführen unter Verwendung von WPF und XAML. Dieses Dialogfeld entspricht dem Dialogfeld Ausführen, das im Microsoft Windows-Startmenü verfügbar ist.

Einige Highlights beim Erstellen von globalen Dialogfeldern sind:

Automatisches Layout

In der Datei Window1.xaml:

<Window SizeToContent="WidthAndHeight">

Die obige Window-Eigenschaft sorgt dafür, dass sich die Fenstergröße automatisch der Inhaltsgröße entsprechend anpasst. Diese Eigenschaft verhindert, dass Inhalt, der nach der Lokalisierung an Größe zunimmt, abgeschnitten wird. Im Gegenzug wird auch unnötiger Leerraum entfernt, wenn die Größe des Inhalts nach der Lokalisierung geschrumpft ist.

<Grid x:Uid="Grid_1">

Uid-Eigenschaften werden benötigt, damit die WPF-Lokalisierungs-APIs korrekt funktionieren.

Diese werden von den WPF-Lokalisierungs-APIs zum Nachverfolgen von Änderungen zwischen der Entwicklung und Lokalisierung der Benutzeroberfläche verwendet. Uid-Eigenschaften ermöglichen die Zusammenführung einer neueren Version der Benutzeroberfläche mit einer älteren Lokalisierung der Benutzeroberfläche. Sie fügen eine Uid-Eigenschaft hinzu, indem Sie msbuild -t:updateuid RunDialog.csproj in einer Befehls-Shell ausführen. Dies ist die empfohlene Methode zum Hinzufügen von Uid-Eigenschaften, da manuelles Hinzufügen normalerweise sehr zeitaufwändig und fehleranfällig ist. Sie können überprüfen, ob die Uid-Eigenschaften korrekt eingestellt sind, indem Sie msbuild -t:checkuid RunDialog.csproj ausführen.

Die Benutzeroberfläche wird mithilfe des Grid-Steuerelements strukturiert. Dieses praktische Steuerelement ermöglicht die Nutzung des automatischen Layouts in WPF. Beachten Sie, dass das Dialogfeld in drei Zeilen und fünf Spalten unterteilt ist. Keine der Zeilen- und Spaltendefinitionen hat eine feste Größe. Daher können sich die Benutzeroberflächenelemente in den einzelnen Zellen je nach Bedarf bei der Lokalisierung vergrößern oder verkleinern.

<Grid.ColumnDefinitions>
  <ColumnDefinition x:Uid="ColumnDefinition_1" />
  <ColumnDefinition x:Uid="ColumnDefinition_2" />

Die ersten beiden Spalten, in denen die Beschriftung Öffnen: und die ComboBox platziert sind, nehmen 10 Prozent der Gesamtbreite der Benutzeroberfläche ein.

  <ColumnDefinition x:Uid="ColumnDefinition_3" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_4" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_5" SharedSizeGroup="Buttons" />
</Grid.ColumnDefinitions>

Beachten Sie, dass das Beispiel die Größenteilungs-Funktion von Grid verwendet. Die letzten drei Spalten machen sich dies zunutze, indem sie sich in der gleichen SharedSizeGroup platzieren. Wie aus dem Namen der Eigenschaft zu erwarten ist, ermöglicht dies den Spalten, dieselbe Größe zu verwenden. Wenn also die Zeichenfolge „Browse...“ in die längere Zeichenfolge „Durchsuchen...“ umgewandelt wird, werden alle Schaltflächen breiter, anstatt eine kleine Schaltfläche „OK“ und eine unverhältnismäßig große Schaltfläche „Durchsuchen...“ zu haben.

xml:lang

xml:lang="en-US"

Beachten Sie das xml:lang Handling in XAML im Stammelement der Benutzeroberfläche. Diese Eigenschaft beschreibt die Kultur eines bestimmten Elements und seiner untergeordneten Elemente. Dieser Wert wird von mehreren Features in WPF verwendet und sollte bei der Lokalisierung entsprechend geändert werden. Dieser Wert bestimmt, welches Sprachwörterbuch für Silbentrennung und Rechtschreibprüfung verwendet wird. Es wirkt sich auch auf die Anzeige von Ziffern aus, und wie das Fallbacksystem für Schriftarten entscheidet, welche Schriftart zu benutzen ist. Schließlich beeinflusst die Eigenschaft auch, wie Zahlen formatiert und in welcher Form komplexe Schriften dargestellt werden. Der Standardwert ist „en-US”.

Erstellen eine Satellitenressourcenassembly

In .csproj:

Bearbeiten Sie die .csproj-Datei, und fügen Sie das folgende Tag zu einer bedingungslosen <PropertyGroup> hinzu:

<UICulture>en-US</UICulture>

Beachten Sie den zusätzlichen UICulture-Wert. Wenn dieser auf einen gültigen CultureInfo-Wert festgelegt wird, z. B. en-US, so wird beim Erstellen des Projekts eine Satellitenassembly generiert, die sämtliche lokalisierbaren Ressourcen enthält.

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

Die RunIcon.JPG-Ressource muss nicht lokalisiert werden, da sie für alle Kulturen identisch angezeigt werden soll. Localizable wird auf false festgelegt, damit es nicht in die Satellitenassembly verpackt wird, sondern in der sprachneutralen Hauptassembly verbleibt. Als Standardwert aller nicht kompilierbaren Ressourcen ist Localizable auf true festgelegt.

Lokalisieren des Dialogfelds „Ausführen”

Parse

Nachdem die Anwendung erstellt, ist der erste Schritt bei der Lokalisierung, die lokalisierbaren Ressourcen aus der Satellitenassembly auszulesen. Für die Zwecke dieses Themas, verwenden Sie das Beispieltool LocBaml, das Sie unter Beispieltool LocBaml finden. Beachten Sie, dass LocBaml lediglich ein Beispieltool ist, das Ihnen beim Erstellen eines Lokalisierungstools helfen soll, das Ihrem Lokalisierungsprozess entspricht. Um die Ressourcen mithilfe von LocBaml zu analysieren, führen Sie bitte folgenden Befehl aus: LocBaml /parse RunDialog.resources.dll /out:, um eine „RunDialog.resources.dll.CSV”-Datei zu generieren.

Warnung

Das Tool LocBaml funktioniert nur mit WPF für .NET Framework-Projekte, aber mit WPF für .NET.

Lokalisieren

Verwenden Sie zum Bearbeiten dieser Datei Ihren bevorzugten Unicode-fähigen CSV-Editor. Filtern Sie alle Einträge mit einer Lokalisierungskategorie von „None” heraus. Sie sollten folgende Einträge sehen:

Ressourcenschlüssel Lokalisierungskategorie Wert
Button_1:System.Windows.Controls.Button.$Content Schaltfläche OK
Button_2:System.Windows.Controls.Button.$Content Schaltfläche Abbrechen
Button_3:System.Windows.Controls.Button.$Content Schaltfläche Durchsuchen...
ComboBox_1:System.Windows.Controls.ComboBox.$Content Kombinationsfeld
TextBlock_1:System.Windows.Controls.TextBlock.$Content Text Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetressource ein, damit Windows das entsprechende Objekt öffnet.
TextBlock_2:System.Windows.Controls.TextBlock.$Content Text Offen:
Window_1:System.Windows.Window.Title Titel Ausführen

Um die Anwendung auf Deutsch zu lokalisieren, sind die folgenden Übersetzungen erforderlich:

Ressourcenschlüssel Lokalisierungskategorie Wert
Button_1:System.Windows.Controls.Button.$Content Schaltfläche OK
Button_2:System.Windows.Controls.Button.$Content Schaltfläche Abbrechen
Button_3:System.Windows.Controls.Button.$Content Schaltfläche Durchsuchen…
ComboBox_1:System.Windows.Controls.ComboBox.$Content Kombinationsfeld
TextBlock_1:System.Windows.Controls.TextBlock.$Content Text Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetressource an.
TextBlock_2:System.Windows.Controls.TextBlock.$Content Text Öffnen:
Window_1:System.Windows.Window.Title Titel Ausführen

Generate

Der letzte Schritt der Lokalisierung umfasst das Erstellen der neu lokalisierten Satellitenassembly. Dies kann mithilfe des folgenden LocBaml-Befehls erreicht werden:

LocBaml.exe /generate RunDialog.resources.dll /trans:RunDialog.resources.dll.CSV /out: . /cul:de-DE

Wenn man auf einem deutschen Windows diese „resources.dll”-Datei in einem Ordner „de-DE” neben der Hauptassembly ablegt, wird automatisch diese Ressource statt der im Ordner „en-US“ geladen. Wenn Sie keine deutsche Version von Windows haben, können Sie dies testen, indem Sie die Kultur auf die Kultur des Windows festlegen, das Sie verwenden (z.B. en-US), und dann die ursprüngliche „resources.dll”-Datei ersetzen.

Laden der Satellitenressourcen

MyDialog.exe en-US\MyDialog.resources.dll de-DE\MyDialog.resources.dll
Code Ursprüngliche englische BAML Lokalisierte BAML
Kulturneutrale Ressourcen Weitere Ressourcen auf Englisch Weitere ins Deutsche lokalisierte Ressourcen

Basierend auf dem Wert für die Thread.CurrentUICulture der Anwendung wählt .NET Framework automatisch die entsprechend zu ladende Satellitenressourcenassembly. Der Standard für diesen Wert ist die Kultur des Windows-Betriebssystems. Wenn Sie ein deutsches Windows verwenden, wird die Datei de-DE\MyDialog.resources.dll geladen. Wenn Sie ein englisches Windows verwenden, wird die Datei en-US\MyDialog.resources.dll geladen. Sie können die endgültige Fallbackressource für Ihre Anwendung festlegen, indem Sie das NeutralResourcesLanguage-Attribut in der Datei AssemblyInfo Ihres Projekts angeben. Wenn Sie also z. B. folgendes angeben:

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

dann wird unter deutschem Windows die Dateien-US\MyDialog.resources.dll verwendet, wenn keine der folgenden Dateien vorhanden ist: de-DE\MyDialog.resources.dll oder de\MyDialog.resources.dll.

Homepage von Microsoft Saudi-Arabien

Die folgende Abbildung zeigt eine englische und eine arabische Homepage. Das vollständige Beispiel, das diese Abbildungen erzeugt, finden Sie unter Beispiel für eine globalisierte Homepage.

Englisch:

Screenshot showing an English home page.

Arabisch:

Screenshot showing an Arabic home page.

Entwerfen einer globalen Microsoft-Homepage

Dieses Modell der Microsoft Saudi-Arabien Website veranschaulicht die Globalisierungsfeatures für Sprachen in rechts-nach-links-Schreibweise. Sprachen wie Hebräisch und Arabisch haben eine rechts-nach-links-Lesefolge, sodass die Benutzeroberfläche meist ein Layout erfordert, das sehr stark von dem für links-nach-rechts-Sprachen wie Englisch abweicht. Die Lokalisierung von einer links-nach-rechts-Sprache in eine rechts-nach-links-Sprache oder umgekehrt kann sehr anspruchsvoll sein. WPF wurde entwickelt, um solche Lokalisierungsanforderungen wesentlich zu erleichtern.

FlowDirection

Homepage.xaml:

<Page x:Uid="Page_1" x:Class="MicrosoftSaudiArabiaHomepage.Homepage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    FlowDirection="LeftToRight" 
    Localization.Comments="FlowDirection(This FlowDirection controls the actual content of the homepage)"
    xml:lang="en-US">

Beachten Sie die FlowDirection-Eigenschaft auf der Page. Wenn Sie diese Eigenschaft auf RightToLeft ändern, ändert sich die FlowDirection der Page und seiner untergeordneten Elemente, sodass das Layout dieser Benutzeroberfläche von rechts nach links gespiegelt wird, wie es ein arabischer Benutzer erwarten würde. Man kann das Vererbungsverhalten außer Kraft setzen, indem man eine explizite FlowDirection für ein beliebiges Element angibt. Die FlowDirection-Eigenschaft ist für jedes FrameworkElement oder dokumentenbezogene Element verfügbar und hat einen impliziten Wert von LeftToRight.

Beachten Sie, dass sogar die Farbverläufe des Hintergrunds ordnungsgemäß gespiegelt werden, wenn der FlowDirection-Wert für das Stammelement geändert wird:

FlowDirection="LeftToRight"

Screenshot showing the gradient flow from left to right.

FlowDirection="RightToLeft"

Screenshot showing the gradient flow from right to left.

Verwenden Sie keine feste Abmessungen für Bereiche und Steuerelemente

Wenn Sie sich Homepage.xaml anschauen, werden Sie feststellen, dass abgesehen von der festen Breite und Höhe für die gesamte Benutzeroberfläche am oberen DockPanel-Element keine anderen festen Abmessungen angegeben sind. Vermeiden Sie feste Abmessungen, um zu vermeiden, dass lokalisierter Text, der länger als der Quelltext werden kann, abgeschnitten wird. WPF-Bereiche und Steuerelemente passen ihre Größe automatisch dem ihres Inhalts an. Die meisten Steuerelemente haben außerdem Mindest- und Höchstmaße, die Sie für mehr Kontrolle angeben können (z. B. MinWidth="20"). Bei Grid können Sie mithilfe von ‘*‘ auch relative Breiten und Höhen festlegen (z. B. Width="0.25*"), oder das Größenteilungsfeature der Zelle verwenden.

Lokalisierungskommentare

Es gibt viele Fälle, in denen Inhalt mehrdeutig und schwierig zu übersetzen sein kann. Der Entwickler oder Designer verfügt über die Möglichkeit, zusätzlichen Kontext und Kommentare für Lokalisierer über Lokalisierungskommentare bereitzustellen. So verdeutlicht z. B. „Localization.Comments” im nachstehenden Beispiel die Verwendung des Zeichens '|'.

<TextBlock 
  x:Uid="TextBlock_2" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This character is used as a decorative rule.)">
  |
</TextBlock>

Dieser Kommentar wird dem Inhalt von TextBlock_1 zugeordnet und, im Fall des LocBaml-Tools (siehe Lokalisieren einer Anwendung), in der 6. Spalte der Zeile TextBlock_1 in der ausgegebenen CSV-Datei angezeigt:

Ressourcenschlüssel Kategorie Lesbar Änderbar Kommentar Wert
TextBlock_1:System.Windows.Controls.TextBlock.$Content Text TRUE TRUE Dieses Zeichen wird als dekorative Abgrenzungslinie verwendet. |

Kommentare können auf den Inhalt oder die Eigenschaften jedes Elements mithilfe der folgenden Syntax platziert werden:

<TextBlock 
  x:Uid="TextBlock_1" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This is a comment on the TextBlock's content.)
     Margin(This is a comment on the TextBlock's Margin property.)">
  |
 </TextBlock>

Lokalisierungsattribute

Häufig muss der Entwickler oder Lokalisierungsmanager Kontrolle darüber haben, was Lokalisierer lesen und ändern können. Sie möchten z.B. nicht, dass der Lokalisierer den Namen Ihres Unternehmens oder eine rechtliche Floskel übersetzt. WPF bietet Attribute, mit denen Sie die Lesbarkeit, Änderbarkeit und Kategorie des Inhalts eines Elements oder einer Eigenschaft festlegen können. Diese Attribute kann Ihr Lokalisierungstool zum Sperren, Ausblenden oder Sortieren von Elementen verwenden. Weitere Informationen finden Sie unter Attributes. Für die Zwecke dieses Beispiels gibt das LocBaml-Tool nur die Werte dieser Attribute aus. Alle WPF-Steuerelemente besitzen Standardwerte für diese Attribute, die Sie aber überschreiben können. Im folgenden Beispiel werden die standardmäßigen Lokalisierungsattribute für TextBlock_1 so überschrieben, dass der Inhalt für Lokalisierungsexperten lesbar, aber nicht änderbar ist.

<TextBlock
x:Uid="TextBlock_1"
Localization.Attributes=
"$Content(Readable Unmodifiable)">
  Microsoft Corporation
</TextBlock>

Zusätzlich zu den Attributen für Lesbarkeit und Änderbarkeit bietet WPF eine Enumeration von allgemeinen Kategorien der Benutzeroberfläche (LocalizationCategory), die verwendet werden kann, um Lokalisierungsexperten mehr Kontext zu geben. Die WPF-Standardkategorien für Plattformsteuerelemente können auch in XAML überschrieben werden:

<TextBlock x:Uid="TextBlock_2">
<TextBlock.ToolTip>
<TextBlock
x:Uid="TextBlock_3"
Localization.Attributes=
"$Content(ToolTip Readable Unmodifiable)">
Microsoft Corporation
</TextBlock>
</TextBlock.ToolTip>
Windows Vista
</TextBlock>

Die standardmäßigen Lokalisierungsattribute, die WPF bietet, können auch mithilfe von Code überschrieben werden, damit Sie die richtigen Standardwerte für benutzerdefinierte Steuerelemente ordnungsgemäß festlegen können. Beispiel:

[Localizability(Readability = Readability.Readable, Modifiability=Modifiability.Unmodifiable, LocalizationCategory.None)]
public class CorporateLogo : TextBlock
{
    // ...
}

Die je Instanz in XAML festgelegten Attribute haben Vorrang vor den Werten, die im Code für benutzerdefinierte Steuerelemente festgelegt sind. Weitere Informationen zu Attributen und Kommentaren finden Sie unter Lokalisierungsattribute und -kommentare.

Schriftart-Fallback und zusammengesetzte Schriftarten

Wenn Sie eine Schriftart angeben, die einen bestimmten Bereich von Codepunkten nicht unterstützt, wird WPF automatisch mithilfe der zusammengesetzten Schriftart „Global User Interface”, die sich im Verzeichnis „Windows\Fonts” befindet, auf eine ausweichen, die dies tut. Zusammengesetzte Schriftarten funktionieren wie jede andere Schriftart und können durch explizites Festlegen der FontFamily-Eigenschaft eines Elements verwendet werden (z. B. FontFamily="Global User Interface"). Sie können Ihre eigene bevorzugte Ausweichschriftart angeben, indem Sie eine eigene zusammengesetzte Schriftart erstellen und angeben, welche Schriftart jeweils für bestimmte Codepunkt-Bereiche und Sprachen verwendet werden soll.

Weitere Informationen zu zusammengesetzten Schriftarten finden Sie unter FontFamily.

Lokalisieren der Microsoft-Homepage

Sie können die gleichen Schritte wie im Beispiel zum Dialogfeld „Ausführen” nutzen, um diese Anwendung zu lokalisieren. Die lokalisierte CSV-Datei für Arabisch steht für Sie unter Beispiel für eine globalisierte Homepage zur Verfügung.