Partager via


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 :

TodoItemPage en arabe avec une direction de flux 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. Pour ce faire, affectez à la propriété FlowDirection d’une page ou d’une disposition racine la valeur staticDevice.FlowDirection :

<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>

Langues prises en charge par Info.plist

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/émulateur pour utiliser la langue de droite à gauche ou en activant la direction de disposition Force RTL dans Paramètres > Options du développeur.

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 de FlyoutPage.
  • 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 :

  1. Déclarez la IntPtr_objc_msgSend fonction comme première ligne dans votre AppDelegate classe :

    [System.Runtime.InteropServices.DllImport(ObjCRuntime.Constants.ObjectiveCLibrary, EntryPoint = "objc_msgSend")]
    internal extern static IntPtr IntPtr_objc_msgSend(IntPtr receiver, IntPtr selector, UISemanticContentAttribute arg1);
    
  2. Appelez la IntPtr_objc_msgSend fonction à partir de la FinishedLaunching méthode, avant de retourner à partir de la FinshedLaunching 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