Aracılığıyla paylaş


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:

Sağdan sola akış yönüyle Arapça TodoItemPage

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

Info.plist desteklenen diller

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 DatePickerolarak 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 truegü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.csvarsayı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 yerine FlowDirection cihaz yerel ayarı tarafından denetlenmektedir.
  • CarouselPage çekme yönü ters çevrilmiyor.
  • Image görsel içerik çevrilmiyor.
  • WebView içerik özelliğine FlowDirection saygı göstermez.
  • TextDirection Metin hizalamasını denetlemek için bir özelliğin eklenmesi gerekir.

iOS

Android

UWP

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:

  1. IntPtr_objc_msgSend işlevini sınıfınızdaki AppDelegate 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);
    
  2. IntPtr_objc_msgSend yönteminden dönmeden FinishedLaunching ö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 CollectionViewbazı 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