Sdílet prostřednictvím


Lokalizace zprava doleva

Lokalizace zprava doleva přidává podporu směru toku zprava doleva do Xamarin.Forms aplikací.

Poznámka:

Lokalizace zprava doleva vyžaduje použití iOS 9 nebo vyšší a rozhraní API 17 nebo vyšší v Androidu.

Směr toku je směr, ve kterém jsou prvky uživatelského rozhraní na stránce naskenovány okem. Některé jazyky, jako je arabština a hebrejština, vyžadují, aby prvky uživatelského rozhraní byly rozloženy ve směru toku zprava doleva. Toho lze dosáhnout nastavením VisualElement.FlowDirection vlastnosti. Tato vlastnost získá nebo nastaví směr, ve kterém prvky uživatelského rozhraní proudí v rámci jakéhokoli nadřazeného prvku, který řídí jejich rozložení, a měl by být nastaven na jednu z hodnot výčtu FlowDirection :

FlowDirection Nastavení vlastnosti RightToLeft na prvek obecně nastaví zarovnání doprava, pořadí čtení doleva a rozložení ovládacího prvku pro tok zprava doleva:

TodoItemPage v arabštině se směrem toku zprava doleva

Tip

Vlastnost byste měli nastavit pouze při počátečním FlowDirection rozložení. Změna této hodnoty za běhu způsobí nákladný proces rozložení, který ovlivní výkon.

Výchozí FlowDirection hodnota vlastnosti prvku bez nadřazeného objektu je LeftToRight, zatímco výchozí FlowDirection hodnota prvku s nadřazeným prvkem je MatchParent. Proto prvek dědí FlowDirection hodnotu vlastnosti z nadřazeného objektu ve vizuálním stromu a jakýkoli prvek může přepsat hodnotu, kterou získá z nadřazeného objektu.

Tip

Při lokalizaci aplikace pro jazyky se zprava doleva nastavte FlowDirection vlastnost na stránce nebo kořenovém rozložení. To způsobí, že všechny prvky obsažené na stránce nebo kořenovém rozložení odpovídajícím způsobem reagují na směr toku.

Dodržování směru toku zařízení

Dodržování směru toku zařízení na základě vybraného jazyka a oblasti je explicitní volba vývojáře, která se neděje automaticky. Toho lze dosáhnout nastavením FlowDirection vlastnosti na stránce nebo kořenovém rozložení na static Device.FlowDirection hodnotu:

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

Všechny podřízené prvky stránky nebo kořenového rozložení ve výchozím nastavení zdědí Device.FlowDirection hodnotu.

Nastavení platformy

K povolení národního prostředí se zprava doleva vyžaduje konkrétní nastavení platformy.

iOS

Požadované národní prostředí zprava doleva by mělo být přidáno jako podporovaný jazyk do položek pole pro CFBundleLocalizations klíč v souboru Info.plist. Následující příklad ukazuje přidání arabštiny do pole klíče CFBundleLocalizations :

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

Podporované jazyky info.plist

Další informace naleznete v tématu Základy lokalizace v iOSu.

Lokalizace zprava doleva je pak možné otestovat změnou jazyka a oblasti v zařízení nebo simulátoru na národní prostředí se zápisem zprava doleva, které bylo zadáno v souboru Info.plist.

Upozorňující

Upozorňujeme, že při změně jazyka a oblasti na národní prostředí se zápisem zprava doleva v iOSu dojde DatePicker k výjimce, pokud nezahrnete prostředky požadované pro národní prostředí. Například při testování aplikace v arabštině, která má DatePicker, ujistěte se, že mideast je vybrán v části Internationalization v podokně sestavení iOS.

Android

Soubor AndroidManifest.xml aplikace by se měl aktualizovat tak, aby <uses-sdk> uzel nastavil android:minSdkVersion atribut na hodnotu 17 a <application> uzel nastaví android:supportsRtl atribut na true:

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

Lokalizace zprava doleva se pak dá otestovat změnou zařízení nebo emulátoru tak, aby používalo jazyk se zápisem zprava doleva, nebo povolením směru vynucení rozložení RTL v Možnostech pro vývojáře nastavení>.

Univerzální platforma Windows (UPW)

Požadované prostředky jazyka by měly být zadány v <Resources> uzlu souboru Package.appxmanifest . Následující příklad ukazuje přidání arabštiny do <Resources> uzlu:

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

UpW navíc vyžaduje, aby výchozí jazyková verze aplikace byla explicitně definována v knihovně .NET Standard. Toho lze dosáhnout nastavením atributu NeutralResourcesLanguage v AssemblyInfo.csnebo v jiné třídě na výchozí jazykovou verzi:

using System.Resources;

[assembly: NeutralResourcesLanguage("en")]

Lokalizace zprava doleva se pak dá otestovat změnou jazyka a oblasti v zařízení na odpovídající národní prostředí se zápisem zprava doleva.

Omezení

Xamarin.Forms Lokalizace zprava doleva má v současné době řadu omezení:

  • NavigationPage umístění tlačítka, umístění položky panelu nástrojů a přechodová animace se řídí národním prostředím zařízení, nikoli FlowDirection vlastností.
  • CarouselPage směr potažení prstem se nepřeklopí.
  • Image vizuální obsah se nepřeklopí.
  • WebView obsah nerespektuje FlowDirection vlastnost.
  • Aby TextDirection bylo možné řídit zarovnání textu, je potřeba přidat vlastnost.

iOS

Android

UWP

Vynucení rozložení zprava doleva

Aplikace Xamarin.iOS a Xamarin.Android mohou být nuceny vždy používat rozložení se zprava doleva bez ohledu na nastavení zařízení úpravou příslušných projektů platformy.

iOS

Aplikace Xamarin.iOS mohou být nuceny vždy používat rozložení zprava doleva úpravou třídy AppDelegate následujícím způsobem:

  1. Deklarujte IntPtr_objc_msgSend funkci jako první řádek třídy AppDelegate :

    [System.Runtime.InteropServices.DllImport(ObjCRuntime.Constants.ObjectiveCLibrary, EntryPoint = "objc_msgSend")]
    internal extern static IntPtr IntPtr_objc_msgSend(IntPtr receiver, IntPtr selector, UISemanticContentAttribute arg1);
    
  2. IntPtr_objc_msgSend Před návratem FinishedLaunching z FinshedLaunching metody volejte funkci 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;
    

Tento přístup je užitečný pro aplikace, které vždy vyžadují rozložení zprava doleva a odebere požadavek na nastavení FlowDirection vlastnosti.

Další informace o IntrPtr_objc_msgSend metodě naleznete v tématu Selektory Objective-C v Xamarin.iOS.

Android

Aplikace Xamarin.Android mohou být nuceny vždy používat rozložení zprava doleva úpravou třídy MainActivity tak, aby zahrnovaly následující řádek:

Window.DecorView.LayoutDirection = LayoutDirection.Rtl;

Poznámka:

Tento přístup vyžaduje, aby aplikace podporovala rozložení zprava doleva. Další informace najdete v tématu Nastavení platformy Android.

Tento přístup je užitečný pro aplikace, které vždy vyžadují rozložení zprava doleva a odebere požadavek nastavit FlowDirection vlastnost pro většinu ovládacích prvků. Některé ovládací prvky, například CollectionView, nerespektují LayoutDirection vlastnost a přesto vyžadují FlowDirection , aby byla vlastnost nastavena.

Podpora jazyků zprava doleva pomocí Xamarin.University

Xamarin.Forms 3.0 Video podpory zprava doleva