Udostępnij za pośrednictwem


Lokalizacja od prawej do lewej

Lokalizacja od prawej do lewej dodaje obsługę kierunku przepływu od prawej do lewej do Xamarin.Forms aplikacji.

Uwaga

Lokalizacja od prawej do lewej wymaga użycia systemu iOS 9 lub nowszego oraz interfejsu API 17 lub nowszego w systemie Android.

Kierunek przepływu to kierunek, w którym elementy interfejsu użytkownika na stronie są skanowane przez oko. Niektóre języki, takie jak arabski i hebrajski, wymagają, aby elementy interfejsu użytkownika zostały określone w kierunku przepływu od prawej do lewej. Można to osiągnąć, ustawiając VisualElement.FlowDirection właściwość . Ta właściwość pobiera lub ustawia kierunek przepływu elementów interfejsu użytkownika w ramach dowolnego elementu nadrzędnego, który kontroluje ich układ, i powinien być ustawiony na jedną z FlowDirection wartości wyliczenia:

FlowDirection Ustawienie właściwości na RightToLeft na element zwykle ustawia wyrównanie z prawej strony, kolejność odczytu do prawej do lewej i układ kontrolki, aby przepływać od prawej do lewej:

TodoItemPage w języku arabskim z kierunkiem przepływu od prawej do lewej

Napiwek

Właściwość należy ustawić FlowDirection tylko w układzie początkowym. Zmiana tej wartości w czasie wykonywania powoduje kosztowny proces układu, który wpłynie na wydajność.

Domyślna wartość właściwości elementu bez elementu nadrzędnego to , a wartością domyślną FlowDirectionFlowDirection elementu z elementem nadrzędnym jest MatchParent.LeftToRight W związku z tym element dziedziczy FlowDirection wartość właściwości z elementu nadrzędnego w drzewie wizualizacji, a dowolny element może zastąpić wartość pobieraną z elementu nadrzędnego.

Napiwek

Podczas lokalizowania aplikacji dla języków od prawej do lewej ustaw FlowDirection właściwość na stronie lub w układzie głównym. Powoduje to, że wszystkie elementy zawarte na stronie lub w układzie głównym odpowiednio reagują na kierunek przepływu.

Przestrzeganie kierunku przepływu urządzenia

Przestrzeganie kierunku przepływu urządzenia na podstawie wybranego języka i regionu jest wyraźnym wyborem dla deweloperów i nie odbywa się automatycznie. Można to osiągnąć, ustawiając FlowDirection właściwość na stronie lub w układzie głównym na staticDevice.FlowDirection wartość:

<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
this.FlowDirection = Device.FlowDirection;

Wszystkie elementy podrzędne strony lub układu głównego domyślnie dziedziczą Device.FlowDirection wartość.

Konfiguracja platformy

Aby włączyć ustawienia regionalne od prawej do lewej, wymagana jest określona konfiguracja platformy.

iOS

Wymagane ustawienia regionalne od prawej do lewej należy dodać jako obsługiwany język do elementów tablicy dla CFBundleLocalizations klucza w pliku Info.plist. W poniższym przykładzie pokazano, że język arabski został dodany do tablicy CFBundleLocalizations klucza:

<key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>ar</string>
</array>

Obsługiwane języki Info.plist

Aby uzyskać więcej informacji, zobacz Localization Basics in iOS (Podstawy lokalizacji w systemie iOS).

Następnie można przetestować lokalizację od prawej do lewej, zmieniając język i region na urządzeniu/symulatorze na ustawienia regionalne od prawej do lewej określone w pliku Info.plist.

Ostrzeżenie

Pamiętaj, że w przypadku zmiany języka i regionu na ustawienia regionalne od prawej do lewej w systemie iOS wszystkie DatePicker widoki będą zgłaszać wyjątek, jeśli nie uwzględnisz zasobów wymaganych dla ustawień regionalnych. Na przykład podczas testowania aplikacji w języku arabskim, która ma wartość DatePicker, upewnij się, że w sekcji Internationalization (Internationalization) okienka Kompilacja systemu iOS jest zaznaczona wartość mideast.

Android

Plik AndroidManifest.xml aplikacji powinien zostać zaktualizowany tak, aby <uses-sdk> węzeł ustawiał android:minSdkVersion atrybut na 17, a <application> węzeł ustawia android:supportsRtl atrybut na true wartość :

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <uses-sdk android:minSdkVersion="17" ... />
    <application ... android:supportsRtl="true">
    </application>
</manifest>

Następnie można przetestować lokalizację od prawej do lewej, zmieniając urządzenie/emulator tak, aby używał języka od prawej do lewej lub włączając kierunek układu RTL w Ustawienia > Opcje dewelopera.

Platforma uniwersalna systemu Windows (UWP)

Wymagane zasoby językowe należy określić w węźle <Resources>pliku Package.appxmanifest . W poniższym przykładzie pokazano, że język arabski został dodany do węzła <Resources> :

<Resources>
    <Resource Language="x-generate"/>
    <Resource Language="en" />
    <Resource Language="ar" />
</Resources>

Ponadto platforma UWP wymaga, aby domyślna kultura aplikacji została jawnie zdefiniowana w bibliotece .NET Standard. Można to zrobić, ustawiając NeutralResourcesLanguage atrybut w AssemblyInfo.csklasie lub w innej klasie na kulturę domyślną:

using System.Resources;

[assembly: NeutralResourcesLanguage("en")]

Następnie można przetestować lokalizację od prawej do lewej, zmieniając język i region na urządzeniu na odpowiednie ustawienia regionalne od prawej do lewej.

Ograniczenia

Xamarin.Forms Lokalizacja od prawej do lewej ma obecnie wiele ograniczeń:

  • NavigationPage lokalizacja przycisku, lokalizacja elementu paska narzędzi i animacja przejścia jest kontrolowana przez ustawienia regionalne urządzenia, a nie FlowDirection właściwość.
  • CarouselPage kierunek przesunięcia nie przerzuca.
  • Image zawartość wizualna nie jest przerzucana.
  • WebView zawartość nie uwzględnia FlowDirection właściwości.
  • Aby TextDirection kontrolować wyrównanie tekstu, należy dodać właściwość .

iOS

  • Stepper orientacja jest kontrolowana przez ustawienia regionalne urządzenia, a nie FlowDirection właściwość .
  • EntryCell wyrównanie tekstu jest kontrolowane przez ustawienia regionalne urządzenia, a nie FlowDirection właściwość .
  • ContextActions gesty i wyrównanie nie są odwrócone.

Android

Platforma UWP

Wymuś układ od prawej do lewej

Aplikacje Xamarin.iOS i Xamarin.Android mogą być wymuszane, aby zawsze używać układu od prawej do lewej, niezależnie od ustawień urządzenia, modyfikując odpowiednie projekty platformy.

iOS

Aplikacje platformy Xamarin.iOS mogą być wymuszane, aby zawsze używać układu od prawej do lewej, modyfikując klasę AppDelegate w następujący sposób:

  1. Zadeklaruj IntPtr_objc_msgSend funkcję jako pierwszy wiersz w AppDelegate klasie:

    [System.Runtime.InteropServices.DllImport(ObjCRuntime.Constants.ObjectiveCLibrary, EntryPoint = "objc_msgSend")]
    internal extern static IntPtr IntPtr_objc_msgSend(IntPtr receiver, IntPtr selector, UISemanticContentAttribute arg1);
    
  2. Wywołaj IntPtr_objc_msgSend funkcję z FinishedLaunching metody przed zwróceniem FinshedLaunching z metody :

    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;
    

Takie podejście jest przydatne w przypadku aplikacji, które zawsze wymagają układu od prawej do lewej i usuwa wymóg ustawienia FlowDirection właściwości.

Aby uzyskać więcej informacji na temat IntrPtr_objc_msgSend metody, zobacz Selektory objective-C w środowisku Xamarin.iOS.

Android

Aplikacje platformy Xamarin.Android mogą być wymuszane, aby zawsze używać układu od prawej do lewej, modyfikując klasę MainActivity w celu uwzględnienia następującego wiersza:

Window.DecorView.LayoutDirection = LayoutDirection.Rtl;

Uwaga

Takie podejście wymaga, aby aplikacja obsługiwała układ od prawej do lewej. Aby uzyskać więcej informacji, zobacz Konfiguracja platformy systemu Android.

Takie podejście jest przydatne w przypadku aplikacji, które zawsze wymagają układu od prawej do lewej i usuwa wymóg ustawiania FlowDirection właściwości dla większości kontrolek. Jednak niektóre kontrolki, takie jak CollectionView, nie szanują LayoutDirection właściwości i nadal wymagają FlowDirection ustawienia właściwości.

Prawa do lewej obsługi języka za pomocą platformy Xamarin.University

Xamarin.Forms 3.0 Wideo pomocy technicznej od prawej do lewej