Bagikan melalui


Pelokalan

Telusuri sampel. Telusuri sampel

Pelokalan adalah proses mengadaptasi aplikasi untuk memenuhi persyaratan bahasa atau budaya tertentu dari target pasar. Untuk melokalisasi aplikasi, teks dan gambarnya mungkin perlu diterjemahkan ke dalam beberapa bahasa. Aplikasi yang dilokalkan secara otomatis menampilkan teks yang diterjemahkan berdasarkan pengaturan budaya perangkat.

.NET menyertakan mekanisme untuk melokalisasi aplikasi menggunakan file sumber daya. File sumber daya menyimpan teks dan konten lain sebagai pasangan nama/nilai yang memungkinkan aplikasi mengambil konten untuk kunci yang disediakan. File sumber daya memungkinkan konten yang dilokalkan dipisahkan dari kode aplikasi. Selain menyimpan teks, file sumber daya juga dapat menyimpan gambar dan data biner. Namun, perangkat memiliki berbagai ukuran dan kepadatan layar dan setiap platform memiliki fungsionalitas untuk menampilkan gambar yang bergantung pada kepadatan. Oleh karena itu, fungsionalitas platform harus digunakan untuk melokalisasi gambar alih-alih menyimpannya dalam file sumber daya.

Untuk melokalisasi aplikasi .NET Multi-platform App UI (.NET MAUI), Anda harus:

  1. Buat file sumber daya untuk menyimpan string. Untuk informasi selengkapnya, lihat Membuat file sumber daya untuk menyimpan string.
  2. Tentukan bahasa netral aplikasi. Untuk informasi selengkapnya, lihat Menentukan bahasa netral aplikasi.
  3. Lakukan penyiapan platform. Untuk informasi selengkapnya, lihat Melakukan penyiapan platform.
  4. Melokalkan teks. Untuk informasi selengkapnya, lihat Melokalkan teks.
  5. Melokalisasi gambar. Untuk informasi selengkapnya, lihat Melokalisasi gambar.
  6. Melokalisasi nama aplikasi. Untuk informasi selengkapnya, lihat Melokalisasi nama aplikasi.
  7. Uji pelokalan. Untuk informasi selengkapnya, lihat Menguji pelokalan.

Selain itu, arah tata letak aplikasi dapat ditentukan. Untuk informasi selengkapnya, lihat Pelokalan kanan ke kiri.

Membuat file sumber daya untuk menyimpan string

File sumber daya .NET adalah file XML dengan ekstensi .resx yang dikompilasi ke dalam file sumber daya biner (.resources) selama proses build. Aplikasi yang dilokalkan biasanya berisi file sumber daya default dengan semua string yang digunakan dalam aplikasi, dan file sumber daya untuk setiap bahasa yang didukung.

File sumber daya berisi informasi berikut untuk setiap item:

  • Nama menentukan kunci yang digunakan untuk mengakses teks dalam kode.
  • Nilai menentukan teks yang diterjemahkan.
  • Komentar adalah bidang opsional yang berisi informasi tambahan.

File sumber daya dapat ditambahkan dengan dialog Tambahkan Item Baru di Visual Studio:

Cuplikan layar menambahkan file sumber daya di Visual Studio.

Setelah file ditambahkan, baris dapat ditambahkan untuk setiap sumber daya teks:

Cuplikan layar string default untuk aplikasi.

Menu drop-down Pengubah Akses menentukan bagaimana Visual Studio menghasilkan kelas yang digunakan untuk mengakses sumber daya. Mengatur Pengubah Akses ke Publik atau Internal menghasilkan kelas yang dihasilkan dengan tingkat aksesibilitas yang ditentukan. Mengatur Pengubah Akses ke Tidak ada pembuatan kode tidak menghasilkan file kelas. File sumber daya default harus dikonfigurasi untuk menghasilkan file kelas, yang menghasilkan file dengan . Designer.cs ekstensi yang ditambahkan ke proyek.

Setelah file sumber daya default dibuat, file tambahan dapat dibuat untuk setiap lokal yang didukung aplikasi. Setiap file sumber daya tambahan harus memiliki nama file akar yang sama dengan file sumber daya default, tetapi juga harus menyertakan bahasa dan budaya opsional dalam nama file. Misalnya, jika Anda menambahkan file sumber daya bernama AppResources.resx, Anda juga dapat membuat file sumber daya bernama AppResources.en-US.resx dan AppResources.fr-FR.resx untuk menyimpan sumber daya yang dilokalkan untuk budaya Inggris (Amerika Serikat) dan Prancis (Prancis). Selain itu, Anda harus mengatur Pengubah Akses untuk setiap file sumber daya tambahan ke Tidak ada pembuatan kode.

Pada runtime, aplikasi Anda mencoba menyelesaikan permintaan sumber daya dalam urutan kekhususan. Misalnya, jika budaya perangkat adalah en-US , aplikasi mencari file sumber daya dalam urutan ini:

  1. AppResources.en-US.resx
  2. AppResources.en.resx
  3. AppResources.resx (default)

Cuplikan layar berikut menunjukkan file terjemahan Spanyol bernama AppResources.es.resx:

Cuplikan layar string Spanyol untuk aplikasi.

File sumber daya yang dilokalkan menggunakan nilai Nama yang sama yang ditentukan dalam file default tetapi berisi string bahasa Spanyol di kolom Nilai. Selain itu, Pengubah Akses diatur ke Tidak ada pembuatan kode.

Tentukan bahasa netral aplikasi

Agar file sumber daya .NET berfungsi dengan benar, aplikasi harus memiliki bahasa netral yang ditentukan. Ini adalah bahasa yang sumber dayanya digunakan jika sumber daya untuk lokal tidak dapat ditemukan. Untuk menentukan bahasa netral:

  1. Di Penjelajah Solusi, klik kanan proyek aplikasi .NET MAUI Anda dan pilih Properti.

  2. Pilih halaman Properti umum paket > dan pilih bahasa dan budaya yang sesuai dari menu drop-down Bahasa netral Assembly:

    Cuplikan layar pengaturan bahasa netral untuk assembly.

  3. Simpan perubahan Anda.

Atau, tambahkan <NeutralLanguage> elemen ke yang pertama <PropertyGroup> dalam file proyek Anda, dan tentukan lokal yang Anda pilih sebagai nilainya:

<NeutralLanguage>en-US</NeutralLanguage>

Peringatan

Jika Anda tidak menentukan bahasa netral, ResourceManager kelas mengembalikan null nilai untuk bahasa apa pun tanpa file sumber daya. Ketika bahasa netral ditentukan, ResourceManager kelas mengembalikan hasil dari file sumber daya bahasa netral untuk bahasa yang tidak didukung. Oleh karena itu, disarankan agar Anda selalu menentukan bahasa netral sehingga teks ditampilkan untuk bahasa yang tidak didukung.

Melakukan penyiapan platform

Pengaturan tambahan diperlukan pada iOS, Mac Catalyst, dan Windows, sehingga semua kontrol .NET MAUI dilokalkan.

iOS dan Mac Catalyst

Di iOS dan Mac Catalyst, Anda harus mendeklarasikan semua bahasa yang didukung dalam file Info.plist platform di proyek aplikasi .NET MAUI Anda. Untuk melakukan ini, buka file Info.plist untuk platform yang Anda pilih di editor XML dan buat array untuk kunci.CFBundleLocalizations Kemudian berikan nilai array yang sesuai dengan file sumber daya. Selain itu, pastikan Anda mengatur bahasa yang diharapkan melalui CFBundleDevelopmentRegion kunci:

<key>CFBundleLocalizations</key>
<array>
    <string>de</string>
    <string>es</string>
    <string>fr</string>
    <string>ja</string>
    <string>pt</string> <!-- Brazil -->
    <string>pt-PT</string> <!-- Portugal -->
    <string>ru</string>
    <string>zh-Hans</string>
    <string>zh-Hant</string>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>

Atau, di Penjelajah Solusi di Visual Studio, buka file Info.plist untuk platform yang Anda pilih di Editor PList Generik. Kemudian, buat array untuk CFBundleLocalizations kunci dan berikan nilai array yang sesuai dengan file sumber daya. Selain itu, pastikan Anda mengatur bahasa yang diharapkan melalui CFBundleDevelopmentRegion kunci:

Cuplikan layar lokal yang didukung untuk aplikasi di editor Info.plist generik.

Untuk informasi selengkapnya tentang file Info.plist , lihat Daftar properti informasi.

Windows

Untuk mendukung beberapa bahasa dalam aplikasi .NET MAUI di Windows, Anda harus mendeklarasikan setiap bahasa yang didukung dalam file Platforms\Windows\Package.appxmanifest proyek aplikasi .NET MAUI Anda:

  1. Buka file Package.appxmanifest di editor teks dan temukan bagian berikut:

    <Resources>
        <Resource Language="x-generate"/>
    </Resources>
    
  2. Ganti <Resource Language="x-generate"> dengan <Resource /> elemen untuk setiap bahasa yang didukung:

    <Resources>
        <Resource Language="en-US"/>
        <Resource Language="de-DE"/>
        <Resource Language="es-ES"/>
        <Resource Language="fr-FR"/>
        <Resource Language="ja-JP"/>
        <Resource Language="pt-BR"/>
        <Resource Language="pt-PT"/>
        <Resource Language="ru-RU"/>
        <Resource Language="zh-CN"/>
        <Resource Language="zh-TW"/>
    </Resources>
    
  3. Simpan perubahan Anda.

Melokalkan teks

Teks dilokalkan menggunakan kelas yang dihasilkan dari file sumber daya default Anda. Kelas diberi nama berdasarkan nama file sumber daya default. Mengingat nama file sumber daya default AppResources.resx, Visual Studio menghasilkan kelas yang cocok bernama AppResources yang berisi properti statis untuk setiap entri dalam file sumber daya.

Di XAML, teks yang dilokalkan dapat diambil dengan menggunakan x:Static ekstensi markup untuk mengakses properti statis yang dihasilkan:

<ContentPage ...
             xmlns:strings="clr-namespace:LocalizationDemo.Resources.Strings">
    <VerticalStackLayout>
        <Label Text="{x:Static strings:AppResources.NotesLabel}" />
        <Entry Placeholder="{x:Static strings:AppResources.NotesPlaceholder}" />
        <Button Text="{x:Static strings:AppResources.AddButton}" />
    </VerticalStackLayout>
</ContentPage>

Untuk informasi selengkapnya tentang x:Static ekstensi markup, lihat ekstensi markup x:Static.

Teks yang dilokalkan juga dapat diambil dalam kode:

Label notesLabel = new Label();
notesLabel.Text = AppResources.NotesLabel,

Entry notesEntry = new Entry();
notesEntry.Placeholder = AppResources.NotesPlaceholder,

Button addButton = new Button();
addButton.Text = AppResources.AddButton,

Properti di AppResources kelas menggunakan CurrentUICulture nilai properti untuk menentukan file sumber daya mana yang akan diambil nilainya.

Melokalisasi gambar

Selain menyimpan teks, file sumber daya juga dapat menyimpan gambar dan data biner. Namun, perangkat memiliki berbagai ukuran dan kepadatan layar dan setiap platform memiliki fungsionalitas untuk menampilkan gambar yang bergantung pada kepadatan. Oleh karena itu, fungsionalitas platform harus digunakan untuk melokalisasi gambar alih-alih menyimpannya dalam file sumber daya.

Android

Di Android, gambar yang dilokalkan, yang dikenal sebagai drawable, disimpan menggunakan konvensi penamaan berbasis folder di folder Platforms\Android\Resources . Folder harus diberi nama drawable dengan akhiran untuk bahasa dan budaya. Misalnya, folder bahasa Spanyol diberi nama drawable-es. Nama folder yang dapat digambar harus berisi gambar untuk bahasa dan budaya default Anda. Tindakan build setiap gambar harus diatur ke AndroidResource.

Catatan

Daripada mengatur file individual ke tindakan build AndroidResource , konten folder tertentu dapat diatur ke tindakan build ini dengan menambahkan XML berikut ke file proyek aplikasi Anda (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
  <AndroidResource Include="Platforms\Android\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Contoh ini mengatur konten apa pun di folder Platforms\Android\Resources , termasuk konten di sub-folder, ke tindakan build AndroidResource . Ini juga mengatur jalur output untuk setiap file dengan tindakan build ini.

Hanya dua karakter yang diperlukan dalam nama folder saat menentukan bahasa tingkat atas, seperti es. Namun, saat menentukan lokal lengkap, format nama folder memerlukan tanda hubung dan huruf kecil r untuk memisahkan bahasa dari budaya. Misalnya, folder lokal Meksiko (es-MX) harus diberi nama drawable-es-rMX. Nama file gambar di setiap folder lokal harus identik:

Cuplikan layar struktur folder yang dilokalkan di Visual Studio untuk gambar di Android.

iOS

Di iOS, gambar yang dilokalkan disimpan menggunakan konvensi penamaan berbasis folder di folder Platforms\iOS\Resources . Folder harus diberi nama dengan bahasa, dan budaya opsional, diikuti oleh .lproj. Misalnya, folder bahasa Spanyol diberi nama es.lproj. Tindakan build setiap gambar harus diatur ke BundleResource.

Catatan

Daripada mengatur file individual ke tindakan build BundleResource , konten folder tertentu dapat diatur ke tindakan build ini dengan menambahkan XML berikut ke file proyek aplikasi Anda (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
  <BundleResource Include="Platforms\iOS\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Contoh ini mengatur konten apa pun di folder Platforms\iOS\Resources , termasuk konten di sub-folder, ke tindakan build BundleResource . Ini juga mengatur jalur output untuk setiap file dengan tindakan build ini.

Hanya dua karakter yang diperlukan dalam nama folder saat menentukan bahasa tingkat atas, seperti es. Namun, saat menentukan lokal lengkap, format nama folder memerlukan tanda hubung untuk memisahkan bahasa dari budaya. Misalnya, folder lokal Meksiko (es-MX) harus diberi nama es-MX.lproj. Nama file gambar di setiap folder lokal harus identik:

Cuplikan layar struktur folder yang dilokalkan di Visual Studio untuk gambar di iOS.

Jika gambar tidak ada untuk bahasa tertentu, iOS akan kembali ke folder bahasa asli default dan memuat gambar dari sana.

Mac Catalyst

Di Mac Catalyst, gambar yang dilokalkan disimpan menggunakan konvensi penamaan berbasis folder di folder Platforms\MacCatalyst\Resources . Folder harus diberi nama dengan bahasa, dan budaya opsional, diikuti oleh .lproj. Misalnya, folder bahasa Spanyol diberi nama es.lproj. Tindakan build setiap gambar harus diatur ke BundleResource.

Catatan

Daripada mengatur file individual ke tindakan build BundleResource , konten folder tertentu dapat diatur ke tindakan build ini dengan menambahkan XML berikut ke file proyek aplikasi Anda (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
  <BundleResource Include="Platforms\MacCatalyst\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Contoh ini mengatur konten apa pun di folder Platforms\MacCatalyst\Resources , termasuk konten di sub-folder, ke tindakan build BundleResource . Ini juga mengatur jalur output untuk setiap file dengan tindakan build ini.

Hanya dua karakter yang diperlukan dalam nama folder saat menentukan bahasa tingkat atas, seperti es. Namun, saat menentukan lokal lengkap, format nama folder memerlukan tanda hubung untuk memisahkan bahasa dari budaya. Misalnya, folder lokal Meksiko (es-MX) harus diberi nama es-MX.lproj. Nama file gambar di setiap folder lokal harus identik:

Cuplikan layar struktur folder yang dilokalkan di Visual Studio untuk gambar di MacCatalyst.

Jika gambar tidak ada untuk bahasa tertentu, Mac Catalyst akan kembali ke folder bahasa asli default dan memuat gambar dari sana.

Windows

Di Windows, gambar yang dilokalkan disimpan menggunakan konvensi penamaan berbasis folder di folder Platforms\Windows\Assets\Images . Folder harus diberi nama dengan bahasa, dan budaya opsional. Misalnya, folder bahasa Spanyol bernama es dan folder lokal Meksiko harus diberi nama es-MX. Tindakan build setiap gambar harus diatur ke Konten.

Catatan

Daripada mengatur file individual ke tindakan Build konten, konten folder tertentu dapat diatur ke tindakan build ini dengan menambahkan XML berikut ke file proyek aplikasi Anda (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-windows'))">
  <Content Include="Platforms\Windows\Assets\Images\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Contoh ini mengatur konten apa pun di folder Platforms\Windows\Assets\Images , termasuk konten di sub-folder, ke tindakan Build konten . Ini juga mengatur jalur output untuk setiap file dengan tindakan build ini.

Hanya dua karakter yang diperlukan dalam nama folder saat menentukan bahasa tingkat atas, seperti es. Namun, saat menentukan lokal lengkap, format nama folder memerlukan tanda hubung untuk memisahkan bahasa dari budaya. Misalnya, folder lokal Meksiko (es-MX) harus diberi nama es-MX. Nama file gambar di setiap folder lokal harus identik:

Cuplikan layar struktur folder yang dilokalkan di Visual Studio untuk gambar di Windows.

Mengonsumsi gambar yang dilokalkan

Di Android, iOS, Mac Catalyst, dan Windows, gambar yang dilokalkan dapat digunakan dengan mengatur Source properti Image ke nama file gambar:

<Image Source="flag.png" />

Namun, agar ini berfungsi di Windows, Anda perlu memodifikasi file proyek aplikasi jika Anda telah menambahkan <Content /> item MSBuild untuk setiap gambar yang dilokalkan. Ini dapat dicapai dengan memodifikasi file .csproj Anda untuk menghapus <Content /> item MSBuild untuk setiap gambar. Kemudian, tambahkan item MSBuild berikut:

<ItemGroup Condition="$(TargetFramework.Contains('-windows'))">
  <Content Include="Platforms\Windows\Assets\Images\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Ini memastikan bahwa semua gambar di subfolder folder Platforms\Windows\Assets\Images disalin ke akar paket aplikasi Anda.

Melokalisasi nama aplikasi

Fungsionalitas platform diperlukan untuk melokalisasi nama aplikasi.

Android

Di Android, nama aplikasi yang dilokalkan dapat disimpan menggunakan konvensi penamaan berbasis folder di folder Platforms\Android\Resources . Folder harus diberi nama nilai dengan akhiran untuk bahasa dan budaya. Misalnya, folder bahasa Spanyol diberi nama values-es. Tambahkan file Strings.xml dengan tindakan build AndroidResource ke setiap folder yang mengatur string ke nama aplikasi yang dilokalkan.

Catatan

Daripada mengatur file individual ke tindakan build AndroidResource , konten folder tertentu dapat diatur ke tindakan build ini dengan menambahkan XML berikut ke file proyek aplikasi Anda (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
  <AndroidResource Include="Platforms\Android\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Contoh ini mengatur konten apa pun di folder Platforms\Android\Resources , termasuk konten di sub-folder, ke tindakan build AndroidResource . Ini juga mengatur jalur output untuk setiap file dengan tindakan build ini.

Hanya dua karakter yang diperlukan dalam nama folder saat menentukan bahasa tingkat atas, seperti es. Namun, saat menentukan lokal lengkap, format nama folder memerlukan tanda hubung dan huruf kecil r untuk memisahkan bahasa dari budaya. Misalnya, folder lokal Meksiko (es-MX) harus diberi nama values-es-rMX.

Setiap string yang dapat diterjemahkan adalah elemen XML dengan ID sumber daya yang ditentukan sebagai name atribut dan string yang diterjemahkan sebagai nilai. Anda perlu menghindari string sesuai dengan aturan XML normal, dan name harus berupa ID sumber daya Android yang valid (tanpa spasi atau tanda hud).

Oleh karena itu, untuk melokalisasi nama aplikasi, buat file Strings.xml dan tambahkan <string> elemen sebagai turunan elemen <resources> . Kemudian, atur atributnya name ke ID yang sesuai dengan string yang diterjemahkan sebagai nilai :

<resources>
    <!-- French -->
    <string name="app_name">Maison</string>
</resources>

Kemudian, untuk menggunakan nama aplikasi yang dilokalkan di aplikasi Anda, tambahkan properti ke Activity di kelas aplikasi MainActivity Anda, dan atur nilainya ke @string/id:Label

[Activity(Label = "@string/app_name", Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
    }
}

iOS

Di iOS, nama aplikasi yang dilokalkan disimpan menggunakan konvensi penamaan berbasis folder di folder Platforms\iOS\Resources . Folder harus diberi nama dengan bahasa, dan budaya opsional, diikuti oleh .lproj. Misalnya, folder bahasa Spanyol diberi nama es.lproj. Tambahkan file InfoPlist.strings dengan tindakan build BundleResource ke setiap folder yang mengatur CFBundleDisplayName kunci dan nilai.

Catatan

Daripada mengatur file individual ke tindakan build BundleResource , konten folder tertentu dapat diatur ke tindakan build ini dengan menambahkan XML berikut ke file proyek aplikasi Anda (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
  <BundleResource Include="Platforms\iOS\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Contoh ini mengatur konten apa pun di folder Platforms\iOS\Resources , termasuk konten di sub-folder, ke tindakan build BundleResource . Ini juga mengatur jalur output untuk setiap file dengan tindakan build ini.

Sintaks untuk nilai string yang dilokalkan adalah:

/* comment */
"key"="localized-value";

Anda harus keluar dari karakter berikut dalam string:

  • \" kutipan
  • \\ Backslash
  • \n baris baru

Oleh karena itu, untuk melokalisasi nama aplikasi, buat file InfoPlist.strings dan tambahkan nilai untuk CFBundleDisplayName kunci ke file:

/* French */
CFBundleDisplayName="Maisons";

Kunci lain yang dapat Anda gunakan untuk melokalisasi string khusus aplikasi adalah:

  • CFBundleName - menentukan nama pendek app bundle, yang mungkin ditampilkan kepada pengguna dalam situasi seperti tidak adanya nilai untuk CFBundleDisplayName.
  • CFBundleShortVersionString - menentukan nomor versi rilis app bundle.
  • NSHumanReadableCopyright - pemberitahuan hak cipta untuk app bundle.

Mac Catalyst

Di Mac Catalyst, nama aplikasi yang dilokalkan disimpan menggunakan konvensi penamaan berbasis folder di folder Platforms\MacCatalyst\Resources . Folder harus diberi nama dengan bahasa, dan budaya opsional, diikuti oleh .lproj. Misalnya, folder bahasa Spanyol diberi nama es.lproj. Tambahkan file InfoPlist.strings dengan tindakan build BundleResource ke setiap folder yang mengatur CFBundleDisplayName kunci dan nilai.

Catatan

Daripada mengatur file individual ke tindakan build BundleResource , konten folder tertentu dapat diatur ke tindakan build ini dengan menambahkan XML berikut ke file proyek aplikasi Anda (.csproj):

<ItemGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
  <BundleResource Include="Platforms\MacCatalyst\Resources\**" TargetPath="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Contoh ini mengatur konten apa pun di folder Platforms\MacCatalyst\Resources , termasuk konten di sub-folder, ke tindakan build BundleResource . Ini juga mengatur jalur output untuk setiap file dengan tindakan build ini.

Sintaks untuk nilai string yang dilokalkan adalah:

/* comment */
"key"="localized-value";

Anda harus keluar dari karakter berikut dalam string:

  • \" kutipan
  • \\ Backslash
  • \n baris baru

Oleh karena itu, untuk melokalisasi nama aplikasi, buat file InfoPlist.strings dan tambahkan nilai untuk CFBundleDisplayName kunci ke file:

/* French */
CFBundleDisplayName="Maisons";

Kunci lain yang dapat Anda gunakan untuk melokalisasi string khusus aplikasi adalah:

  • CFBundleName - spesifik nama pendek app bundle, yang mungkin ditampilkan kepada pengguna dalam situasi seperti tidak adanya nilai untuk CFBundleDisplayName.
  • CFBundleShortVersionString - menentukan nomor versi rilis app bundle.
  • NSHumanReadableCopyright - pemberitahuan hak cipta untuk app bundle.

Windows

Di Windows, nama aplikasi ditentukan dalam manifes paket aplikasi Anda. Melokalisasi nama aplikasi mengharuskan Anda menentukan bahasa default untuk aplikasi terlebih dahulu, lalu membuat file sumber daya string untuk setiap lokal yang ingin Anda dukung. Sumber daya string yang mewakili nama aplikasi yang dilokalkan kemudian dapat digunakan dalam manifes paket aplikasi Anda dengan menggunakan ms-resource skema URI.

Untuk informasi selengkapnya tentang melokalisasi string dalam manifes paket aplikasi Anda, lihat Melokalkan string di manifes paket UI dan aplikasi Anda.

Tentukan bahasa default

Untuk melokalisasi nama aplikasi, aplikasi Windows Anda harus terlebih dahulu memiliki bahasa default yang ditentukan. Ini adalah bahasa yang sumber dayanya digunakan jika tidak ada sumber daya yang dilokalkan untuk bahasa tertentu yang dapat ditemukan. Untuk menentukan bahasa default:

  1. Di Penjelajah Solusi, buka file Packageappxmanifest di editor manifes paket.

  2. Di editor manifes paket, pada tab Aplikasi , atur bidang Bahasa default ke bahasa default yang Anda pilih:

    Cuplikan layar pengaturan bahasa default aplikasi Windows dalam manifes paket.

  3. Simpan perubahan Anda.

Minimal, Anda perlu menyediakan sumber daya string untuk nama aplikasi untuk bahasa default. Ini adalah sumber daya yang dimuat jika tidak ada kecocokan yang lebih baik yang dapat ditemukan untuk bahasa pilihan pengguna atau pengaturan bahasa tampilan.

Membuat file sumber daya Windows

Di Windows, nama aplikasi yang dilokalkan harus disimpan dalam file sumber daya Windows untuk setiap lokal. File sumber daya Windows adalah file XML dengan ekstensi .resw yang dikompilasi ke dalam format biner dan disimpan dalam file .pri . File .resw untuk setiap lokal harus diberi nama Resources.resw dan disimpan menggunakan konvensi penamaan berbasis folder di folder Platforms\Windows\Strings . Folder harus diberi nama dengan bahasa, dan budaya opsional. Misalnya, folder bahasa Spanyol bernama es dan folder lokal Meksiko harus diberi nama es-MX.

Saat ini tidak ada templat item Visual Studio untuk membuat file sumber daya Windows di aplikasi .NET MAUI. Oleh karena itu, untuk membuat file sumber daya Windows untuk setiap lokal:

  1. Di folder Platforms\Windows proyek aplikasi .NET MAUI Anda, buat folder String.

  2. Di folder String, buat folder untuk setiap lokal.

  3. Di folder untuk setiap lokal, buat file bernama Resources.resw yang berisi XML berikut:

    <?xml version="1.0" encoding="utf-8"?>
    <root>
      <!--
        Microsoft ResX Schema
    
        Version 2.0
    
        The primary goals of this format is to allow a simple XML format
        that is mostly human readable. The generation and parsing of the
        various data types are done through the TypeConverter classes
        associated with the data types.
    
        Example:
    
        ... ado.net/XML headers & schema ...
        <resheader name="resmimetype">text/microsoft-resx</resheader>
        <resheader name="version">2.0</resheader>
        <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
        <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
        <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
        <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
        <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
            <value>[base64 mime encoded serialized .NET Framework object]</value>
        </data>
        <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
            <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
            <comment>This is a comment</comment>
        </data>
    
        There are any number of "resheader" rows that contain simple
        name/value pairs.
    
        Each data row contains a name, and value. The row also contains a
        type or mimetype. Type corresponds to a .NET class that support
        text/value conversion through the TypeConverter architecture.
        Classes that don't support this are serialized and stored with the
        mimetype set.
    
        The mimetype is used for serialized objects, and tells the
        ResXResourceReader how to depersist the object. This is currently not
        extensible. For a given mimetype the value must be set accordingly:
    
        Note - application/x-microsoft.net.object.binary.base64 is the format
        that the ResXResourceWriter will generate, however the reader can
        read any of the formats listed below.
    
        mimetype: application/x-microsoft.net.object.binary.base64
        value   : The object must be serialized with
                : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
                : and then encoded with base64 encoding.
    
        mimetype: application/x-microsoft.net.object.soap.base64
        value   : The object must be serialized with
                : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
                : and then encoded with base64 encoding.
    
        mimetype: application/x-microsoft.net.object.bytearray.base64
        value   : The object must be serialized into a byte array
                : using a System.ComponentModel.TypeConverter
                : and then encoded with base64 encoding.
        -->
      <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
        <xsd:element name="root" msdata:IsDataSet="true">
          <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
              <xsd:element name="metadata">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" />
                  </xsd:sequence>
                  <xsd:attribute name="name" use="required" type="xsd:string" />
                  <xsd:attribute name="type" type="xsd:string" />
                  <xsd:attribute name="mimetype" type="xsd:string" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="assembly">
                <xsd:complexType>
                  <xsd:attribute name="alias" type="xsd:string" />
                  <xsd:attribute name="name" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="data">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                    <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
                  <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
                  <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="resheader">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:choice>
          </xsd:complexType>
        </xsd:element>
      </xsd:schema>
      <resheader name="resmimetype">
        <value>text/microsoft-resx</value>
      </resheader>
      <resheader name="version">
        <value>2.0</value>
      </resheader>
      <resheader name="reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
      <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
    </root>
    

    Catatan

    File sumber daya Windows menggunakan tindakan build .PRIResource Tindakan build ini tidak memerlukan pengaturan pada setiap file .resw di aplikasi .NET MAUI, karena diterapkan secara implisit.

  4. Buka setiap file Resources.resw dan tambahkan sumber daya string yang mewakili nama aplikasi:

    Cuplikan layar editor file resw di Visual Studio di Windows.

    Catatan

    Pengidentifikasi sumber daya tidak peka huruf besar/kecil, dan harus unik per file sumber daya.

  5. Simpan setiap file sumber daya Windows.

Contoh folder dan struktur file yang diperlukan diperlihatkan dalam cuplikan layar berikut:

Cuplikan layar struktur folder yang dilokalkan di Visual Studio untuk string di Windows.

Menggunakan nama aplikasi yang dilokalkan

Sumber daya string yang mewakili nama aplikasi yang dilokalkan dapat digunakan dengan menggunakan ms-resource skema URI:

  1. Di Penjelajah Solusi, buka file Packageappxmanifest di editor manifes paket.

  2. Di editor manifes paket, pada tab Aplikasi , atur bidang Nama tampilan untuk ms-resource: diikuti dengan nama sumber daya string yang mengidentifikasi nama aplikasi Anda:

    Cuplikan layar pengaturan nama aplikasi yang dilokalkan dalam manifes paket di Windows.

  3. Simpan perubahan Anda.

Penting

Jika file .resw Anda disimpan dalam rakitan yang berbeda dengan proyek aplikasi .NET MAUI, Anda harus menentukan jalur yang sepenuhnya memenuhi syarat ke nama sumber daya Anda. Ini menggunakan format ms-resource:Assembly/ResourceFilename/Resource.

Pelokalan kanan-ke-kiri

Arah alur, atau arah tata letak, 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. Aplikasi .NET MAUI secara otomatis menghormati arah alur perangkat berdasarkan bahasa dan wilayah yang dipilih. Untuk informasi tentang cara mengambil arah alur perangkat, berdasarkan lokalnya, lihat Mendapatkan arah tata letak.

Untuk mengambil alih arah alur aplikasi, atur Window.FlowDirection properti . Atau, atur VisualElement.FlowDirection properti per elemen. 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:

  • LeftToRight
  • RightToLeft
  • MatchParent

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

Peringatan

Mengubah properti saat FlowDirection runtime menyebabkan proses tata letak mahal yang akan memengaruhi performa.

Nilai properti default FlowDirection untuk elemen 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

Jika Anda perlu mengubah arah alur, atur FlowDirection properti pada jendela, halaman, atau tata letak akar. Ini menyebabkan semua elemen yang terkandung dalam aplikasi, halaman, atau tata letak akar, merespons dengan tepat ke arah alur.

Penyetelan platform

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

Android

Aplikasi yang dibuat menggunakan templat proyek aplikasi .NET MAUI secara otomatis menyertakan dukungan untuk lokal kanan-ke-kiri. Dukungan ini diaktifkan oleh atribut yang android:supportsRtl diatur ke true pada simpul <application> dalam file AndroidManifest.xml aplikasi:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application ... android:supportsRtl="true" />
    ...
</manifest>

Pelokalan kanan-ke-kiri kemudian dapat diuji dengan mengubah perangkat atau emulator untuk menggunakan bahasa kanan-ke-kiri. Atau, jika Anda telah mengaktifkan opsi pengembang di aplikasi Pengaturan, Anda dapat mengaktifkan arah tata letak Force RTL di > Pengaturan Opsi Pengembang. Untuk informasi tentang mengonfigurasi opsi pengembang, lihat Mengonfigurasi opsi pengembang di perangkat di developer.android.com.

iOS dan Mac Catalyst

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>

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

Windows

Sumber daya bahasa yang diperlukan harus ditentukan dalam simpul <Resources> file Package.appxmanifest . Ganti <Resource Language="x-generate"> dengan <Resource /> elemen untuk setiap bahasa yang didukung. Misalnya, markup berikut menentukan bahwa sumber daya "en" dan "ar" yang dilokalkan tersedia:

<Resources>
    <Resource Language="en" />
    <Resource Language="ar" />
</Resources>

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

Menguji pelokalan

Saat runtime, aplikasi Anda memuat sumber daya yang dilokalkan sesuai berdasarkan per utas, berdasarkan budaya yang ditentukan oleh CurrentUICulture properti .

Pelokalan pengujian paling baik dilakukan dengan mengubah bahasa perangkat Anda di aplikasi Pengaturan di setiap perangkat.

Peringatan

Meskipun dimungkinkan untuk menetapkan nilai CurrentUICulture dalam kode, perilaku yang dihasilkan tidak konsisten di seluruh platform sehingga ini tidak disarankan untuk pengujian.