Localisation de droite à gauche
La localisation de droite à gauche ajoute la prise en charge du sens du flux de droite à gauche aux Xamarin.Forms applications.
Remarque
La localisation de droite à gauche nécessite l’utilisation d’iOS 9 ou version ultérieure, et de l’API 17 ou version ultérieure sur Android.
Le sens du flux est la direction dans laquelle les éléments d’interface utilisateur sur la page sont analysés par l’œil. Dans certaines langues, par exemple l’arabe et l’hébreu, les éléments d’IU doivent être disposés de droite à gauche. Pour ce faire, définissez la propriété VisualElement.FlowDirection
. Cette propriété obtient ou définit la direction de flux des éléments d’IU dans les éléments parents qui contrôlent leur disposition. Elle doit avoir l’une des valeurs d’énumération de FlowDirection
:
L’affectation à la propriété FlowDirection
de la valeur RightToLeft
pour un élément permet généralement de définir l’alignement à droite, l’ordre de lecture de droite à gauche et la direction de flux du contrôle de droite à gauche :
Conseil
Vous devez uniquement définir la propriété FlowDirection
pour la disposition initiale. Si vous changez cette valeur au moment de l’exécution, cela alourdit le processus de disposition et affecte le niveau de performance.
La valeur de propriété FlowDirection
par défaut pour un élément sans parent est LeftToRight
, alors que le FlowDirection
par défaut d’un élément avec parent est MatchParent
. Un élément hérite donc de la valeur de propriété FlowDirection
de son parent dans l’arborescence d’éléments visuels, et un élément peut remplacer la valeur qu’il obtient de son parent.
Conseil
Quand vous localisez une application pour les langues lues de droite à gauche, définissez la propriété FlowDirection
dans une page ou une disposition racine. Ainsi, tous les éléments contenus dans la page ou la disposition racine répondent correctement à la direction de flux.
Respect de la direction de flux de l’appareil
Le respect de la direction de flux de l’appareil en fonction de la langue et de la région sélectionnées est un choix explicite du développeur et n’est pas automatique. Elle peut être obtenue en définissant la FlowDirection
propriété sur une page, ou une mise en page racine, sur la static
Device.FlowDirection
valeur :
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
this.FlowDirection = Device.FlowDirection;
Tous les éléments enfants de la page, ou de la disposition racine, héritent par défaut de la valeur Device.FlowDirection
.
Configuration de la plateforme
Une configuration de plateforme spécifique est obligatoire pour permettre l’activation des paramètres régionaux de droite à gauche.
iOS
Les paramètres régionaux de droite à gauche nécessaires doivent être ajoutés aux éléments de tableau de la clé CFBundleLocalizations
dans Info.plist en tant que langue prise en charge. L’exemple suivant montre que l’arabe a été ajouté au tableau pour la clé CFBundleLocalizations
:
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ar</string>
</array>
Pour plus d’informations, consultez les Principes de base de la localisation dans iOS.
Vous pouvez ensuite tester la localisation de droite à gauche en remplaçant la langue et la région de l’appareil/du simulateur par des paramètres régionaux de droite à gauche spécifiés dans Info.plist.
Avertissement
Notez qu’à partir du moment où vous changez la langue et la région en introduisant des paramètres régionaux de droite à gauche sur iOS, les vues DatePicker
lèvent une exception si vous n’incluez pas les ressources nécessaires pour ces paramètres régionaux. Par exemple, quand vous testez une application en arabe comportant DatePicker
, vérifiez que mideast est sélectionné dans la section Internationalisation du volet Build iOS.
Android
Le fichier AndroidManifest.xml de l’application doit être mis à jour pour que le nœud <uses-sdk>
affecte la valeur 17 à l’attribut android:minSdkVersion
, et que le nœud <application>
affecte la valeur true
à l’attribut android:supportsRtl
:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<uses-sdk android:minSdkVersion="17" ... />
<application ... android:supportsRtl="true">
</application>
</manifest>
La localisation de droite à gauche peut ensuite être testée en modifiant l’appareil/l’émulateur pour utiliser la langue de droite à gauche ou en activant forcer la disposition RTL dans les options du développeur paramètres>.
Plateforme Windows universelle (UWP)
Vous devez spécifier les ressources linguistiques nécessaires dans le nœud <Resources>
du fichier Package.appxmanifest. L’exemple suivant montre que l’arabe a été ajouté au nœud <Resources>
:
<Resources>
<Resource Language="x-generate"/>
<Resource Language="en" />
<Resource Language="ar" />
</Resources>
De plus, avec UWP vous devez définir explicitement la culture par défaut de l’application dans la bibliothèque .NET Standard. Pour ce faire, affectez la culture par défaut à l’attribut NeutralResourcesLanguage
dans AssemblyInfo.cs
ou une autre classe :
using System.Resources;
[assembly: NeutralResourcesLanguage("en")]
Vous pouvez ensuite tester la localisation de droite à gauche en remplaçant la langue et la région de l’appareil/du simulateur par les paramètres régionaux de droite à gauche appropriés.
Limites
Xamarin.Forms La localisation de droite à gauche présente actuellement un certain nombre de limitations :
- Pour
NavigationPage
, l’emplacement du bouton, l’emplacement des éléments de barre d’outils et l’animation de transition sont contrôlés par les paramètres régionaux de l’appareil, et non par la propriétéFlowDirection
. - La direction de balayage de
CarouselPage
ne se retourne pas. - Le contenu visuel de
Image
ne se retourne pas. - Le contenu de
WebView
ne respecte pas la propriétéFlowDirection
. - Vous devez ajouter une propriété
TextDirection
pour contrôler l’alignement du texte.
iOS
- L’orientation de
Stepper
est contrôlée par les paramètres régionaux de l’appareil, et non par la propriétéFlowDirection
. - L’alignement du texte de
EntryCell
est contrôlé par les paramètres régionaux de l’appareil, et non par la propriétéFlowDirection
. - Les mouvements et l’alignement de
ContextActions
ne sont pas inversés.
Android
- L’orientation de
SearchBar
est contrôlée par les paramètres régionaux de l’appareil, et non par la propriétéFlowDirection
. - Le placement de
ContextActions
est contrôlé par les paramètres régionaux de l’appareil, et non par la propriétéFlowDirection
.
UWP
- L’alignement du texte de
Editor
est contrôlé par les paramètres régionaux de l’appareil, et non par la propriétéFlowDirection
. - La propriété
FlowDirection
n’est pas héritée par les enfants deFlyoutPage
. - L’alignement du texte de
ContextActions
est contrôlé par les paramètres régionaux de l’appareil, et non par la propriétéFlowDirection
.
Forcer la disposition de droite à gauche
Les applications Xamarin.iOS et Xamarin.Android peuvent toujours utiliser une disposition de droite à gauche, quels que soient les paramètres de l’appareil, en modifiant les projets de plateforme respectifs.
iOS
Les applications Xamarin.iOS peuvent être forcées d’utiliser toujours une disposition de droite à gauche en modifiant la classe AppDelegate comme suit :
Déclarez la
IntPtr_objc_msgSend
fonction comme première ligne dans votreAppDelegate
classe :[System.Runtime.InteropServices.DllImport(ObjCRuntime.Constants.ObjectiveCLibrary, EntryPoint = "objc_msgSend")] internal extern static IntPtr IntPtr_objc_msgSend(IntPtr receiver, IntPtr selector, UISemanticContentAttribute arg1);
Appelez la
IntPtr_objc_msgSend
fonction à partir de laFinishedLaunching
méthode, avant de retourner à partir de laFinshedLaunching
méthode :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;
Cette approche est utile pour les applications qui nécessitent toujours une disposition de droite à gauche et supprime la condition requise pour définir la FlowDirection
propriété.
Pour plus d’informations sur la IntrPtr_objc_msgSend
méthode, consultez les sélecteurs Objective-C dans Xamarin.iOS.
Android
Les applications Xamarin.Android peuvent être forcées d’utiliser toujours une disposition de droite à gauche en modifiant la classe MainActivity pour inclure la ligne suivante :
Window.DecorView.LayoutDirection = LayoutDirection.Rtl;
Remarque
Cette approche nécessite que l’application soit configurée pour prendre en charge la disposition de droite à gauche. Pour plus d’informations, consultez la configuration de la plateforme Android.
Cette approche est utile pour les applications qui nécessitent toujours une disposition de droite à gauche et supprime la nécessité de définir la propriété pour la FlowDirection
plupart des contrôles. Toutefois, certains contrôles, tels que CollectionView
, ne respectent pas la LayoutDirection
propriété et nécessitent toujours que la FlowDirection
propriété soit définie.
Prise en charge linguistique de droite à gauche avec Xamarin.University
Xamarin.Forms 3.0 Vidéo de prise en charge de droite à gauche