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:
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>
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.cs
nebo 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í, nikoliFlowDirection
vlastností.CarouselPage
směr potažení prstem se nepřeklopí.Image
vizuální obsah se nepřeklopí.WebView
obsah nerespektujeFlowDirection
vlastnost.- Aby
TextDirection
bylo možné řídit zarovnání textu, je potřeba přidat vlastnost.
iOS
Stepper
orientaci řídí národní prostředí zařízení, nikoliFlowDirection
vlastnost.EntryCell
Zarovnání textu je řízeno národním prostředím zařízení, nikoliFlowDirection
vlastností.ContextActions
gesta a zarovnání nejsou obráceny.
Android
SearchBar
orientaci řídí národní prostředí zařízení, nikoliFlowDirection
vlastnost.ContextActions
umístění je řízeno národním prostředím zařízení, nikoliFlowDirection
vlastností.
UWP
Editor
Zarovnání textu je řízeno národním prostředím zařízení, nikoliFlowDirection
vlastností.FlowDirection
vlastnost není zděděna podřízenými položkamiFlyoutPage
.ContextActions
Zarovnání textu je řízeno národním prostředím zařízení, nikoliFlowDirection
vlastností.
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:
Deklarujte
IntPtr_objc_msgSend
funkci jako první řádek třídyAppDelegate
:[System.Runtime.InteropServices.DllImport(ObjCRuntime.Constants.ObjectiveCLibrary, EntryPoint = "objc_msgSend")] internal extern static IntPtr IntPtr_objc_msgSend(IntPtr receiver, IntPtr selector, UISemanticContentAttribute arg1);
IntPtr_objc_msgSend
Před návratemFinishedLaunching
zFinshedLaunching
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