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.MyType
bir 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.MyType
MyAssembly
arar. 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 , Afternoon
ve Evening
adlı Morning
dize 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ı vbc
csc
olarak, dosya uzantısını .vb
.cs
olarak 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ı Example
bir 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 assembly
bulunamazsa 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.