Bagikan melalui


Pelokalan kanan-ke-kiri

Pelokalan kanan-ke-kiri menambahkan dukungan untuk arah alur kanan-ke-kiri ke Xamarin.Forms aplikasi.

Catatan

Pelokalan kanan-ke-kiri memerlukan penggunaan iOS 9 atau lebih tinggi, dan API 17 atau yang lebih tinggi di Android.

Arah alur adalah arah di mana elemen UI pada halaman dipindai oleh mata. Beberapa bahasa, seperti Arab dan Ibrani, mengharuskan elemen UI ditata dalam arah aliran kanan-ke-kiri. Ini dapat dicapai dengan mengatur VisualElement.FlowDirection properti. Properti ini mendapatkan atau mengatur arah di mana elemen UI mengalir dalam elemen induk apa pun yang mengontrol tata letaknya, dan harus diatur ke salah FlowDirection satu nilai enumerasi:

FlowDirection Mengatur properti ke RightToLeft pada elemen umumnya mengatur perataan ke kanan, urutan baca ke kanan-ke-kiri, dan tata letak kontrol untuk mengalir dari kanan-ke-kiri:

TodoItemPage dalam bahasa Arab dengan arah alur kanan-ke-kiri

Tip

Anda seharusnya hanya mengatur FlowDirection properti pada tata letak awal. Mengubah nilai ini saat runtime menyebabkan proses tata letak mahal yang akan memengaruhi performa.

Nilai properti default FlowDirection untuk elemen tanpa induk adalah LeftToRight, sedangkan default FlowDirection untuk elemen dengan induk adalah MatchParent. Oleh karena itu, elemen mewarisi FlowDirection nilai properti dari induknya di pohon visual, dan elemen apa pun dapat mengambil alih nilai yang diperoleh dari induknya.

Tip

Saat melokalisasi aplikasi untuk bahasa kanan-ke-kiri, atur FlowDirection properti pada halaman atau tata letak akar. Ini menyebabkan semua elemen yang terkandung dalam halaman, atau tata letak akar, merespons dengan tepat ke arah alur.

Menghormati arah aliran perangkat

Menghormati arah alur perangkat berdasarkan bahasa dan wilayah yang dipilih adalah pilihan pengembang eksplisit dan tidak terjadi secara otomatis. Ini dapat dicapai dengan mengatur FlowDirection properti pada halaman, atau tata letak akar, ke staticDevice.FlowDirection nilai:

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

Semua elemen turunan halaman, atau tata letak akar, secara default akan mewarisi Device.FlowDirection nilai.

Penyetelan platform

Penyiapan platform tertentu diperlukan untuk mengaktifkan lokal kanan-ke-kiri.

iOS

Lokal kanan-ke-kiri yang diperlukan harus ditambahkan sebagai bahasa yang didukung ke item array untuk CFBundleLocalizations kunci di Info.plist. Contoh berikut menunjukkan bahasa Arab yang telah ditambahkan ke array untuk CFBundleLocalizations kunci:

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

Bahasa yang didukung Info.plist

Untuk informasi selengkapnya, lihat Dasar-Dasar Pelokalan di iOS.

Pelokalan kanan-ke-kiri kemudian dapat diuji dengan mengubah bahasa dan wilayah pada perangkat/simulator ke lokal kanan-ke-kiri yang ditentukan dalam Info.plist.

Peringatan

Harap dicatat bahwa saat mengubah bahasa dan wilayah ke lokal kanan-ke-kiri di iOS, tampilan apa pun DatePicker akan memberikan pengecualian jika Anda tidak menyertakan sumber daya yang diperlukan untuk lokal. Misalnya, saat menguji aplikasi dalam bahasa Arab yang memiliki DatePicker, pastikan bahwa mideast dipilih di bagian Internasionalisasi panel Build iOS.

Android

File AndroidManifest.xml aplikasi harus diperbarui sehingga <uses-sdk> simpul mengatur android:minSdkVersion atribut ke 17, dan simpul <application> mengatur android:supportsRtl atribut ke true:

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

Pelokalan kanan-ke-kiri kemudian dapat diuji dengan mengubah perangkat/emulator untuk menggunakan bahasa kanan-ke-kiri, atau dengan mengaktifkan arah tata letak Force RTL di Pengaturan > Opsi Pengembang.

Universal Windows Platform (UWP)

Sumber daya bahasa yang diperlukan harus ditentukan dalam simpul <Resources>file Package.appxmanifest . Contoh berikut menunjukkan bahasa Arab yang telah ditambahkan ke simpul <Resources> :

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

Selain itu, UWP mengharuskan budaya default aplikasi didefinisikan secara eksplisit dalam pustaka .NET Standard. Ini dapat dicapai dengan mengatur NeutralResourcesLanguage atribut di AssemblyInfo.cs, atau di kelas lain, ke budaya default:

using System.Resources;

[assembly: NeutralResourcesLanguage("en")]

Pelokalan kanan-ke-kiri kemudian dapat diuji dengan mengubah bahasa dan wilayah pada perangkat ke lokal kanan-ke-kiri yang sesuai.

Batasan

Xamarin.Forms Pelokalan kanan-ke-kiri saat ini memiliki sejumlah batasan:

  • NavigationPage lokasi tombol, lokasi item toolbar, dan animasi transisi dikontrol oleh lokal perangkat, bukan FlowDirection properti .
  • CarouselPage arah gesek tidak membalik.
  • Image konten visual tidak membalik.
  • WebView konten tidak menghormati FlowDirection properti .
  • Properti TextDirection perlu ditambahkan, untuk mengontrol perataan teks.

iOS

Android

UWP

Paksa tata letak kanan-ke-kiri

Aplikasi Xamarin.iOS dan Xamarin.Android dapat dipaksa untuk selalu menggunakan tata letak kanan-ke-kiri, terlepas dari pengaturan perangkat, dengan memodifikasi proyek platform masing-masing.

iOS

Aplikasi Xamarin.iOS dapat dipaksa untuk selalu menggunakan tata letak kanan-ke-kiri dengan memodifikasi kelas AppDelegate sebagai berikut:

  1. Deklarasikan IntPtr_objc_msgSend fungsi sebagai baris pertama di kelas Anda 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 Panggil fungsi dari FinishedLaunching metode , sebelum kembali dari FinshedLaunching metode :

    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;
    

Pendekatan ini berguna untuk aplikasi yang selalu memerlukan tata letak kanan-ke-kiri, dan menghapus persyaratan untuk mengatur FlowDirection properti.

Untuk informasi selengkapnya tentang metode ini IntrPtr_objc_msgSend , lihat Pemilih Objective-C di Xamarin.iOS.

Android

Aplikasi Xamarin.Android dapat dipaksa untuk selalu menggunakan tata letak kanan-ke-kiri dengan memodifikasi kelas MainActivity untuk menyertakan baris berikut:

Window.DecorView.LayoutDirection = LayoutDirection.Rtl;

Catatan

Pendekatan ini mengharuskan aplikasi disiapkan untuk mendukung tata letak kanan-ke-kiri. Untuk informasi selengkapnya, lihat Penyiapan platform Android.

Pendekatan ini berguna untuk aplikasi yang selalu memerlukan tata letak kanan-ke-kiri, dan menghapus persyaratan untuk mengatur FlowDirection properti untuk sebagian besar kontrol. Namun, beberapa kontrol, seperti CollectionView, tidak menghormati LayoutDirection properti dan masih mengharuskan FlowDirection properti diatur.

Dukungan bahasa kanan ke kiri dengan Xamarin.University

Xamarin.Forms Video Dukungan Kanan-ke-Kiri 3.0