Lokalisierung von rechts nach links
Durch die Lokalisierung von rechts nach links kann Text in Xamarin.Forms-Anwendungen in der Leserichtung von rechts nach links dargestellt werden.
Hinweis
Für die Lokalisierung von rechts nach links ist iOS 9 oder höher bzw. unter Android API 17 oder höher erforderlich.
Die Leserichtung ist die Richtung, in der Benutzeroberflächenelemente auf der Seite vom Auge wahrgenommen werden. In einigen Sprachen wie Arabisch und Hebräisch werden Benutzeroberflächenelemente von rechts nach links geschrieben. Dieses Verhalten wird erreicht, indem Sie die Eigenschaft VisualElement.FlowDirection
festlegen. Diese Eigenschaft ruft die Leserichtung von Benutzeroberflächenelementen ab oder legt diese fest, und zwar innerhalb aller übergeordneten Elemente, die das Layout steuern. Daher muss sie auf einen der FlowDirection
-Enumerationswerte festgelegt werden:
Wenn Sie die FlowDirection
-Eigenschaft für ein Element auf RightToLeft
festlegen, wird die Ausrichtung in der Regel rechtsseitig und die Leserichtung und das Layout des Steuerelements von rechts nach links festgelegt:
Tipp
Sie sollten nur die Eigenschaft FlowDirection
auf das anfängliche Layout festlegen. Wenn dieser Wert zur Laufzeit geändert wird, hat dies einen teuren Layoutvorgang zur Folge, der die Leistung beeinträchtigt.
Der Standardwert der FlowDirection
-Eigenschaft für ein Element ohne übergeordnetes Element lautet LeftToRight
, während der Standardwert von FlowDirection
für ein Element mit übergeordnetem Element MatchParent
ist. Aus diesem Grund erbt ein Element den Wert der FlowDirection
-Eigenschaft vom übergeordneten Element in der visuellen Struktur, und alle Elemente können den vom übergeordneten Element geerbten Wert auch überschreiben.
Tipp
Wenn Sie eine App für Sprachen mit einer Schreibrichtung von rechts nach links lokalisieren, legen Sie die Eigenschaft FlowDirection
für die Seite oder das Rootlayout fest. Dadurch werden alle Elemente auf der Seite oder im Rootlayout der Schreibrichtung entsprechend ausgerichtet.
Beachtung der Schreibrichtung des Geräts
Dass die Schreibrichtung auf dem Geräts der ausgewählten Sprache und Region entsprechend beachtet wird, ist eine bewusste Entscheidung der Entwickler und passiert nicht automatisch. Für die richtige Schreibrichtung muss die FlowDirection
-Eigenschaft für eine Seite oder ein Rootlayout auf den Wert static
Device.FlowDirection
festgelegt werden:
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
this.FlowDirection = Device.FlowDirection;
Alle untergeordneten Elemente auf der Seite oder im Rootlayout erben in diesem Fall standardmäßig den Device.FlowDirection
-Wert.
Plattformeinrichtung
Es ist eine bestimmte Plattformkonfiguration erforderlich, um die Gebietsschemas zu ermöglichen, in denen von rechts nach links gelesen wird.
iOS
Das erforderliche Gebietsschema, in dem von rechts nach links gelesen wird, sollte als unterstützte Sprache zu den Arrayelementen für den CFBundleLocalizations
-Schlüssel in Info.plist hinzugefügt werden. Im folgenden Beispiel wird gezeigt, wie dem Array für den CFBundleLocalizations
-Schlüssel Arabisch hinzugefügt wurde:
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ar</string>
</array>
Weitere Informationen finden Sie unter Grundlagen der Lokalisierung in iOS.
Die Lokalisierung von rechts nach links kann getestet werden, indem Sie die Sprache und die Region auf dem Gerät/Simulator in ein Gebietsschema ändern, in dem von rechts nach links gelesen wird und das in Info.plist angegeben wurde.
Warnung
Beachten Sie, dass beim Ändern der Sprache und der Region in ein Gebietsschema, das von rechts nach links gelesen wird, unter iOS alle DatePicker
-Ansichten eine Ausnahme auslösen, wenn Sie die für das Gebietsschema erforderlichen Ressourcen nicht einfügen. Wenn Sie z. B. eine App auf Arabisch testen, die eine DatePicker
-Ansicht hat, sollten Sie sicherstellen, dass mideast im Abschnitt Internationalisierung des Bereichs iOS-Build ausgewählt ist.
Android
Die Datei androidmanifest.xml der App sollte aktualisiert werden, damit der <uses-sdk>
-Knoten das android:minSdkVersion
-Attribut auf 17 und der <application>
-Knoten das android:supportsRtl
-Attribut auf true
festlegt:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<uses-sdk android:minSdkVersion="17" ... />
<application ... android:supportsRtl="true">
</application>
</manifest>
Die Lokalisierung von rechts nach links kann dann getestet werden, indem Sie das Gerät/den Emulator so ändern, dass die Sprache von rechts nach links verwendet wird, oder indem Sie die Layoutrichtung "Erzwingen" in den Entwickleroptionen für Einstellungen > aktivieren.
Universelle Windows-Plattform (UWP)
Die erforderlichen Sprachressourcen sollten im <Resources>
-Knoten der Datei Package.appxmanifest angegeben sein. Im folgenden Beispiel wird gezeigt, wie auf dem <Resources>
-Knoten Arabisch hinzugefügt wird:
<Resources>
<Resource Language="x-generate"/>
<Resource Language="en" />
<Resource Language="ar" />
</Resources>
Darüber hinaus erfordert die UWP, dass die Standardkultur der Anwendung explizit in der .NET Standard-Bibliothek definiert ist. Legen Sie dazu das NeutralResourcesLanguage
-Attribut in AssemblyInfo.cs
oder einer anderen Klasse wie folgt auf die Standardkultur fest:
using System.Resources;
[assembly: NeutralResourcesLanguage("en")]
Die Lokalisierung von rechts nach links kann getestet werden, indem Sie die Sprache und die Region auf dem Gerät in das richtige Rechts-nach-Links-Gebietsschema ändern.
Begrenzungen
Für die Lokalisierung von rechts nach links gelten in Xamarin.Forms derzeit die folgenden Einschränkungen:
- Die Platzierung der
NavigationPage
-Schaltfläche, die Platzierung der Symbolleistenelemente und die Übergangsanimation werden durch das Gebietsschema des Geräts und nicht durch dieFlowDirection
-Eigenschaft gesteuert. - Die Wischrichtung von
CarouselPage
wird nicht umgestellt. - Der visuelle Inhalt von
Image
wird nicht umgestellt. - Der Inhalt von
WebView
berücksichtigt nicht dieFlowDirection
-Eigenschaft. - Für die Steuerung der Textausrichtung muss eine
TextDirection
-Eigenschaft hinzugefügt werden.
iOS
- Die Ausrichtung von
Stepper
wird durch das Gebietsschema des Geräts gesteuert, nicht durch dieFlowDirection
-Eigenschaft. - Die Textausrichtung von
EntryCell
wird durch das Gebietsschema des Geräts gesteuert, nicht durch dieFlowDirection
-Eigenschaft. - Gesten und die Ausrichtung von
ContextActions
werden nicht umgekehrt.
Android
- Die Ausrichtung von
SearchBar
wird durch das Gebietsschema des Geräts gesteuert, nicht durch dieFlowDirection
-Eigenschaft. - Die Platzierung von
ContextActions
wird durch das Gebietsschema des Geräts gesteuert, nicht durch dieFlowDirection
-Eigenschaft.
UWP
- Die Textausrichtung von
Editor
wird durch das Gebietsschema des Geräts gesteuert, nicht durch dieFlowDirection
-Eigenschaft. - Die
FlowDirection
-Eigenschaft wird nicht von den untergeordnetenFlyoutPage
-Elementen geerbt. - Die Textausrichtung von
ContextActions
wird durch das Gebietsschema des Geräts gesteuert, nicht durch dieFlowDirection
-Eigenschaft.
Erzwingen des Layouts von rechts nach links
Für Xamarin.iOS- und Xamarin.Android-Anwendungen kann die Verwendung eines Layouts von rechts nach links unabhängig von den Geräteeinstellungen erzwungen werden, indem die entsprechenden Plattformprojekte geändert werden.
iOS
Wenn Sie bei Xamarin.iOS-Anwendungen die Verwendung des Layouts von rechts nach links erzwingen möchten, ändern Sie die Klasse AppDelegate folgendermaßen ab:
Deklarieren Sie die Funktion
IntPtr_objc_msgSend
als erste Zeile IhrerAppDelegate
-Klasse:[System.Runtime.InteropServices.DllImport(ObjCRuntime.Constants.ObjectiveCLibrary, EntryPoint = "objc_msgSend")] internal extern static IntPtr IntPtr_objc_msgSend(IntPtr receiver, IntPtr selector, UISemanticContentAttribute arg1);
Rufen Sie die Funktion
IntPtr_objc_msgSend
aus derFinishedLaunching
-Methode vor der Rückgabe aus derFinshedLaunching
-Methode ab:bool result = base.FinishedLaunching(app, options); ObjCRuntime.Selector selector = new ObjCRuntime.Selector("setSemanticContentAttribute:"); IntPtr_objc_msgSend(UIView.Appearance.Handle, selector.Handle, UISemanticContentAttribute.ForceRightToLeft); return result;
Diese Vorgehensweise ist für Anwendungen geeignet, die immer ein Layout von rechts nach links benötigen. Dadurch entfällt die Anforderung, die FlowDirection
-Eigenschaft festzulegen.
Weitere Informationen zur IntrPtr_objc_msgSend
-Methode finden Sie unter Objective-C-Selektoren in Xamarin.iOS.
Android
Wenn Sie bei Xamarin.Android-Anwendungen die Verwendung des Layouts von rechts nach links erzwingen möchten, ändern Sie die Klasse MainActivity so ab, dass sie die folgende Zeile enthält:
Window.DecorView.LayoutDirection = LayoutDirection.Rtl;
Hinweis
Für diesen Ansatz muss die Anwendung so eingerichtet werden, dass sie das RTL-Layout (von rechts nach links) unterstützt. Weitere Informationen finden Sie unter Plattformeinrichtung: Android.
Diese Vorgehensweise ist für Anwendungen geeignet, die immer ein Layout von rechts nach links benötigen. Dadurch entfällt die Anforderung, die FlowDirection
-Eigenschaft für die meisten Steuerelemente festzulegen. Einige Steuerelemente wie z. B. CollectionView
berücksichtigen die LayoutDirection
-Eigenschaft jedoch nicht und erfordern weiterhin, dass die FlowDirection
-Eigenschaft festgelegt wird.
Unterstützung für Sprachen in der Xamarin.University, die von rechts nach links gelesen werden
Video zur Rechts-nach-Links-Unterstützung in Xamarin.Forms 3.0