Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.
ResourceManager(Type) Oluşturucu
Bu bölüm, ResourceManager(Type) oluşturucu aşırı yüklemesi ile ilgili.
Masaüstü uygulamaları
Masaüstü uygulamalarında, kaynak yöneticisi aşağıdaki gibi belirli bir kaynak dosyasını yüklemek için resourceSource parametresini kullanır:
-
NeutralResourcesLanguageAttribute özniteliği, 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
resourceSourceparametresi tarafından belirtilen türle aynı derlemede bulunduğunu varsayar. - Kaynak yöneticisi, varsayılan kaynak dosyasının
resourceSourceparametresi tarafından 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ını kullanır.
Örneğin, MyCompany.MyProduct.MyTypeadlı bir tür verüldüğünde, kaynak yöneticisi tanımlayan derlemede MyCompany.MyProduct.MyType.resources adlı bir MyType dosyası arar.
Visual Studio'da Kaynak Tasarımcısı, varsayılan kültür için internal dosyasının temel adıyla aynı olan bir Friend (C#'de) veya (Visual Basic'te) sınıfını tanımlayan kodu otomatik olarak oluşturur. Bu, bir ResourceManager nesnesinin ö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ı Resource1 olarak adlandırılırsa, aşağıdaki deyim Resource1 adlı ResourceManager dosyasını yönetmek için bir nesnesi 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 açıklama sunar.
Windows 8.x uygulamaları
Önemli
ResourceManager sınıfı Windows 8.x uygulamalarında desteklense 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 resourceSource parametresini kullanır. Örneğin, MyCompany.MyProduct.MyTypeiçinde tanımlanan MyAssembly adlı bir tür verüldüğünde, kaynak yöneticisi MyAssembly adlı bir kaynak kümesi tanımlayıcısı arar ve bu kaynak kümesinde bir kapsam MyCompany.MyProduct.MyType 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, ResourceManager(Type) nesnesinin örneğini oluşturmak için ResourceManager oluşturucuyu 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 (ABD), Fransızca (Fransa), Rusça (Rusya) ve İsveççe (İsveç) olarak değiştirir. Ardından yerelleştirilmiş dizeyi almak için GetString(String) yöntemini çağırır 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 Morning, Afternoonve Eveningadlı 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.exeadlı 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 olarak csc ve dosya uzantısını .vb olarak .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 {CultureInfo.CurrentUICulture.Name}");
if (DateTime.Now < noon)
Console.WriteLine($"{rm.GetString("Morning")}!");
else if (DateTime.Now < evening)
Console.WriteLine($"{rm.GetString("Afternoon")}!");
else
Console.WriteLine($"{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!
kaynak kodu, Exampleadlı bir uygulama sınıfı tanımlamaya ek olarak, adı GreetingResourceskaynak dosyalarının temel adıyla aynı olan bir iç sınıf tanımlar. Bu, ResourceManager oluşturucuyu çağırarak bir ResourceManager(Type) nesnesinin örneğini 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 NeutralResourcesLanguageAttribute özniteliği tarafından tanımlanan varsayılan kültürün kaynaklarını kullanır.
ResourceManager(String, Assembly) Oluşturucu
Bu bölüm, ResourceManager(String, Assembly) oluşturucu aşırı yüklemesi ile ilgili.
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.
Uyarı
.resources dosyalarından doğrudan kaynak almak için, derlemelerden almak yerine, CreateFileBasedResourceManager nesnesinin bir örneğini oluşturmak amacıyla ResourceManager yöntemini çağırmanız gerekir.
baseName tarafından tanımlanan kaynak dosyası assemblyiçinde bulunamazsa, yöntem bir ResourceManager nesnesi oluşturur, ancak belirli bir kaynağı alma girişimi genellikle MissingManifestResourceExceptionadlı bir özel durumu atar. Özel durumun nedenini tanılama hakkında bilgi için, ResourceManager sınıfı konusunun "MissingManifestResourceException Özel Durumunu İşleme" bölümüne bakın.
Windows 8.x uygulamaları
Önemli
ResourceManager sınıfı Windows 8.x uygulamalarında desteklense 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, uygulamanın paket kaynak dizini (PRI) dosyasında eşleşen bir kaynak kümesi aramak için assembly parametresinin basit adını kullanır.
baseName parametresi, kaynak kümesindeki bir kaynak öğesini aramak için kullanılır. Örneğin, PortableLibrary1.Resource1.de-DE.resources için kök ad PortableLibrary1.Resource1'dir.
Örnek
Aşağıdaki örnek, ResourceManager(String, Assembly) oluşturucuyu göstermek için yerelleştirilmemiş basit bir "Merhaba Dünya" uygulaması kullanır.
ExampleResources.txt adlı bir metin dosyasının içeriği Greeting=Hello. Uygulama derlendiğinde, kaynak ana uygulama derlemesine eklenir.
Metin dosyası, komut isteminde Kaynak Dosya Oluşturucu (ResGen.exe) aşağıdaki şekilde kullanılarak ikili kaynak dosyasına dönüştürülebilir:
resgen ExampleResources.txt
Aşağıdaki örnek, bir ResourceManager nesnesinin ö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($"{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ü typeof işlevine (C#'da) veya GetType işlevine (Visual Basic'te) geçirerek ve Type.Assembly özelliğinin değerini alarak kaynak dosyasını içeren derlemeye başvuru alır.