Globalisierung für WPF
In diesem Thema werden Probleme erklärt, auf die Sie beim Schreiben von Windows Presentation Foundation (WPF)-Anwendungen für den globalen Markt achten sollten. Die Programmierelemente der Globalisierung werden in .NET im Namespace System.Globalization definiert.
XAML-Globalisierung
Extensible Application Markup Language (XAML) basiert auf XML und nutzt die in der XML-Spezifikation definierte Globalisierungsunterstützung. Die folgenden Abschnitte beschreiben einige XAML-Funktionen, die Sie kennen sollten.
Zeichenverweise
Ein Zeichenverweis gibt die UTF16-Codeeinheit des jeweiligen Unicode-Zeichens an, das er darstellt, entweder im Dezimal- oder im Hexadezimalformat. Das folgende Beispiel zeigt einen Dezimalzeichenverweis für den KOPTISCHEN GROSSBUCHSTABEN HORI oder 'Ϩ':
Ϩ
Das folgende Beispiel zeigt einen Verweis mit Hexadezimalzeichen. Beachten Sie, dass ein x vor der Hexadezimalzahl steht.
Ϩ
Codieren
Die von XAML unterstützte Codierungen sind ASCII, Unicode UTF-16 und UTF-8. Die Codierungsanweisung befindet sich am Anfang des XAML-Dokuments. Wenn kein Codierungsattribut und keine Bytereihenfolge vorhanden ist, wird der Parser automatisch auf UTF-8 festgelegt. UTF-8 und UTF-16 sind die bevorzugten Codierungen. UTF-7 wird nicht unterstützt. Das folgende Beispiel zeigt, wie eine UTF-8-Codierung in einer XAML-Datei angegeben wird.
?xml encoding="UTF-8"?
Sprachattribut
XAML verwendet xml:lang für die Darstellung des Sprachattributs eines Elements. Um die Vorteile der Klasse CultureInfo zu nutzen, muss der Wert des Sprachattributs einer der von CultureInfo vordefinierten Kulturnamen sein. xml:lang ist in der Elementstruktur vererbbar (durch XML-Regeln, nicht unbedingt wegen der Vererbung einer Abhängigkeitseigenschaft) und sein Standardwert ist eine leere Zeichenfolge, wenn sie nicht explizit zugeordnet wurde.
Das Sprachattribut ist für die Angabe von regionalen Sprachen sehr nützlich. Französisch verfügt z.B. über Schreibweisen, Vokabular und Aussprache, die in Frankreich, Quebec, Belgien und der Schweiz unterschiedlich sein können. Auch Chinesisch, Japanisch und Koreanisch teilen sich Codepunkte in Unicode, aber die ideografischen Formen unterscheiden sich und sie verwenden vollkommen unterschiedliche Schriftarten.
Das folgende Extensible Application Markup Language (XAML)-Beispiel verwendet das Sprachattribut fr-CA
, um Französisch (Kanada) anzugeben.
<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>
Unicode
XAML unterstützt alle Unicode-Funktionen einschließlich der Ersatzzeichen. Solange der Zeichensatz Unicode zugeordnet werden kann, wird er unterstützt. Z.B. führt GB18030 einige Zeichen, die der Erweiterung A und B von Chinesisch, Japanisch und Koreanisch (CFK) zugeordnet sind, und Ersatzpaare ein. Daher wird es vollständig unterstützt. Eine WPF-Anwendung kann StringInfo verwenden, um Zeichenfolgen zu bearbeiten, ohne zu wissen, ob es dafür Ersatzzeichenpaare oder Verbindungszeichen gibt.
Entwerfen einer internationalen Benutzeroberfläche mit XAML
In diesem Abschnitt werden Funktionen der Benutzeroberfläche beschrieben, die Sie berücksichtigen sollten, wenn Sie eine Anwendung schreiben.
Internationaler Text
WPF enthält eine integrierte Verarbeitung für alle von Microsoft .NET Framework unterstützten Schreibsysteme.
Die folgenden Skripts werden zurzeit unterstützt:
Arabisch
Bengali
Devanagari
Kyrillisch
Griechisch
Gujarati
Gurmukhi
Hebräisch
Ideografische Skripts
Kannada
Laotisch
Lateinisch
Malayalam
Mongolisch
Odia
Syrisch
Tamilisch
Telugu
Thaana
Thailändisch*
Tibetisch
*In dieser Version werden die Anzeige und Bearbeitung von thailändischem Text unterstützt. Die Wörtertrennung wird nicht unterstützt.
Die folgenden Skripts werden zurzeit nicht unterstützt:
Khmer
Koreanisch Old Hangul
Myanmar
Singhalesisch
Alle Schreibsystem-Engines unterstützen OpenType-Schriftarten. OpenType-Schriftarten können die OpenType--Layouttabellen beinhalten, mit denen Ersteller von Schriftarten bessere internationale und Highend-typografische-Schriftarten entwerfen können. Die Layouttabellen der OpenType-Schriftarten enthalten Informationen über Glyphenersetzungen, Glyphenpositionierung, Ausrichtung und Positionierung der Grundlinie, und ermöglichen Anwendungen zur Textverarbeitung, um das Textlayout zu verbessern.
OpenType-Schriftarten ermöglichen die Behandlung großer Glyphensätze unter Verwendung der Unicode-Codierung. Diese Codierung gewährleistet eine umfassende internationale Unterstützung sowie typografische Symbolvarianten.
WPF-Textrendering wird von der Subpixel-Technologie Microsoft ClearType unterstützt, die die Unabhängigkeit von der Auflösung unterstützt. Dies verbessert die Lesbarkeit erheblich und bietet die Möglichkeit der Unterstützung für hochwertige Dokumente im Magazinstil für alle Skripts.
Internationales Layout
WPF bietet eine einfache Möglichkeit für die Unterstützung von horizontalen, bidirektionalen und vertikalen Layouts. Im Präsentations-Framework kann die FlowDirection-Eigenschaft verwendet werden, um das Layout zu definieren. Die Muster der Flussrichtung sind:
LeftToRight: Horizontales Layout für Latein, Ostasiatisch usw.
RightToLeft: Bidirektional für Arabisch, Hebräisch usw.
Entwickeln von lokalisierbaren Anwendungen
Wenn Sie eine Anwendung für die weltweite Nutzung schreiben, sollten Sie bedenken, dass die Anwendung lokalisierbar sein muss. Die folgenden Themen zeigen Punkte auf, die zu berücksichtigen sind.
Multilingual User Interface
Multilingual User Interfaces (MUI) ist ein Microsoft-Support für einen Wechsel der Benutzeroberfläche von einer Sprache in eine andere. Eine WPF-Anwendung verwendet das Assemblymodell zur Unterstützung von MUI. Eine Anwendung enthält sprachneutrale Assemblys sowie sprachabhängige Satellitenressourcenassemblys. Der Einstiegspunkt ist eine verwaltete EXE-Datei in der Hauptassembly. Das WPF-Ressourcenladeprogramm nutzt die Vorteile des Ressourcen-Manager von Framework zur Unterstützung der Ressourcensuche und des Ressourcenfallback. Mehrere Sprachsatellitenassemblys arbeiten mit derselben Hauptassembly. Die Ressourcenassembly, die geladen wird, hängt von der CurrentUICulture des aktuellen Threads ab.
Lokalisierbare Benutzeroberfläche
WPF-Anwendungen verwenden XAML für die Definition ihrer Benutzeroberfläche. XAML ermöglicht es Entwicklern, eine Hierarchie von Objekten mit einem Satz von Eigenschaften und Logik anzugeben. Der Hauptverwendungszweck von XAML ist die Entwicklung von WPF-Anwendungen, aber sie kann auch verwendet werden, um eine Hierarchie von Objekten der CLR (Common Language Runtime) anzugeben. Die meisten Entwickler verwenden XAML für die Angabe der Benutzeroberfläche ihrer Anwendung, und sie verwenden eine Programmiersprache wie C#, um auf Benutzerinteraktionen zu reagieren.
Aus Sicht einer Ressource ist eine Benutzeroberfläche ein Ressourcenelement und daher muss sein fertiges Verteilungsformat lokalisierbar sein, um internationale Sprachen zu unterstützen. Da XAML Ereignisse nicht behandeln kann, enthalten viele XAML-Anwendungen Codeblöcke für die Behandlung. Weitere Informationen finden Sie unter XAML in WPF. Code wird entfernt und in verschiedene Binärdateien kompiliert, wenn eine XAML-Datei in der BAML-Form von XAML mit Token versehen wird. Die BAML-Form von XAML-Dateien, Bilder und andere verwaltete Ressourcenobjekte werden in die Satellitenressourcenassembly, die in andere Sprachen lokalisiert werden kann, oder in die Hauptassembly eingebettet, wenn keine Lokalisierung erforderlich ist.
Hinweis
WPF-Anwendungen unterstützen alle Ressourcen von FrameworkCLR, einschließlich Zeichenfolgentabellen, Bilder usw.
Erstellen von lokalisierbaren Anwendungen
Lokalisierung bezeichnet die Anpassung einer Benutzeroberfläche an andere Kulturen. Soll eine WPF-Anwendung lokalisierbar sein, müssen Entwickler alle lokalisierbaren Ressourcen in einer Ressourcenassembly erstellen. Die Ressourcenassembly wird in verschiedene Sprachen lokalisiert, und der CodeBehind verwendet die API der Ressourcenverwaltung zum Laden. Eine der erforderlichen Dateien für eine WPF-Anwendung ist eine Projektdatei (.proj). Alle Ressourcen, die Sie in Ihrer Anwendung verwenden, sollten in der Projektdatei enthalten sein. Das folgende Beispiel einer CSPROJ-Datei zeigt die dazu erforderliche Vorgehensweise.
<Resource Include="data\picture1.jpg"/>
<EmbeddedResource Include="data\stringtable.en-US.restext"/>
Instanziieren Sie für die Verwendung einer Ressource in Ihrer Anwendung einen ResourceManager und laden Sie die Ressource, die Sie verwenden möchten. Im folgenden Beispiel wird die dafür erforderliche Vorgehensweise veranschaulicht.
void OnClick(object sender, RoutedEventArgs e)
{
ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
Assembly.GetExecutingAssembly());
Text1.Text = rm.GetString("Message");
}
Verwendung von ClickOnce mit lokalisierten Anwendungen
ClickOnce ist eine neue Windows Forms-Bereitstellungstechnologie, die mit Visual Studio 2005 ausgeliefert wird. Es ermöglicht die Anwendungsinstallation und die Aktualisierung von Webanwendungen. Wenn eine mit ClickOnce bereitgestellte Anwendung lokalisiert ist, kann sie nur in der lokalisierten Kultur angezeigt werden. Wenn z. B. eine bereitgestellte Anwendung in Japanisch lokalisiert ist, kann sie nur in der japanischen Version von Microsoft Windows angezeigt werden, nicht in der englischen Version von Windows. Dies stellt ein Problem dar, da japanische Benutzer häufig eine englische Version von Windows verwenden.
Die Lösung für dieses Problem ist die Festlegung des Attributs der neutralen Fallbacksprache. Ein Anwendungsentwickler kann optional Ressourcen aus der Hauptassembly entfernen und angeben, dass die Ressourcen in einer Satellitenassembly für eine bestimmte Kultur gefunden werden können. Um diesen Prozess zu steuern, verwenden Sie das NeutralResourcesLanguageAttribute. Der Konstruktor der NeutralResourcesLanguageAttribute-Klasse hat zwei Signaturen, von denen eine einen UltimateResourceFallbackLocation-Parameter enthält, der den Ort angibt, an dem der ResourceManager die Fallback-Ressourcen extrahieren soll: Haupt- oder Satellitenassembly. Im folgenden Beispiel wird veranschaulicht, wie Sie das Attribut verwenden. Für den endgültigen Ausweichpfad bewirkt der Code, dass der ResourceManager die Ressourcen im Unterverzeichnis „de“ des Verzeichnisses der aktuell ausgeführten Assembly sucht.
[assembly: NeutralResourcesLanguageAttribute(
"de" , UltimateResourceFallbackLocation.Satellite)]
Weitere Informationen
.NET Desktop feedback