Bagikan melalui


Sistem Manajemen Sumber Daya

Sistem Manajemen Sumber Daya memiliki fitur build-time dan run-time. Pada waktu build, sistem membuat indeks dari semua varian sumber daya yang berbeda yang dipaketkan dengan aplikasi Anda. Indeks ini adalah Indeks Sumber Daya Paket, atau PRI, dan juga disertakan dalam paket aplikasi Anda. Pada run-time, sistem mendeteksi pengaturan pengguna dan mesin yang berlaku, berkonsultasi dengan informasi di PRI, dan secara otomatis memuat sumber daya yang paling cocok untuk pengaturan tersebut.

File Indeks Sumber Daya Paket (PRI)

Setiap paket aplikasi harus berisi indeks biner sumber daya di aplikasi. Indeks ini dibuat pada waktu build dan terkandung dalam satu atau beberapa file Indeks Sumber Daya Paket (PRI).

  • File PRI berisi sumber daya string aktual, dan sekumpulan jalur file terindeks yang merujuk ke berbagai file dalam paket.
  • Paket biasanya berisi satu file PRI per bahasa, bernama resources.pri.
  • File resources.pri di akar setiap paket secara otomatis dimuat saat ResourceManager dibuat.
  • File PRI dapat dibuat dan dibuang dengan alat MakePRI.exe.
  • Untuk pengembangan aplikasi umum, Anda tidak perlu MakePRI.exe karena sudah diintegrasikan ke dalam alur kerja kompilasi Visual Studio. Dan Visual Studio mendukung pengeditan file PRI di UI khusus. Namun, localizer dan alat yang mereka gunakan mungkin mengandalkan MakePRI.exe.
  • Setiap file PRI berisi kumpulan sumber daya bernama, yang disebut sebagai peta sumber daya. Saat file PRI dari paket dimuat, nama peta sumber daya diverifikasi agar sesuai dengan nama identitas paket.
  • File PRI hanya berisi data, sehingga tidak menggunakan format portable executable (PE). Mereka dirancang khusus untuk menjadi data-saja sebagai format sumber daya untuk Windows. Mereka mengganti sumber daya yang terkandung dalam DLL dalam model aplikasi Win32.

Akses API UWP ke sumber daya aplikasi

Fungsionalitas dasar (ResourceLoader)

Cara paling sederhana untuk mengakses sumber daya aplikasi Anda secara terprogram adalah dengan menggunakan namespace layanan Windows.ApplicationModel.Resources dan kelas ResourceLoader. ResourceLoader memberi Anda akses dasar ke sumber daya string dari kumpulan file sumber daya, pustaka yang direferensikan, atau paket lainnya.

Fungsionalitas tingkat lanjut (ResourceManager)

Kelas ResourceManager (di namespace Layanan Windows.ApplicationModel.Resources.Core ) menyediakan info tambahan tentang sumber daya, seperti enumerasi dan inspeksi. Ini melampaui apa yang disediakan kelas ResourceLoader .

Objek NamedResource mewakili sumber daya logis individual dengan beberapa bahasa atau varian lain yang memenuhi syarat. Ini menjelaskan tampilan logis aset atau sumber daya, dengan pengidentifikasi sumber daya string seperti Header1, atau nama file sumber daya seperti logo.jpg.

Objek ResourceCandidate mewakili satu nilai sumber daya konkret dan kualifikasinya, seperti string "Halo Dunia" untuk bahasa Inggris, atau "logo.scale-100.jpg" sebagai sumber daya gambar yang memenuhi syarat yang khusus untuk resolusi skala-100.

Sumber daya yang tersedia untuk aplikasi disimpan dalam koleksi hierarkis, yang dapat Anda akses dengan objek ResourceMap. Kelas ResourceManager menyediakan akses ke berbagai instans ResourceMap tingkat atas yang digunakan oleh aplikasi, yang sesuai dengan berbagai paket untuk aplikasi. Nilai MainResourceMap sesuai dengan peta sumber daya untuk paket aplikasi saat ini, dan mengecualikan paket kerangka kerja yang direferensikan. Setiap ResourceMap dinamai untuk nama paket yang ditentukan dalam manifes paket. Dalam ResourceMap adalah subtrees (lihat ResourceMap.GetSubtree), yang selanjutnya berisi objek NamedResource. Subtrees biasanya sesuai dengan file sumber daya yang berisi sumber daya. Untuk informasi selengkapnya, lihat Melokalkan string di manifes UI dan paket aplikasi Anda serta Memuat gambar dan aset yang disesuaikan untuk skala, tema, kontras tinggi, dan lainnya.

Berikut adalah contoh.

// using Windows.ApplicationModel.Resources.Core;
ResourceMap resourceMap =  ResourceManager.Current.MainResourceMap.GetSubtree("Resources");
ResourceContext resourceContext = ResourceContext.GetForCurrentView()
var str = resourceMap.GetValue("String1", resourceContext).ValueAsString;

Catatan Pengidentifikasi sumber daya diperlakukan sebagai fragmen Pengidentifikasi Sumber Daya Seragam (URI), tunduk pada semantik URI. Misalnya, GetValue("Caption%20") diperlakukan sebagai GetValue("Caption "). Jangan gunakan "?" atau "#" dalam pengidentifikasi sumber daya, karena pengidentifikasi menghentikan evaluasi jalur sumber daya. Misalnya, "MyResource?3" diperlakukan sebagai "MyResource".

ResourceManager tidak hanya mendukung akses ke sumber daya string aplikasi, tetapi juga mempertahankan kemampuan untuk menghitung dan memeriksa berbagai sumber daya file juga. Untuk menghindari tabrakan antara file dan sumber daya lain yang berasal dari dalam file, jalur file terindeks semuanya berada dalam subtree ResourceMap "Files" yang dicadangkan. Misalnya, file \Images\logo.png sesuai dengan nama Files/images/logo.pngsumber daya .

API StorageFile secara transparan menangani referensi ke file sebagai sumber daya, dan sesuai untuk skenario penggunaan umum. ResourceManager hanya boleh digunakan untuk skenario tingkat lanjut, seperti ketika Anda ingin mengambil alih konteks saat ini.

ResourceContext

Kandidat sumber daya dipilih berdasarkan ResourceContext tertentu, yang merupakan kumpulan nilai kualifikasi sumber daya (bahasa, skala, kontras, dan sebagainya). Konteks default menggunakan konfigurasi aplikasi saat ini untuk setiap nilai kualifikasi, kecuali ditimpa. Misalnya, sumber daya seperti gambar dapat memenuhi syarat untuk skala, yang bervariasi dari satu monitor ke monitor lainnya dan karenanya dari satu tampilan aplikasi ke tampilan aplikasi lainnya. Untuk alasan ini, setiap tampilan aplikasi memiliki konteks default yang berbeda. Konteks default untuk tampilan tertentu dapat diperoleh menggunakan ResourceContext.GetForCurrentView. Setiap kali Anda mengambil kandidat sumber daya, Anda harus meneruskan instans ResourceContext untuk mendapatkan nilai yang paling tepat untuk tampilan tertentu.

API penting