Bagikan melalui


Konstruktor System.Resources.ResourceManager

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Konstruktor ResourceManager(Type)

Bagian ini berkaitan dengan ResourceManager(Type) kelebihan beban konstruktor.

Aplikasi desktop

Di aplikasi desktop, resource manager menggunakan resourceSource parameter untuk memuat file sumber daya tertentu sebagai berikut:

  • NeutralResourcesLanguageAttribute Jika atribut tidak digunakan untuk menunjukkan bahwa sumber daya budaya default berada di perakitan satelit, manajer sumber daya mengasumsikan bahwa file sumber daya untuk budaya default ditemukan dalam rakitan yang sama dengan jenis yang ditentukan oleh resourceSource parameter.
  • Manajer sumber daya mengasumsikan bahwa file sumber daya default memiliki nama dasar yang sama dengan jenis yang ditentukan oleh resourceSource parameter .
  • Manajer sumber daya menggunakan kelas default ResourceSet untuk memanipulasi file sumber daya.

Misalnya, diberi jenis bernama MyCompany.MyProduct.MyType, manajer sumber daya mencari file .resources bernama MyCompany.MyProduct.MyType.resources di rakitan yang mendefinisikan MyType.

Di Visual Studio, Resource Designer secara otomatis menghasilkan kode yang menentukan internal kelas (dalam C#) atau Friend (di Visual Basic) yang namanya sama dengan nama dasar file .resources untuk budaya default. Ini memungkinkan untuk membuat instans ResourceManager objek dan menggabungkannya dengan sekumpulan sumber daya tertentu dengan mendapatkan objek jenis yang namanya sesuai dengan nama sumber daya, karena selama kelas terlihat oleh pengkompilasi, sumber daya juga harus. Misalnya, jika file .resources bernama Resource1, pernyataan berikut membuat instans ResourceManager objek untuk mengelola file .resources bernama Resource1:

ResourceManager rm = new ResourceManager(typeof(Resource1));

Jika Anda tidak menggunakan Visual Studio, Anda dapat membuat kelas tanpa anggota yang namespace dan namanya sama dengan file .resources default. Contoh ini memberikan ilustrasi.

Aplikasi Windows 8.x

Penting

ResourceManager Meskipun kelas didukung di aplikasi Windows 8.x, kami tidak merekomendasikan penggunaannya. Gunakan kelas ini hanya saat Anda mengembangkan proyek Pustaka Kelas Portabel yang dapat digunakan dengan aplikasi Windows 8.x. Untuk mengambil sumber daya dari aplikasi Windows 8.x, gunakan kelas Windows.ApplicationModel.Resources.ResourceLoader sebagai gantinya.

Di aplikasi Windows 8.x, ResourceManager menggunakan resourceSource parameter untuk menyimpulkan assembly, nama dasar, dan namespace tempat item sumber daya dapat berada dalam file indeks sumber daya paket (PRI) aplikasi. Misalnya, diberi jenis bernama MyCompany.MyProduct.MyType yang ditentukan dalam MyAssembly, resource manager mencari pengidentifikasi set sumber daya bernama MyAssembly dan mencari cakupan MyCompany.MyProduct.MyType dalam set sumber daya tersebut. Manajer sumber daya mencari item sumber daya di bawah konteks default (budaya saat ini, pengaturan kontras tinggi saat ini, dan sebagainya) dalam cakupan ini.

Contoh

Contoh berikut menggunakan ResourceManager(Type) konstruktor untuk membuat instans ResourceManager objek. Ini terdiri dari sumber daya yang dikompilasi dari file .txt untuk budaya Inggris (en), Prancis (Prancis) (fr-FR), dan Rusia (Rusia) (ru-RU). Contohnya mengubah budaya saat ini dan budaya UI saat ini menjadi Bahasa Inggris (Amerika Serikat), Prancis (Prancis), Rusia (Rusia), dan Swedia (Swedia). Kemudian memanggil GetString(String) metode untuk mengambil string yang dilokalkan, yang menampilkan salam yang tergantung pada waktu hari.

Contohnya memerlukan tiga file sumber daya berbasis teks, seperti yang tercantum dalam tabel berikut. Setiap file menyertakan sumber daya string bernama Morning, Afternoon, dan Evening.

Kultur Nama file Nama sumber daya Nilai sumber daya
id-ID GreetingResources.txt Morning Selamat pagi
id-ID GreetingResources.txt Afternoon Selamat sore
id-ID GreetingResources.txt Evening Selamat malam
fr-FR GreetingResources.fr-FR.txt Morning Bonjour
fr-FR GreetingResources.fr-FR.txt Afternoon Bonjour
fr-FR GreetingResources.fr-FR.txt Evening Bonsoir
ru-RU GreetingResources.ru-RU.txt Morning Доброе утро
ru-RU GreetingResources.ru-RU.txt Afternoon Добрый день
ru-RU GreetingResources.ru-RU.txt Evening Добрый вечер

Anda dapat menggunakan file batch berikut untuk mengkompilasi contoh Visual Basic dan membuat executable bernama Greet.exe. Untuk mengkompilasi dengan C#, ubah nama pengkompilasi dari vbc ke csc dan ekstensi file dari .vb ke .cs.

resgen GreetingResources.txt
vbc Greet.vb /resource: GreetingResources.resources

md fr-FR
resgen GreetingResources.fr-FR.txt
al /out:fr-FR\Greet.resources.dll /culture:fr-FR /embed: GreetingResources.fr-FR.resources

md ru-RU
resgen GreetingResources.ru-RU.txt
al /out:ru-RU\Greet.resources.dll /culture:ru-RU /embed: GreetingResources.ru-RU.resources

Berikut adalah kode sumber untuk contoh (ShowDate.vb untuk versi Visual Basic atau ShowDate.cs untuk versi C# kode).

using System;
using System.Resources;
using System.Globalization;
using System.Threading;

[assembly: NeutralResourcesLanguage("en")]

public class Example2
{
    public static void Main()
    {
        string[] cultureNames = [ "en-US", "fr-FR", "ru-RU", "sv-SE" ];
        DateTime noon = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
                                     DateTime.Now.Day, 12, 0, 0);
        DateTime evening = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
                                        DateTime.Now.Day, 18, 0, 0);

        ResourceManager rm = new ResourceManager(typeof(GreetingResources));

        foreach (var cultureName in cultureNames)
        {
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName);
            Console.WriteLine("The current UI culture is {0}",
                              CultureInfo.CurrentUICulture.Name);
            if (DateTime.Now < noon)
                Console.WriteLine("{0}!", rm.GetString("Morning"));
            else if (DateTime.Now < evening)
                Console.WriteLine("{0}!", rm.GetString("Afternoon"));
            else
                Console.WriteLine("{0}!", rm.GetString("Evening"));
            Console.WriteLine();
        }
    }

    internal class GreetingResources
    {
    }
}
// The example displays output like the following:
//       The current UI culture is en-US
//       Good afternoon!
//
//       The current UI culture is fr-FR
//       Bonjour!
//
//       The current UI culture is ru-RU
//       Добрый день!
//
//       The current UI culture is sv-SE
//       Good afternoon!
Imports System.Resources
Imports System.Globalization
Imports System.Threading

<Assembly:NeutralResourcesLanguage("en")>

Module Example
   Public Sub Main()
      Dim cultureNames() As String = {"en-US", "fr-FR", "ru-RU", "sv-SE" }
      Dim noon As New Date(Date.Now.Year, Date.Now.Month, 
                           Date.Now.Day, 12,0,0)
      Dim evening As New Date(Date.Now.Year, Date.Now.Month,
                              Date.Now.Day, 18, 0, 0)                          
      
      Dim rm As New ResourceManager(GetType(GreetingResources))
      
      For Each cultureName In cultureNames
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName)
         Console.WriteLine("The current UI culture is {0}", 
                           CultureInfo.CurrentUICulture.Name)
         If Date.Now < noon Then
            Console.WriteLine("{0}!", rm.GetString("Morning"))
         ElseIf Date.Now < evening Then
            Console.WriteLine("{0}!", rm.GetString("Afternoon"))
         Else
            Console.WriteLine("{0}!", rm.GetString("Evening"))
         End If 
         Console.WriteLine()
      Next
   End Sub
End Module

Friend Class GreetingResources
End Class
' The example displays output like the following:
'       The current UI culture is en-US
'       Good afternoon!
'       
'       The current UI culture is fr-FR
'       Bonjour!
'       
'       The current UI culture is ru-RU
'       Добрый день!
'       
'       The current UI culture is sv-SE
'       Good afternoon!

Selain menentukan kelas aplikasi bernama Example, kode sumber mendefinisikan kelas internal yang namanya, GreetingResources, sama dengan nama dasar file sumber daya. Ini memungkinkan untuk berhasil membuat ResourceManager instans objek dengan memanggil ResourceManager(Type) konstruktor.

Perhatikan bahwa output menampilkan string yang dilokalkan yang sesuai kecuali ketika budaya UI saat ini adalah Swedia (Swedia), dalam hal ini menggunakan sumber daya bahasa Inggris. Karena sumber daya bahasa Swedia tidak tersedia, aplikasi menggunakan sumber daya budaya default, seperti yang didefinisikan oleh NeutralResourcesLanguageAttribute atribut , sebagai gantinya.

Konstruktor ResourceManager(String, Assembly)

Bagian ini berkaitan dengan ResourceManager(String, Assembly) kelebihan beban konstruktor.

Aplikasi desktop

Dalam aplikasi desktop, file sumber daya khusus budaya individual harus dimuat dalam rakitan satelit, dan file sumber daya budaya default harus terkandung dalam perakitan utama. Rakitan satelit diasumsikan berisi sumber daya untuk satu budaya yang ditentukan dalam manifes perakitan tersebut, dan dimuat seperlunya.

Catatan

Untuk mengambil sumber daya dari file .resources secara langsung alih-alih mengambilnya dari rakitan, Anda harus memanggil CreateFileBasedResourceManager metode sebagai gantinya untuk membuat ResourceManager instans objek.

Jika file sumber daya yang diidentifikasi oleh baseName tidak dapat ditemukan di assembly, metode membuat instans ResourceManager objek, tetapi upaya untuk mengambil sumber daya tertentu melemparkan pengecualian, biasanya MissingManifestResourceException. Untuk informasi tentang mendiagnosis penyebab pengecualian, lihat bagian "Menangani Pengecualian MissingManifestResourceException" dari ResourceManager topik kelas.

Aplikasi Windows 8.x

Penting

ResourceManager Meskipun kelas didukung di aplikasi Windows 8.x, kami tidak merekomendasikan penggunaannya. Gunakan kelas ini hanya saat Anda mengembangkan proyek Pustaka Kelas Portabel yang dapat digunakan dengan aplikasi Windows 8.x. Untuk mengambil sumber daya dari aplikasi Windows 8.x, gunakan kelas Windows.ApplicationModel.Resources.ResourceLoader sebagai gantinya.

Di aplikasi Windows 8.x, resource manager menggunakan nama assembly parameter sederhana untuk mencari sumber daya yang cocok yang ditetapkan dalam file indeks sumber daya paket (PRI) aplikasi. Parameter baseName digunakan untuk mencari item sumber daya dalam kumpulan sumber daya. Misalnya, nama akar untuk PortableLibrary1.Resource1.de-DE.resources adalah PortableLibrary1.Resource1.

Contoh

Contoh berikut menggunakan aplikasi "Halo Dunia" sederhana yang tidak dilokalkan untuk mengilustrasikan ResourceManager(String, Assembly) konstruktor. Konten file teks bernama ExampleResources.txt adalah Greeting=Hello. Saat aplikasi dikompilasi, sumber daya disematkan di perakitan aplikasi utama.

File teks dapat dikonversi ke file sumber daya biner dengan menggunakan Resource File Generator (ResGen.exe) pada prompt perintah sebagai berikut:

resgen ExampleResources.txt

Contoh berikut menyediakan kode yang dapat dieksekusi yang membuat instans ResourceManager objek, meminta pengguna untuk memasukkan nama, dan menampilkan salam.

using System;
using System.Reflection;
using System.Resources;

public class Example1
{
    public static void Main()
    {
        // Retrieve the resource.
        ResourceManager rm = new ResourceManager("ExampleResources",
                                 typeof(Example).Assembly);
        string greeting = rm.GetString("Greeting");

        Console.Write("Enter your name: ");
        string name = Console.ReadLine();
        Console.WriteLine("{0} {1}!", greeting, name);
    }
}
// The example produces output similar to the following:
//       Enter your name: John
//       Hello John!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources

Module Example1
    Public Sub Main()
        ' Retrieve the resource.
        Dim rm As New ResourceManager("ExampleResources",
                                      GetType(Example).Assembly)
        Dim greeting As String = rm.GetString("Greeting")

        Console.Write("Enter your name: ")
        Dim name As String = Console.ReadLine()
        Console.WriteLine("{0} {1}!", greeting, name)
    End Sub
End Module
' The example produces output similar to the following:
'       Enter your name: John
'       Hello John!

Ini dapat dikompilasi dengan menggunakan perintah berikut di C#:

csc Example.cs /resource:ExampleResources.resources

Contoh mengambil referensi ke rakitan yang berisi file sumber daya dengan meneruskan jenis yang ditentukan dalam rakitan tersebut typeof ke fungsi (dalam C#) atau GetType fungsi (di Visual Basic) dan mengambil nilai propertinya Type.Assembly .