Sağdan sola yerelleştirme
Sağdan sola yerelleştirme, uygulamalara sağdan sola akış yönü Xamarin.Forms desteği ekler.
Not
Sağdan sola yerelleştirme, Android'de iOS 9 veya üzeri ve API 17 veya üzerinin kullanılmasını gerektirir.
Akış yönü, sayfadaki kullanıcı arabirimi öğelerinin gözle tarandığı yöndür. Arapça ve İbranice gibi bazı diller, kullanıcı arabirimi öğelerinin sağdan sola akış yönünde düzenlenmiş olmasını gerektirir. Bu, özelliği ayarlanarak VisualElement.FlowDirection
elde edilebilir. Bu özellik, ui öğelerinin düzenlerini denetleyen herhangi bir üst öğe içinde akış yönünü alır veya ayarlar ve numaralandırma değerlerinden FlowDirection
birine ayarlanmalıdır:
FlowDirection
Özelliğin bir öğede olarak RightToLeft
ayarlanması genellikle hizalamayı sağa, okuma sırasını sağdan sola ve denetimin düzenini sağdan sola doğru akacak şekilde ayarlar:
İpucu
Yalnızca ilk düzende FlowDirection
özelliğini ayarlamanız gerekir. Çalışma zamanında bu değerin değiştirilmesi, performansı etkileyecek pahalı bir düzen işlemine neden olur.
Üst öğesi olmayan bir öğenin varsayılan FlowDirection
özellik değeri olurken LeftToRight
, üst öğeye sahip bir öğenin varsayılan FlowDirection
değeri olur MatchParent
. Bu nedenle, bir öğe özellik değerini görsel ağaçtaki üst öğesinden devralır FlowDirection
ve herhangi bir öğe üst öğesinden aldığı değeri geçersiz kılabilir.
İpucu
Bir uygulamayı sağdan sola diller için yerelleştirirken, özelliği bir sayfada veya kök düzende ayarlayın FlowDirection
. Bu, sayfanın veya kök düzenin içindeki tüm öğelerin akış yönüne uygun şekilde yanıt vermesine neden olur.
Cihaz akışı yönüne dikkat etme
Seçilen dile ve bölgeye göre cihazın akış yönüne saygı, açık bir geliştirici seçimidir ve otomatik olarak gerçekleşmez. Bu, bir sayfadaki veya kök düzendeki FlowDirection
özelliği şu değere static
Device.FlowDirection
ayarlayarak elde edilebilir:
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
this.FlowDirection = Device.FlowDirection;
Sayfanın veya kök düzenin tüm alt öğeleri varsayılan olarak değeri devralır Device.FlowDirection
.
Platform kurulumu
Sağdan sola yerel ayarları etkinleştirmek için belirli bir platform kurulumu gereklidir.
iOS
Gerekli sağdan sola yerel ayar, Info.plist dosyasındaki anahtarın dizi öğelerine CFBundleLocalizations
desteklenen bir dil olarak eklenmelidir. Aşağıdaki örnekte, anahtar dizisine Arapça eklendiği gösterilmektedir CFBundleLocalizations
:
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ar</string>
</array>
Daha fazla bilgi için bkz . iOS'ta Yerelleştirme Temelleri.
Bundan sonra, cihaz/simülatördeki dil ve bölge Info.plist içinde belirtilen sağdan sola yerel ayar olarak değiştirilerek sağdan sola yerelleştirme test edilebilir.
Uyarı
iOS'ta dili ve bölgeyi sağdan sola yerel ayara değiştirirken, yerel ayar için gerekli kaynakları dahil etmediğinizde tüm DatePicker
görünümlerin özel durum oluşturacağını lütfen unutmayın. Örneğin, içeren bir uygulamayı Arapça DatePicker
olarak test ederken, iOS Derleme bölmesinin Uluslararasılaştırma bölümünde mideast öğesinin seçildiğinden emin olun.
Android
Uygulamanın AndroidManifest.xml dosyası, düğümün <uses-sdk>
özniteliğini 17 olarak<application>
, android:minSdkVersion
düğüm ise özniteliğini olarak ayarlanacak şekilde android:supportsRtl
true
güncelleştirilmelidir:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<uses-sdk android:minSdkVersion="17" ... />
<application ... android:supportsRtl="true">
</application>
</manifest>
Sağdan sola yerelleştirme daha sonra cihaz/öykünücü sağdan sola dili kullanacak şekilde değiştirilerek veya Ayarlar > Geliştirici Seçenekleri'nde RTL düzeni yönünü zorla etkinleştirilerek test edilebilir.
Evrensel Windows Platformu (UWP)
Gerekli dil kaynakları Package.appxmanifest dosyasının düğümünde <Resources>
belirtilmelidir. Aşağıdaki örnekte, düğüme Arapça eklenmiş olduğu gösterilmektedir <Resources>
:
<Resources>
<Resource Language="x-generate"/>
<Resource Language="en" />
<Resource Language="ar" />
</Resources>
Ayrıca UWP, uygulamanın varsayılan kültürünün .NET Standard kitaplığında açıkça tanımlanmasını gerektirir. Bu, içindeki veya başka bir sınıftaki özniteliği AssemblyInfo.cs
varsayılan kültüre ayarlayarak NeutralResourcesLanguage
gerçekleştirilebilir:
using System.Resources;
[assembly: NeutralResourcesLanguage("en")]
Bundan sonra sağdan sola yerelleştirme, cihazdaki dil ve bölge uygun sağdan sola yerel ayara değiştirilerek test edilebilir.
Sınırlamalar
Xamarin.Forms sağdan sola yerelleştirmenin şu anda bir dizi sınırlaması vardır:
NavigationPage
düğme konumu, araç çubuğu öğesi konumu ve geçiş animasyonu özelliği yerineFlowDirection
cihaz yerel ayarı tarafından denetlenmektedir.CarouselPage
çekme yönü ters çevrilmiyor.Image
görsel içerik çevrilmiyor.WebView
içerik özelliğineFlowDirection
saygı göstermez.TextDirection
Metin hizalamasını denetlemek için bir özelliğin eklenmesi gerekir.
iOS
Stepper
yönlendirme özelliği yerine cihaz yerel ayarı tarafından denetlenmektedirFlowDirection
.EntryCell
metin hizalama özelliği yerine cihaz yerel ayarı tarafından denetlenmektedirFlowDirection
.ContextActions
hareketler ve hizalama tersine çevrilmiyor.
Android
SearchBar
yönlendirme özelliği yerine cihaz yerel ayarı tarafından denetlenmektedirFlowDirection
.ContextActions
yerleştirme özelliği yerine cihaz yerel ayarı tarafından denetlenmektedirFlowDirection
.
UWP
Editor
metin hizalama özelliği yerine cihaz yerel ayarı tarafından denetlenmektedirFlowDirection
.FlowDirection
özelliği alt öğeler tarafındanFlyoutPage
devralınmıyor.ContextActions
metin hizalama özelliği yerine cihaz yerel ayarı tarafından denetlenmektedirFlowDirection
.
Sağdan sola düzeni zorlama
Xamarin.iOS ve Xamarin.Android uygulamaları, ilgili platform projelerini değiştirerek cihaz ayarlarından bağımsız olarak her zaman sağdan sola düzen kullanmaya zorlanabilir.
iOS
Xamarin.iOS uygulamaları, AppDelegate sınıfını aşağıdaki gibi değiştirerek her zaman sağdan sola düzen kullanmaya zorlanabilir:
IntPtr_objc_msgSend
işlevini sınıfınızdakiAppDelegate
ilk satır olarak bildirin:[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
yönteminden dönmedenFinishedLaunching
önce yönteminin işlevini çağırınFinshedLaunching
: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;
Bu yaklaşım, her zaman sağdan sola düzen gerektiren ve özelliği ayarlama FlowDirection
gereksinimini kaldıran uygulamalar için kullanışlıdır.
yöntemi hakkında IntrPtr_objc_msgSend
daha fazla bilgi için bkz . Xamarin.iOS'ta Objective-C seçicileri.
Android
Xamarin.Android uygulamaları MainActivity sınıfı aşağıdaki satırı içerecek şekilde değiştirilerek her zaman sağdan sola düzen kullanmaya zorlanabilir:
Window.DecorView.LayoutDirection = LayoutDirection.Rtl;
Not
Bu yaklaşım, uygulamanın sağdan sola düzeni destekleyecek şekilde ayarlanmasını gerektirir. Daha fazla bilgi için bkz . Android platformu kurulumu.
Bu yaklaşım, her zaman sağdan sola düzen gerektiren ve çoğu denetim için özelliğini ayarlama gereksinimini FlowDirection
kaldıran uygulamalar için kullanışlıdır. Ancak, gibi CollectionView
bazı denetimler özelliğine LayoutDirection
saygı duymaz ve yine de özelliğin FlowDirection
ayarlanmasını gerektirir.
Xamarin.University ile sağdan sola dil desteği
Xamarin.Forms 3.0 Sağdan Sola Destek videosu