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.
.NET uygulamalarında yerelleştirilmiş kaynaklarla çalışırken, ideal olarak kaynakları varsayılan veya nötr kültür için ana derlemeyle paketlemeli ve uygulamanızın desteklediği her dil veya kültür için ayrı bir uydu derlemesi oluşturmalısınız. Daha sonra adlandırılmış kaynaklara ResourceManager erişmek için sınıfını sonraki bölümde açıklandığı gibi kullanabilirsiniz. Kaynaklarınızı ana derlemeye ve uydu derlemelerine eklememeyi seçerseniz, bu makalenin ilerleyen bölümlerinde açıklanan .resources dosyalarından kaynak alma yöntemine ilişkin olarak, ikili .resources dosyalarına doğrudan da erişebilirsiniz.
Derlemelerden kaynak alma
ResourceManager sınıfı, çalışma zamanında kaynaklara erişim sağlar. Dize kaynaklarını almak için ResourceManager.GetString yöntemini ve dize dışı kaynakları almak için ResourceManager.GetObject veya ResourceManager.GetStream yöntemini kullanırsınız. Her yöntemin iki aşırı yüklemesi vardır:
Tek parametresi kaynağın adını içeren bir dize olan aşırı yükleme. Geçerli kültür için yöntem, bu kaynağı almayı dener. Daha fazla bilgi için, GetString(String), GetObject(String) ve GetStream(String) yöntemlerine bakın.
İki parametresi olan bir aşırı yükleme: kaynağın adını içeren bir dize ve kaynağı alınacak kültürü temsil eden bir CultureInfo nesne. Bu kültür için bir kaynak kümesi bulunamazsa, kaynak yöneticisi uygun bir kaynağı almak için geri dönüş kurallarını kullanır. Daha fazla bilgi için, GetString(String, CultureInfo), GetObject(String, CultureInfo) ve GetStream(String, CultureInfo) yöntemlerine bakın.
Kaynak yöneticisi, uygulamanın kültüre özgü kaynakları nasıl almasını denetlemek için kaynak geri dönüş işlemini kullanır. Daha fazla bilgi için Kaynakları paketleme ve dağıtma bölümündeki "Kaynak Geri Dönüş İşlemi" bölümüne bakın. Bir ResourceManager nesnenin örneğini oluşturma hakkında bilgi için sınıf konusunun "ResourceManager Nesnesi Örneği Oluşturma" bölümüne ResourceManager bakın.
Dize verisi alma örneği
Aşağıdaki örnek, geçerli Kullanıcı Arabirimi kültürünün dize kaynaklarını almak için GetString(String) yöntemini çağırır. İngilizce (ABD) kültürü için nötr bir dize kaynağı ve Fransızca (Fransa) ve Rusça (Rusya) kültürleri için yerelleştirilmiş kaynaklar içerir. Aşağıdaki İngilizce (ABD) kaynağı Strings.txtadlı bir dosyadadır:
TimeHeader=The current time is
Strings.fr-FR.txtisimli dosyada Fransızca (Fransa) kaynağı bulunmaktadır.
TimeHeader=L'heure actuelle est
Rusça (Rusya) kaynağı, Strings.ru-RU.txtadlı bir dosyadadır.
TimeHeader=Текущее время —
Kodun C# sürümü için GetString.cs ve Visual Basic sürümü için GetString.vb adlı bir dosyada yer alan bu örneğin kaynak kodu, dört kültürün adını içeren bir dize dizisi tanımlar: kaynakların kullanılabildiği üç kültür ve İspanyolca (İspanya) kültürü. Beş kez yürütülen bir döngü, bu kültürlerden birini rastgele seçer ve Thread.CurrentCulture ve CultureInfo.CurrentUICulture özelliklerine atar. Ardından yerelleştirilmiş dizeyi almak için GetString(String) yöntemini çağırır ve günün saatiyle birlikte görüntüler.
using System;
using System.Globalization;
using System.Resources;
using System.Threading;
[assembly: NeutralResourcesLanguageAttribute("en-US")]
public class Example
{
public static void Main()
{
string[] cultureNames = { "en-US", "fr-FR", "ru-RU", "es-ES" };
Random rnd = new Random();
ResourceManager rm = new ResourceManager("Strings",
typeof(Example).Assembly);
for (int ctr = 0; ctr <= cultureNames.Length; ctr++) {
string cultureName = cultureNames[rnd.Next(0, cultureNames.Length)];
CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
Console.WriteLine($"Current culture: {culture.NativeName}");
string timeString = rm.GetString("TimeHeader");
Console.WriteLine($"{timeString} {DateTime.Now:T}\n");
}
}
}
// The example displays output like the following:
// Current culture: English (United States)
// The current time is 9:34:18 AM
//
// Current culture: Español (España, alfabetización internacional)
// The current time is 9:34:18
//
// Current culture: русский (Россия)
// Текущее время — 9:34:18
//
// Current culture: français (France)
// L'heure actuelle est 09:34:18
//
// Current culture: русский (Россия)
// Текущее время — 9:34:18
Imports System.Globalization
Imports System.Resources
Imports System.Threading
<Assembly: NeutralResourcesLanguageAttribute("en-US")>
Module Example
Public Sub Main()
Dim cultureNames() As String = {"en-US", "fr-FR", "ru-RU", "es-ES"}
Dim rnd As New Random()
Dim rm As New ResourceManager("Strings", GetType(Example).Assembly)
For ctr As Integer = 0 To cultureNames.Length
Dim cultureName As String = cultureNames(rnd.Next(0, cultureNames.Length))
Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
Thread.CurrentThread.CurrentCulture = culture
Thread.CurrentThread.CurrentUICulture = culture
Console.WriteLine("Current culture: {0}", culture.NativeName)
Dim timeString As String = rm.GetString("TimeHeader")
Console.WriteLine("{0} {1:T}", timeString, Date.Now)
Console.WriteLine()
Next
End Sub
End Module
' The example displays output similar to the following:
' Current culture: English (United States)
' The current time is 9:34:18 AM
'
' Current culture: Español (España, alfabetización internacional)
' The current time is 9:34:18
'
' Current culture: русский (Россия)
' Текущее время — 9:34:18
'
' Current culture: français (France)
' L'heure actuelle est 09:34:18
'
' Current culture: русский (Россия)
' Текущее время — 9:34:18
Aşağıdaki batch (.bat) dosyası örneği derler ve uygun dizinlerde uydu derlemeleri oluşturur. Komutlar C# dili ve derleyicisi için sağlanır. Visual Basic için csc öğesini vbc ile değiştirin ve GetString.cs öğesini GetString.vb ile değiştirin.
resgen strings.txt
csc GetString.cs -resource:strings.resources
resgen strings.fr-FR.txt
md fr-FR
al -embed:strings.fr-FR.resources -culture:fr-FR -out:fr-FR\GetString.resources.dll
resgen strings.ru-RU.txt
md ru-RU
al -embed:strings.ru-RU.resources -culture:ru-RU -out:ru-RU\GetString.resources.dll
Geçerli kullanıcı arabirimi kültürü İspanyolca (İspanya) olduğunda, İspanyolca dil kaynakları kullanılamadığından ve İngilizce örneğin varsayılan kültürü olduğundan örnekte İngilizce dil kaynaklarının görüntülendiğini unutmayın.
Nesne veri örneklerini alma
Nesne verilerini almak için GetObject ve GetStream yöntemlerini kullanabilirsiniz. Buna ilkel veri türleri, serileştirilebilir nesneler ve ikili biçimde depolanan nesneler (görüntüler gibi) dahildir.
Aşağıdaki örnek, bir uygulamanın açılış penceresinde kullanılan bir bitmap'i almak için GetStream(String) yöntemini kullanır. CreateResources.cs (C#için) veya CreateResources.vb (Visual Basic için) adlı bir dosyada aşağıdaki kaynak kod, serileştirilmiş görüntüyü içeren bir .resx dosyası oluşturur. Bu durumda, görüntü SplashScreen.jpgadlı bir dosyadan yüklenir; dosya adını kendi görüntünüzün yerine geçecek şekilde değiştirebilirsiniz.
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Resources;
public class Example
{
public static void Main()
{
Bitmap bmp = new Bitmap(@".\SplashScreen.jpg");
MemoryStream imageStream = new MemoryStream();
bmp.Save(imageStream, ImageFormat.Jpeg);
ResXResourceWriter writer = new ResXResourceWriter("AppResources.resx");
writer.AddResource("SplashScreen", imageStream);
writer.Generate();
writer.Close();
}
}
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Resources
Module Example
Public Sub Main()
Dim bmp As New Bitmap(".\SplashScreen.jpg")
Dim imageStream As New MemoryStream()
bmp.Save(imageStream, ImageFormat.Jpeg)
Dim writer As New ResXResourceWriter("AppResources.resx")
writer.AddResource("SplashScreen", imageStream)
writer.Generate()
writer.Close()
End Sub
End Module
Aşağıdaki kod kaynağı alır ve görüntüyü bir PictureBox denetimde görüntüler.
using System;
using System.Drawing;
using System.IO;
using System.Resources;
using System.Windows.Forms;
public class Example
{
public static void Main()
{
ResourceManager rm = new ResourceManager("AppResources", typeof(Example).Assembly);
Bitmap screen = (Bitmap) Image.FromStream(rm.GetStream("SplashScreen"));
Form frm = new Form();
frm.Size = new Size(300, 300);
PictureBox pic = new PictureBox();
pic.Bounds = frm.RestoreBounds;
pic.BorderStyle = BorderStyle.Fixed3D;
pic.Image = screen;
pic.SizeMode = PictureBoxSizeMode.StretchImage;
frm.Controls.Add(pic);
pic.Anchor = AnchorStyles.Top | AnchorStyles.Bottom |
AnchorStyles.Left | AnchorStyles.Right;
frm.ShowDialog();
}
}
Imports System.Drawing
Imports System.IO
Imports System.Resources
Imports System.Windows.Forms
Module Example
Public Sub Main()
Dim rm As New ResourceManager("AppResources", GetType(Example).Assembly)
Dim screen As Bitmap = CType(Image.FromStream(rm.GetStream("SplashScreen")), Bitmap)
Dim frm As New Form()
frm.Size = new Size(300, 300)
Dim pic As New PictureBox()
pic.Bounds = frm.RestoreBounds
pic.BorderStyle = BorderStyle.Fixed3D
pic.Image = screen
pic.SizeMode = PictureBoxSizeMode.StretchImage
frm.Controls.Add(pic)
pic.Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or
AnchorStyles.Left Or AnchorStyles.Right
frm.ShowDialog()
End Sub
End Module
C# örneğini oluşturmak için aşağıdaki toplu iş dosyasını kullanabilirsiniz. Visual Basic için cscvbcolarak değiştirin ve kaynak kod dosyasının uzantısını .cs.vbolarak değiştirin.
csc CreateResources.cs
CreateResources
resgen AppResources.resx
csc GetStream.cs -resource:AppResources.resources
Aşağıdaki örnek, özel bir nesneyi seri durumdan çıkarmak için ResourceManager.GetObject(String) yöntemini kullanır. Örnek, adlı aşağıdaki yapıyı tanımlayan UIElements.cs (Visual Basic için UIElements.vb) adlı PersonTablebir kaynak kod dosyası içerir. Bu yapı, tablo sütunlarının yerelleştirilmiş adlarını görüntüleyen genel bir tablo görüntüleme yordamı tarafından kullanılmak üzere tasarlanmıştır.
PersonTable yapısının SerializableAttribute özniteliğiyle işaretlendiğini unutmayın.
using System;
[Serializable] public struct PersonTable
{
public readonly int nColumns;
public readonly string column1;
public readonly string column2;
public readonly string column3;
public readonly int width1;
public readonly int width2;
public readonly int width3;
public PersonTable(string column1, string column2, string column3,
int width1, int width2, int width3)
{
this.column1 = column1;
this.column2 = column2;
this.column3 = column3;
this.width1 = width1;
this.width2 = width2;
this.width3 = width3;
this.nColumns = typeof(PersonTable).GetFields().Length / 2;
}
}
<Serializable> Public Structure PersonTable
Public ReadOnly nColumns As Integer
Public Readonly column1 As String
Public ReadOnly column2 As String
Public ReadOnly column3 As String
Public ReadOnly width1 As Integer
Public ReadOnly width2 As Integer
Public ReadOnly width3 As Integer
Public Sub New(column1 As String, column2 As String, column3 As String,
width1 As Integer, width2 As Integer, width3 As Integer)
Me.column1 = column1
Me.column2 = column2
Me.column3 = column3
Me.width1 = width1
Me.width2 = width2
Me.width3 = width3
Me.nColumns = Me.GetType().GetFields().Count \ 2
End Sub
End Structure
CreateResources.cs adlı bir dosyadan (Visual Basic için CreateResources.vb) aşağıdaki kod, İngilizce dili için yerelleştirilmiş bir uygulamanın bilgilerini içeren bir tablo başlığını ve PersonTable bir nesneyi depolayan UIResources.resx adlı bir XML kaynak dosyası oluşturur.
using System;
using System.Resources;
public class CreateResource
{
public static void Main()
{
PersonTable table = new PersonTable("Name", "Employee Number",
"Age", 30, 18, 5);
ResXResourceWriter rr = new ResXResourceWriter(@".\UIResources.resx");
rr.AddResource("TableName", "Employees of Acme Corporation");
rr.AddResource("Employees", table);
rr.Generate();
rr.Close();
}
}
Imports System.Resources
Module CreateResource
Public Sub Main()
Dim table As New PersonTable("Name", "Employee Number", "Age", 30, 18, 5)
Dim rr As New ResXResourceWriter(".\UIResources.resx")
rr.AddResource("TableName", "Employees of Acme Corporation")
rr.AddResource("Employees", table)
rr.Generate()
rr.Close()
End Sub
End Module
GetObject.cs (GetObject.vb) adlı bir kaynak kod dosyasındaki aşağıdaki kod, kaynakları alır ve konsolda görüntüler.
using System;
using System.Resources;
[assembly: NeutralResourcesLanguageAttribute("en")]
public class Example
{
public static void Main()
{
string fmtString = String.Empty;
ResourceManager rm = new ResourceManager("UIResources", typeof(Example).Assembly);
string title = rm.GetString("TableName");
PersonTable tableInfo = (PersonTable) rm.GetObject("Employees");
if (! String.IsNullOrEmpty(title)) {
fmtString = "{0," + ((Console.WindowWidth + title.Length) / 2).ToString() + "}";
Console.WriteLine(fmtString, title);
Console.WriteLine();
}
for (int ctr = 1; ctr <= tableInfo.nColumns; ctr++) {
string columnName = "column" + ctr.ToString();
string widthName = "width" + ctr.ToString();
string value = tableInfo.GetType().GetField(columnName).GetValue(tableInfo).ToString();
int width = (int) tableInfo.GetType().GetField(widthName).GetValue(tableInfo);
fmtString = "{0,-" + width.ToString() + "}";
Console.Write(fmtString, value);
}
Console.WriteLine();
}
}
Imports System.Resources
<Assembly: NeutralResourcesLanguageAttribute("en")>
Module Example
Public Sub Main()
Dim fmtString As String = String.Empty
Dim rm As New ResourceManager("UIResources", GetType(Example).Assembly)
Dim title As String = rm.GetString("TableName")
Dim tableInfo As PersonTable = DirectCast(rm.GetObject("Employees"), PersonTable)
If Not String.IsNullOrEmpty(title) Then
fmtString = "{0," + ((Console.WindowWidth + title.Length) \ 2).ToString() + "}"
Console.WriteLine(fmtString, title)
Console.WriteLine()
End If
For ctr As Integer = 1 To tableInfo.nColumns
Dim columnName As String = "column" + ctr.ToString()
Dim widthName As String = "width" + ctr.ToString()
Dim value As String = CStr(tableInfo.GetType().GetField(columnName).GetValue(tableInfo))
Dim width As Integer = CInt(tableInfo.GetType().GetField(widthName).GetValue(tableInfo))
fmtString = "{0,-" + width.ToString() + "}"
Console.Write(fmtString, value)
Next
Console.WriteLine()
End Sub
End Module
Aşağıdaki toplu iş dosyasını yürüterek gerekli kaynak dosyasını ve derlemeleri derleyebilir ve uygulamayı çalıştırabilirsiniz. Resgen.exe'ın, /r yapısı hakkındaki bilgilere erişebilmesi için UIElements.dll'e bir başvuru sağlamak amacıyla PersonTable seçeneğini kullanmanız gerekir. C# kullanıyorsanız, vbc derleyici adını csc ile değiştirin ve .vb uzantısını .cs ile değiştirin.
vbc -t:library UIElements.vb
vbc CreateResources.vb -r:UIElements.dll
CreateResources
resgen UIResources.resx -r:UIElements.dll
vbc GetObject.vb -r:UIElements.dll -resource:UIResources.resources
GetObject.exe
Uydu derlemeleri için sürüm desteği
Varsayılan olarak, ResourceManager nesne istenen kaynakları aldığında, ana derlemenin sürüm numarasıyla eşleşen sürüm numaralarına sahip uydu derlemelerini arar. Bir uygulamayı dağıttıktan sonra ana derlemeyi veya belirli kaynak uydu derlemelerini güncelleştirmek isteyebilirsiniz. .NET Framework, ana derlemenin ve uydu derlemelerinin sürümü için destek sağlar.
özniteliği, SatelliteContractVersionAttribute ana derleme için sürüm oluşturma desteği sağlar. Bir uygulamanın ana derlemesinde bu özniteliğin belirtilmesi, uydu derlemelerini güncelleştirmeden bir ana derlemeyi güncelleştirmenize ve yeniden dağıtmanıza olanak tanır. Ana derlemeyi güncelleştirdikten sonra ana derlemenin sürüm numarasını artırıp uydu sözleşmesi sürüm numarasını değiştirmeden bırakın. Kaynak yöneticisi istenen kaynakları aldığında, bu öznitelik tarafından belirtilen uydu derleme sürümünü yükler.
Yayıncı politika derlemeleri, uydu derlemelerinin sürümlendirilmesine destek sağlar. Ana derlemeyi güncelleştirmeden bir uydu derlemesini güncelleştirebilir ve yeniden dağıtabilirsiniz. Bir uydu derlemesini güncelledikten sonra, sürüm numarasını artırın ve yayımcı ilke derlemesiyle birlikte teslim edin. Yayıncı politikası derlemesinde, yeni uydu derlemenizin önceki sürümüyle geriye dönük olarak uyumlu olduğunu belirtmelisiniz. Kaynak yöneticisi, uydu derlemesinin sürümünü belirlemek için özniteliğini kullanır SatelliteContractVersionAttribute , ancak derleme yükleyicisi yayımcı ilkesi tarafından belirtilen uydu derleme sürümüne bağlanır. Yayımcı ilkesi derlemeleri hakkında daha fazla bilgi için bkz. Yayımcı ilkesi dosyası oluşturma.
Tam derleme sürümü desteğini etkinleştirmek için, genel derleme önbelleğinde güçlü adlara sahip derlemeleri ve uygulama dizininde güçlü adlara sahip olmayan derlemeleri dağıtmanızı öneririz. Uygulama dizininde güçlü adlandırılmış derlemeler dağıtmak istiyorsanız, derlemeyi güncellediğinizde uydu derlemesinin sürüm numarasını artıramazsınız. Bunun yerine, mevcut kodu güncelleştirilmiş kodla değiştirdiğiniz ve aynı sürüm numarasını koruyabileceğiniz yerinde bir güncelleştirme gerçekleştirmeniz gerekir. Örneğin, "myApp.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=b03f5f11d50a3a" şeklinde tam olarak belirtilmiş derleme adına sahip uydu derlemesinin 1.0.0.0 sürümünü güncellemek istiyorsanız, aynı tam derleme adıyla derlenmiş güncellenmiş myApp.resources.dll ile üzerine yazın. Uydu derleme dosyalarında yerinde güncelleştirmelerin kullanılması, bir uygulamanın uydu derlemesinin sürümünü doğru bir şekilde belirlemesini zorlaştırdığını unutmayın.
Derleme sürümü oluşturma hakkında daha fazla bilgi için bkz. Derleme sürümü oluşturma ve Çalışma Zamanı derlemeleri nasıl bulur?
.resources Dosyaları'ndan kaynakları alma
Kaynakları uydu derlemelerinde dağıtmamayı seçerseniz, .resources dosyalarındaki kaynaklara doğrudan erişmek için bir ResourceManager nesnesi kullanmaya devam edebilirsiniz. Bunu yapmak için .resources dosyalarını doğru bir şekilde dağıtmanız gerekir. Ardından yöntemini kullanarak ResourceManager.CreateFileBasedResourceManager bir ResourceManager nesne örneği oluşturur ve tek başına .resources dosyalarını içeren dizini belirtirsiniz.
.resources Dosyalarını Dağıtma
.resources dosyalarını bir uygulama derlemesine ve uydu derlemelerine eklediğinizde, her uydu derlemesi aynı dosya adına sahiptir, ancak uydu derlemesinin kültürünü yansıtan bir alt dizine yerleştirilir. Buna karşılık, .resources dosyalarındaki kaynaklara doğrudan eriştiğinizde, tüm .resources dosyalarını tek bir dizine( genellikle uygulama dizininin bir alt dizinine) yerleştirebilirsiniz. Uygulamanın varsayılan .resources dosyasının adı yalnızca kök adından oluşur ve kültürüne dair hiçbir gösterge yoktur (örneğin, strings.resources). Her yerelleştirilmiş kültürün kaynakları, adı kök adından ve ardından kültürden oluşan bir dosyada depolanır (örneğin, strings.ja.resources veya dizeler.de-DE.resources).
Aşağıdaki çizimde, kaynak dosyalarının dizin yapısında nerede bulunması gerektiği gösterilmektedir. Ayrıca .resource dosyaları için adlandırma kuralları da sağlar.
Kaynak yöneticisini kullanma
Kaynaklarınızı oluşturup uygun dizine yerleştirdikten sonra yöntemini çağırarak ResourceManager kaynakları kullanmak için bir CreateFileBasedResourceManager(String, String, Type) nesne oluşturursunuz. İlk parametre, uygulamanın varsayılan .resources dosyasının kök adını belirtir (bu, önceki bölümdeki örnekteki "dizeler" olacaktır). İkinci parametre, kaynakların konumunu belirtir ("Kaynaklar" önceki örnekte). Üçüncü parametre kullanılacak uygulamayı belirtir ResourceSet . Üçüncü parametre ise null, varsayılan çalışma zamanı ResourceSet kullanılır.
Uyarı
Tek başına .resources dosyalarını kullanarak ASP.NET uygulamaları dağıtmayın. Bu, kilitleme sorunlarına neden olabilir ve XCOPY dağıtımlarını bozabilir. ASP.NET kaynaklarını uydu derlemelerine dağıtmanızı öneririz. Daha fazla bilgi için bkz. ASP.NET Web Sayfası Kaynaklarına Genel Bakış.
Nesnesin örneğini ResourceManager oluşturduktan sonra, daha önce açıklandığı gibi, kaynakları almak için GetString, GetObject ve GetStream yöntemlerini kullanırsınız. Ancak, kaynakların doğrudan .resources dosyalarından alınması, katıştırılmış kaynakların derlemelerden alınmasından farklıdır. .resources dosyalarından kaynak aldığınızda, GetString(String), GetObject(String)ve GetStream(String) yöntemleri her zaman geçerli kültürden bağımsız olarak varsayılan kültürün kaynaklarını alır. Uygulamanın geçerli kültürünün veya belirli bir kültürün kaynaklarını almak için , GetString(String, CultureInfo)veya GetObject(String, CultureInfo) yöntemini çağırmanız GetStream(String, CultureInfo)ve kaynakları alınacak olan kültürü belirtmeniz gerekir. Geçerli kültürün kaynaklarını almak için CultureInfo.CurrentCulture özelliğini bağımsız değişken olarak belirterek culture değerini belirtin. Kaynak yöneticisi, culture kaynakları alamıyorsa, uygun kaynakları almak için standart kaynak geri dönüş kurallarını kullanır.
Bir örnek
Aşağıdaki örnekte, kaynak yöneticisinin kaynakları doğrudan .resources dosyalarından nasıl aldýðý gösterilmektedir. Örnek, İngilizce (ABD), Fransızca (Fransa) ve Rusça (Rusya) kültürleri için metin tabanlı üç kaynak dosyadan oluşur. İngilizce (ABD), örneğin varsayılan kültürüdür. Kaynakları Strings.txtadlı aşağıdaki dosyada depolanır:
Greeting=Hello
Prompt=What is your name?
Fransızca (Fransa) kültürünün kaynakları, Strings.fr-FR.txtadlı aşağıdaki dosyada depolanır:
Greeting=Bon jour
Prompt=Comment vous appelez-vous?
Rus (Rusya) kültürünün kaynakları, Strings.ru-RU.txtadlı aşağıdaki dosyada depolanır:
Greeting=Здравствуйте
Prompt=Как вас зовут?
Aşağıda, örneğin kaynak kodu verilmiştir. Örnek, İngilizce (ABD), İngilizce (Kanada), Fransızca (Fransa) ve Rusça (Rusya) kültürlerine ait CultureInfo nesneleri oluşturur ve her birini geçerli kültür olarak ayarlar. Yöntemi ResourceManager.GetString(String, CultureInfo), uygun kültüre özgü kaynakları almak için CultureInfo.CurrentCulture özelliğinin değerini culture bağımsız değişkeni olarak sağlar.
using System;
using System.Globalization;
using System.Resources;
using System.Threading;
[assembly: NeutralResourcesLanguage("en-US")]
public class Example
{
public static void Main()
{
string[] cultureNames = { "en-US", "en-CA", "ru-RU", "fr-FR" };
ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("Strings", "Resources", null);
foreach (var cultureName in cultureNames) {
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);
string greeting = rm.GetString("Greeting", CultureInfo.CurrentCulture);
Console.WriteLine($"\n{greeting}!");
Console.Write(rm.GetString("Prompt", CultureInfo.CurrentCulture));
string name = Console.ReadLine();
if (! String.IsNullOrEmpty(name))
Console.WriteLine("{0}, {1}!", greeting, name);
}
Console.WriteLine();
}
}
// The example displays output like the following:
// Hello!
// What is your name? Dakota
// Hello, Dakota!
//
// Hello!
// What is your name? Koani
// Hello, Koani!
//
// Здравствуйте!
// Как вас зовут?Samuel
// Здравствуйте, Samuel!
//
// Bon jour!
// Comment vous appelez-vous?Yiska
// Bon jour, Yiska!
Imports System.Globalization
Imports System.Resources
Imports System.Threading
<Assembly: NeutralResourcesLanguageAttribute("en-US")>
Module Example
Public Sub Main()
Dim cultureNames() As String = {"en-US", "en-CA", "ru-RU", "fr-FR"}
Dim rm As ResourceManager = ResourceManager.CreateFileBasedResourceManager("Strings", "Resources", Nothing)
For Each cultureName In cultureNames
Console.WriteLine()
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName)
Dim greeting As String = rm.GetString("Greeting", CultureInfo.CurrentCulture)
Console.WriteLine("{0}!", greeting)
Console.Write(rm.GetString("Prompt", CultureInfo.CurrentCulture))
Dim name As String = Console.ReadLine()
If Not String.IsNullOrEmpty(name) Then
Console.WriteLine("{0}, {1}!", greeting, name)
End If
Next
Console.WriteLine()
End Sub
End Module
' The example displays output like the following:
' Hello!
' What is your name? Dakota
' Hello, Dakota!
'
' Hello!
' What is your name? Koani
' Hello, Koani!
'
' Здравствуйте!
' Как вас зовут?Samuel
' Здравствуйте, Samuel!
'
' Bon jour!
' Comment vous appelez-vous?Yiska
' Bon jour, Yiska!
Aşağıdaki toplu iş dosyasını çalıştırarak örneğin C# sürümünü derleyebilirsiniz. Visual Basic kullanıyorsanız, öğesini csc ile vbcdeğiştirin ve uzantısını .cs ile .vbdeğiştirin.
md Resources
resgen Strings.txt Resources\Strings.resources
resgen Strings.fr-FR.txt Resources\Strings.fr-FR.resources
resgen Strings.ru-RU.txt Resources\Strings.ru-RU.resources
csc Example.cs