Globalisierung für WPF
In diesem Thema werden Probleme vorgestellt, die Sie beim Schreiben von Windows Presentation Foundation (WPF)-Anwendungen für den globalen Markt beachten sollten. Die Globalisierungsprogrammierungselemente werden in .NET im System.Globalization Namespace definiert.
XAML-Globalisierung
Extensible Application Markup Language (XAML) basiert auf XML und nutzt die in der XML-Spezifikation definierte Globalisierungsunterstützung. In den folgenden Abschnitten werden einige XAML-Features beschrieben, 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 eine hexadezimale Zeichenreferenz. Beachten Sie, dass ein x vor der Hexadezimalzahl steht.
Ϩ
Codierung
Die von XAML unterstützte Codierung sind ASCII, Unicode UTF-16 und UTF-8. Die Codierungsanweisung befindet sich am Anfang des XAML-Dokuments. Wenn kein Codierungsattribut vorhanden ist und keine Bytereihenfolge vorhanden ist, wird der Parser standardmäßig auf UTF-8 festgelegt. UTF-8 und UTF-16 sind die bevorzugten Codierungen. UTF-7 wird nicht unterstützt. Im folgenden Beispiel wird veranschaulicht, wie eine UTF-8-Codierung in einer XAML-Datei angegeben wird.
?xml encoding="UTF-8"?
Sprachattribut
XAML verwendet xml:lang, um das Sprachattribute eines Elements darzustellen. 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 Sprachattribute ist sehr nützlich für die Angabe regionaler Sprachen. Beispielsweise hat Französisch unterschiedliche Rechtschreibung, Vokabular und Aussprache in Frankreich, Quebec, Belgien und der Schweiz. Außerdem teilen Chinesisch, Japanisch und Koreanisch Codepunkte in Unicode, aber die ideografischen Formen sind unterschiedlich und verwenden völlig unterschiedliche Schriftarten.
Das folgende Beispiel von Extensible Application Markup Language (XAML) 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 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 sie Ersatzzeichenpaare oder kombinierende Zeichen enthalten.
Entwerfen einer internationalen Benutzeroberfläche mit XAML
In diesem Abschnitt werden Die Features der Benutzeroberfläche beschrieben, die Sie beim Schreiben einer Anwendung berücksichtigen sollten.
Internationaler Text
WPF enthält integrierte Verarbeitung für alle von Microsoft .NET Framework unterstützten Schreibsysteme.
Die folgenden Skripts werden derzeit unterstützt:
Arabisch
Bengali
Devanagari
Kyrillisch
Griechisch
Gujarati
Gurmukhi
Hebräisch
Ideografische Skripts
Kannada
Laotisch
Latein
Malayalam
Mongolisch
Odia
Syrisch
Tamil
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 derzeit nicht unterstützt:
Khmer
Altes Koreanisches Hangul
Myanmar
Singhalesisch
Alle Schreibsystemmodule unterstützen OpenType-Schriftarten. OpenType-Schriftarten können Layouttabellen im OpenType-Format enthalten, die es Schriftdesignern ermöglichen, bessere internationale und hochwertige typografische Schriften zu entwerfen. Die OpenType-Schriftartlayouttabellen enthalten Informationen zu Glyphenersetzungen, Glyphenpositionierung, Begründung und Basispositionierung, wodurch Textverarbeitungsanwendungen das Textlayout verbessern können.
OpenType-Schriftarten ermöglichen die Behandlung großer Glyphensätze mithilfe der Unicode-Codierung. Diese Codierung gewährleistet eine umfassende internationale Unterstützung sowie typografische Glyphenvarianten.
Das WPF-Textrendering wird von der Microsoft ClearType-Subpixeltechnologie unterstützt, die die Auflösungsunabhängigkeit unterstützt. Dies verbessert die Lesbarkeit erheblich und bietet die Möglichkeit, qualitativ hochwertige Dokumente im Magazinstil für alle Schriftsysteme zu unterstützen.
Internationales Layout
WPF bietet eine sehr bequeme Möglichkeit, horizontale, bidirektionale und vertikale Layouts zu unterstützen. Im Präsentationsframework kann die eigenschaft FlowDirection zum Definieren des Layouts verwendet werden. Die Flussrichtungsmuster sind:
LeftToRight: Horizontales Layout für Latein, Ostasiatisch usw.
RightToLeft: Bidirektional für Arabisch, Hebräisch usw.
Entwickeln lokalisierbarer Anwendungen
Wenn Sie eine Anwendung für den globalen Verbrauch schreiben, sollten Sie bedenken, dass die Anwendung lokalisierbar sein muss. Die folgenden Themen weisen darauf hin, was Sie berücksichtigen sollten.
Mehrsprachige Benutzeroberfläche
Mehrsprachige Benutzeroberflächen (Multilingual User Interfaces, MUI) ist eine Microsoft-Unterstützung für den Wechsel von UIs von einer Sprache in eine andere. Eine WPF-Anwendung verwendet das Assemblymodell, um MUI zu unterstützen. 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 zum Definieren der Benutzeroberfläche. MIT XAML können Entwickler eine Hierarchie von Objekten mit einer Reihe von Eigenschaften und Logik angeben. Die primäre Verwendung von XAML besteht darin, WPF-Anwendungen zu entwickeln, kann jedoch verwendet werden, um eine Hierarchie von Common Language Runtime (CLR)-Objekten anzugeben. Die meisten Entwickler verwenden XAML, um die Benutzeroberfläche ihrer Anwendung anzugeben und eine Programmiersprache wie C# zu verwenden, um auf Benutzerinteraktionen zu reagieren.
Aus Ressourcensicht ist eine Benutzeroberfläche ein Ressourcenelement und daher muss das endgültige Verteilungsformat lokalisierbar sein, um internationale Sprachen zu unterstützen. Da XAML ereignisse nicht verarbeiten kann, enthalten viele XAML-Anwendungen codeblöcke, um dies zu tun. 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.
Anmerkung
WPF-Anwendungen unterstützen alle FrameworkCLR-Ressourcen, einschließlich Zeichenfolgentabellen, Bilder usw.
Erstellen lokalisierbarer Anwendungen
Lokalisierung bedeutet, eine Benutzeroberfläche an verschiedene Kulturen anzupassen. Um eine WPF-Anwendung lokalisierbar zu machen, 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 dateien, die für eine WPF-Anwendung erforderlich sind, ist eine Projektdatei (.proj). Alle Ressourcen, die Sie in Ihrer Anwendung verwenden, sollten in die Projektdatei aufgenommen werden. Im folgenden Beispiel aus einer CSPROJ-Datei wird gezeigt, wie dies geschieht.
<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 dies veranschaulicht.
void OnClick(object sender, RoutedEventArgs e)
{
ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
Assembly.GetExecutingAssembly());
Text1.Text = rm.GetString("Message");
}
Verwenden 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 das Upgrade 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 auf Japanisch lokalisiert ist, kann sie nur auf japanischen Microsoft Windows angezeigt werden, nicht unter englischen Windows. Dies stellt ein Problem dar, da es ein gängiges Szenario für japanische Benutzer ist, eine englische Version von Windows auszuführen.
Die Lösung für dieses Problem ist das Festlegen des sprachneutralen Fallback-Attributs. Ein Anwendungsentwickler kann optional Ressourcen aus der Hauptassembly entfernen und angeben, dass die Ressourcen in einer Satellitenassembly gefunden werden können, die einer bestimmten Kultur entspricht. 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. Das folgende Beispiel zeigt, wie das Attribut verwendet wird. 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