Aracılığıyla paylaş


System.Resources.ResourceManager oluşturucuları

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

ResourceManager(Type) Oluşturucu

Bu bölüm oluşturucu aşırı yüklemesine ResourceManager(Type) yöneliktir.

Masaüstü uygulamaları

Masaüstü uygulamalarında, kaynak yöneticisi aşağıdaki gibi belirli bir kaynak dosyasını yüklemek için parametresini kullanır resourceSource :

  • Özniteliği, NeutralResourcesLanguageAttribute varsayılan kültürün kaynaklarının bir uydu derlemesinde bulunduğunu belirtmek için kullanılmazsa, kaynak yöneticisi varsayılan kültür için kaynak dosyasının parametresi tarafından resourceSource belirtilen türle aynı derlemede bulunduğunu varsayar.
  • Kaynak yöneticisi, varsayılan kaynak dosyasının parametresi tarafından resourceSource belirtilen türle aynı temel ada sahip olduğunu varsayar.
  • Kaynak yöneticisi, kaynak dosyasını işlemek için varsayılan ResourceSet sınıfı kullanır.

Örneğin, adlı MyCompany.MyProduct.MyTypebir tür verildiyse kaynak yöneticisi, öğesini tanımlayan derlemede MyCompany.MyProduct.MyType.resources adlı bir .resources dosyası ararMyType.

Visual Studio'da Resource Tasarım Aracı, varsayılan kültür için .resources dosyasının temel adıyla aynı olan bir internal (C#'ta) veya Friend (Visual Basic'te) sınıfını tanımlayan kodu otomatik olarak oluşturur. Bu, bir ResourceManager nesnenin örneğini oluşturmayı ve belirli bir kaynak kümesiyle ilişkilendirmeyi mümkün kılar. Bunun için, adı kaynağın adına karşılık gelen bir tür nesnesi alır, çünkü sınıfı derleyiciye görünür olduğu sürece kaynakların da olması gerekir. Örneğin, bir .resources dosyasının adı Resource1 ise, aşağıdaki deyim Resource1 adlı .resources dosyasını yönetmek için bir ResourceManager nesne örneği oluşturur:

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

Visual Studio kullanmıyorsanız, ad alanı ve adı varsayılan .resources dosyasıyla aynı olan üyeleri olmayan bir sınıf oluşturabilirsiniz. Örnek, bir gösterim sağlar.

Windows 8.x uygulamaları

Önemli

Sınıfı Windows 8.x uygulamalarında desteklense ResourceManager de, kullanılmasını önermeyiz. Bu sınıfı yalnızca Windows 8.x uygulamalarıyla kullanılabilecek Taşınabilir Sınıf Kitaplığı projeleri geliştirirken kullanın. Windows 8.x uygulamalarından kaynak almak için bunun yerine Windows.ApplicationModel.Resources.ResourceLoader sınıfını kullanın.

Windows 8.x uygulamalarında, ResourceManager derlemeyi, temel adı ve kaynak öğelerinin uygulamanın paket kaynak dizini (PRI) dosyasında bulunabileceği ad alanını çıkarsamak için parametresini kullanır resourceSource . Örneğin, içinde tanımlanan adlı MyCompany.MyProduct.MyType bir tür göz önüne alındığında, kaynak yöneticisi adlı MyAssembly bir kaynak kümesi tanımlayıcısı arar ve bu kaynak kümesi içinde bir kapsam MyCompany.MyProduct.MyTypeMyAssemblyarar. Kaynak yöneticisi, bu kapsamdaki varsayılan bağlam (geçerli kültür, geçerli yüksek karşıtlık ayarı vb.) altında kaynak öğelerini arar.

Örnek

Aşağıdaki örnek, bir ResourceManager nesne örneği oluşturmak için oluşturucuyu ResourceManager(Type) kullanır. İngilizce (en), Fransızca (Fransa) (fr-FR) ve Rusça (Rusya) (ru-RU) kültürleri için .txt dosyalardan derlenen kaynaklardan oluşur. Örnek, geçerli kültürü ve geçerli kullanıcı arabirimi kültürünü İngilizce (Birleşik Devletler), Fransızca (Fransa), Rusça (Rusya) ve İsveççe (İsveç) olarak değiştirir. Ardından yerelleştirilmiş dizeyi almak için yöntemini çağırır GetString(String) ve günün saatine bağlı bir selamlama görüntüler.

Örnek, aşağıdaki tabloda listelendiği gibi üç metin tabanlı kaynak dosyası gerektirir. Her dosya , Afternoonve Eveningadlı Morningdize kaynaklarını içerir.

Kültür Dosya adı Kaynak adı Kaynak değeri
en-US GreetingResources.txt Morning Günaydın
en-US GreetingResources.txt Afternoon İyi günler
en-US GreetingResources.txt Evening İyi akşamlar
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 Добрый вечер

Visual Basic örneğini derlemek ve Greet.exe adlı bir yürütülebilir dosya oluşturmak için aşağıdaki toplu iş dosyasını kullanabilirsiniz. C# ile derlemek için derleyici adını vbccsc olarak, dosya uzantısını .vb.csolarak değiştirin.

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

Örnek için kaynak kodu aşağıda verilmiştir (Visual Basic sürümü için ShowDate.vb veya kodun C# sürümü için ShowDate.cs).

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!

adlı Examplebir uygulama sınıfı tanımlamaya ek olarak, kaynak kodu adı GreetingResources, kaynak dosyalarının temel adıyla aynı olan bir iç sınıf tanımlar. Bu, oluşturucuyu çağırarak bir ResourceManager nesnenin örneğini ResourceManager(Type) başarıyla oluşturmayı mümkün kılar.

Çıktının, geçerli kullanıcı arabirimi kültürünün İsveççe (İsveç) olması dışında uygun yerelleştirilmiş dizeyi görüntülediğine ve bu durumda İngilizce kaynakları kullandığına dikkat edin. İsveç dili kaynakları kullanılamadığından, uygulama bunun yerine özniteliği tarafından tanımlanan varsayılan kültürün NeutralResourcesLanguageAttribute kaynaklarını kullanır.

ResourceManager(String, Assembly) Oluşturucu

Bu bölüm oluşturucu aşırı yüklemesine ResourceManager(String, Assembly) yöneliktir.

Masaüstü uygulamaları

Masaüstü uygulamalarında, tek tek kültüre özgü kaynak dosyaları uydu derlemelerinde ve varsayılan kültürün kaynak dosyası ana derlemede yer almalıdır. Bir uydu derlemesi, bu derlemenin bildiriminde belirtilen tek bir kültüre ait kaynakları içerdiği varsayılır ve gerektiğinde yüklenir.

Not

.resources dosyalarındaki kaynakları derlemelerden almak yerine doğrudan almak için, nesnesinin ResourceManager örneğini oluşturmak için yöntemini çağırmanız CreateFileBasedResourceManager gerekir.

tarafından baseName tanımlanan kaynak dosyası içinde assemblybulunamazsa yöntemi bir ResourceManager nesne örneği oluşturur, ancak belirli bir kaynağı alma girişimi genellikle MissingManifestResourceExceptionbir özel durum oluşturur. Özel durumun nedenini tanılama hakkında bilgi için sınıf konusunun "MissingManifestResourceException Özel Durumunu İşleme" bölümüne ResourceManager bakın.

Windows 8.x uygulamaları

Önemli

Sınıfı Windows 8.x uygulamalarında desteklense ResourceManager de, kullanılmasını önermeyiz. Bu sınıfı yalnızca Windows 8.x uygulamalarıyla kullanılabilecek Taşınabilir Sınıf Kitaplığı projeleri geliştirirken kullanın. Windows 8.x uygulamalarından kaynak almak için bunun yerine Windows.ApplicationModel.Resources.ResourceLoader sınıfını kullanın.

Windows 8.x uygulamalarında, kaynak yöneticisi parametrenin assembly basit adını kullanarak uygulamanın paket kaynak dizini (PRI) dosyasında eşleşen bir kaynak kümesi arar. baseName parametresi, kaynak kümesindeki bir kaynak öğesini aramak için kullanılır. Örneğin, PortableLibrary1.Resource1.de-DE.resources kök adı PortableLibrary1.Resource1 şeklindedir.

Örnek

Aşağıdaki örnek, oluşturucuyu göstermek ResourceManager(String, Assembly) için basit bir yerelleştirilmemiş "Merhaba Dünya" uygulaması kullanır. ExampleResources.txt adlı bir metin dosyasının içeriğidirGreeting=Hello. Uygulama derlendiğinde, kaynak ana uygulama derlemesine eklenir.

Metin dosyası, komut istemindeki Kaynak Dosya Oluşturucu (ResGen.exe) kullanılarak aşağıdaki gibi ikili kaynak dosyasına dönüştürülebilir:

resgen ExampleResources.txt

Aşağıdaki örnek, bir ResourceManager nesnenin örneğini oluşturan, kullanıcıdan bir ad girmesini isteyen ve bir selamlama görüntüleyen yürütülebilir kodu sağlar.

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!

C# dilinde aşağıdaki komut kullanılarak derlenebilir:

csc Example.cs /resource:ExampleResources.resources

Örnek, bu derlemede tanımlanan bir türü işleve (C#'de) veya GetType işleve typeof (Visual Basic'te) geçirerek ve özelliğinin değerini alarak kaynak dosyasını içeren derlemeye Type.Assembly başvuru alır.