CultureInfo sınıfı

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

CultureInfo sınıfı dil, alt dil, ülke/bölge, takvim ve belirli bir kültürle ilişkili kurallar gibi kültüre özgü bilgiler sağlar. Bu sınıf, , , NumberFormatInfoCompareInfove TextInfo nesnelerinin kültüre özgü örneklerine DateTimeFormatInfode erişim sağlar. Bu nesneler büyük/küçük harf kullanımı, tarihleri ve sayıları biçimlendirme ve dizeleri karşılaştırma gibi kültüre özgü işlemler için gereken bilgileri içerir. sınıfıCultureInfo, , DateTime, DateTimeOffsetve sayısal türler gibi kültüre özgü verileri biçimlendiren, ayrıştıran veya işleyen sınıflar tarafından doğrudan veya dolaylı olarak Stringkullanılır.

Kültür adları ve tanımlayıcıları

sınıfı, CultureInfo RFC 4646'yı temel alarak her kültür için benzersiz bir ad belirtir. Ad, bir dille ilişkili ISO 639 iki harfli veya üç harfli küçük harfli kültür kodunun ve bir ülke veya bölgeyle ilişkili ISO 3166 iki harfli büyük harfli alt kültür kodunun birleşimidir. Buna ek olarak, Windows 10 veya üzeri altında çalışan uygulamalar için geçerli BCP-47 dil etiketlerine karşılık gelen kültür adları desteklenir.

Not

Bir kültür adı bir sınıf oluşturucuya veya veya gibi CreateSpecificCultureCultureInfobir yönteme geçirildiğinde, büyük/küçük harf önemli değildir.

RFC 4646'yı temel alan kültür adının biçimi, languagecode2-country/regioncode2burada languagecode2 iki harfli dil kodudur ve country/regioncode2 iki harfli alt kültür kodudur. Japonca (Japonya) ve en-US İngilizce (Birleşik Devletler) örnekleri verilebilirja-JP. İki harfli dil kodunun kullanılamadığı durumlarda ISO 639-3'te tanımlanan üç harfli kod kullanılır.

Bazı kültür adları bir ISO 15924 betiği de belirtir. Örneğin, Cyrl Kiril betiğini, Latn ise Latin betiğini belirtir. Betik içeren bir kültür adı desenini languagecode2--scripttagcountry/regioncode2kullanır. Özbekçe (Kiril, Özbekistan) için bu tür bir kültür adı örneğidir uz-Cyrl-UZ . Windows Vista'dan önceki Windows işletim sistemlerinde, betik içeren bir kültür adı, örneğin Özbekçe (Kiril, Özbekistan) için desenini languagecode2--country/regioncode2scripttagkullanır. uz-UZ-Cyrl

Nötr bir kültür yalnızca iki harfli, küçük harfli dil kodu tarafından belirtilir. Örneğin, fr Fransızca için nötr kültürü belirtir ve de Almanca için nötr kültürü belirtir.

Not

Bu kuralla çelişen iki kültür adı vardır. Çince (Basitleştirilmiş), adlı zh-Hansve Çince (Geleneksel), adlı zh-Hantkültürler nötr kültürlerdir. Kültür adları geçerli standardı temsil eden ve ve eski adları zh-CHSzh-CHTkullanmak için bir nedeniniz olmadığı sürece kullanılmalıdır.

Kültür tanımlayıcısı standart bir uluslararası sayısal kısaltmadır ve yüklü kültürlerden birini benzersiz olarak tanımlamak için gerekli bileşenlere sahiptir. Uygulamanız önceden tanımlanmış kültür tanımlayıcıları kullanabilir veya özel tanımlayıcılar tanımlayabilir.

Önceden tanımlanmış bazı kültür adları ve tanımlayıcıları ad alanında System.Globalization bu ve diğer sınıflar tarafından kullanılır. Windows sistemleriyle ilgili ayrıntılı kültür bilgileri için, Windows tarafından desteklenen dil/bölge adları listesindeki Dil etiketi sütununa bakın. Kültür adları BCP 47 tarafından tanımlanan standarda uyar.

Kültür adları ve tanımlayıcıları, belirli bir bilgisayarda bulunabilen kültürlerin yalnızca bir alt kümesini temsil eder. Windows sürümleri veya hizmet paketleri kullanılabilir kültürleri değiştirebilir. Uygulamalar sınıfını CultureAndRegionInfoBuilder kullanarak özel kültürler ekleyebilir. Kullanıcılar, Microsoft Locale Builder aracını kullanarak kendi özel kültürlerini ekleyebilir. Microsoft Locale Builder, sınıfı kullanılarak yönetilen kodda CultureAndRegionInfoBuilder yazılır.

Birkaç farklı ad, özellikle aşağıdaki sınıf üyeleriyle ilişkili adlar olmak üzere bir kültürle yakından ilişkilidir:

Sabit, nötr ve belirli kültürler

Kültürler genellikle üç küme halinde gruplandırılır: sabit kültürler, nötr kültürler ve belirli kültürler.

Sabit bir kültür kültüre duyarsızdır. Uygulamanız sabit kültürü boş bir dize ("") kullanarak ada veya tanımlayıcısına göre belirtir. InvariantCulture sabit kültürün bir örneğini tanımlar. İngilizce diliyle ilişkilendirilir, ancak herhangi bir ülke/bölgeyle ilişkilendirilmemiştir. Ad alanında kültür gerektiren hemen her yöntemde Globalization kullanılır.

Tarafsız bir kültür, bir dille ilişkili olan ancak ülke/bölgeyle ilişkili olmayan bir kültürdür. Belirli bir kültür, bir dil ve ülke/bölge ile ilişkili bir kültürdür. Örneğin, fr Fransız kültürünün nötr adıdır ve fr-FR belirli Bir Fransız (Fransa) kültürünün adıdır. Çince (Basitleştirilmiş) ve Çince (Geleneksel) de nötr kültürler olarak kabul edilir.

İçerdiği CompareInfo veriler rastgele olduğundan, nötr bir kültür için bir sınıfın örneği oluşturulması önerilmez. Verileri görüntülemek ve sıralamak için hem dili hem de bölgeyi belirtin. Ayrıca, Name tarafsız bir kültür için oluşturulan bir CompareInfo nesnenin özelliği yalnızca ülkeyi döndürür ve bölgeyi içermez.

Tanımlanan kültürler, belirli bir kültürün üst öğesinin nötr bir kültür olduğu ve nötr kültürün üst öğesinin sabit kültür olduğu bir hiyerarşiye sahiptir. özelliği, Parent belirli bir kültürle ilişkili nötr kültürü içerir. Özel kültürler özelliği bu desene uygun olarak tanımlamalıdır Parent .

Belirli bir kültürün kaynakları işletim sisteminde kullanılamıyorsa, ilişkili nötr kültürün kaynakları kullanılır. Nötr kültürün kaynakları kullanılamıyorsa, ana derlemeye katıştırılmış kaynaklar kullanılır. Kaynak geri dönüş işlemi hakkında daha fazla bilgi için bkz . Kaynakları Paketleme ve Dağıtma.

Windows API'sindeki yerel ayarlar listesi, .NET tarafından desteklenen kültürler listesinden biraz farklıdır. Örneğin p/invoke mekanizması aracılığıyla Windows ile birlikte çalışabilirlik gerekiyorsa, uygulama işletim sistemi için tanımlanan belirli bir kültürü kullanmalıdır. Belirli bir kültürün kullanılması, ile aynı LCIDyerel ayar tanımlayıcısıyla tanımlanan eşdeğer Windows yerel ayarıyla tutarlılık sağlar.

A DateTimeFormatInfo veya a NumberFormatInfo yalnızca sabit kültür için veya belirli kültürler için oluşturulabilir, nötr kültürler için oluşturulmaz.

ise DateTimeFormatInfo.CalendarTaiwanCalendar ancak Thread.CurrentCulture değeri olarak ayarlanmadıysa zh-TW, , DateTimeFormatInfo.NativeCalendarNameDateTimeFormatInfo.GetEraNameve DateTimeFormatInfo.GetAbbreviatedEraName boş bir dize ("") döndürür.

Özel kültürler

Windows'da özel yerel ayarlar oluşturabilirsiniz. Daha fazla bilgi için bkz . Özel yerel ayarlar.

CultureInfo ve kültürel veriler

.NET, kültürel verilerini uygulama, platform ve sürüme bağlı olarak çeşitli kaynaklardan türetir:

  • Unix platformlarında veya Windows 10 ve sonraki sürümlerde çalışan tüm .NET (Core) sürümlerinde, kültürel veriler Unicode için Uluslararası Bileşenler (ICU) Kitaplığı tarafından sağlanır. ICU Kitaplığı'nın belirli sürümü tek tek işletim sistemine bağlıdır.
  • Windows 9 ve önceki sürümlerde çalışan tüm .NET (Core) sürümlerinde, kültürel veriler Windows işletim sistemi tarafından sağlanır.
  • .NET Framework 4 ve sonraki sürümlerinde, kültürel veriler Windows işletim sistemi tarafından sağlanır.

Bu nedenle, belirli bir .NET uygulamasında, platformunda veya sürümünde kullanılabilen bir kültür farklı bir .NET uygulamasında, platformunda veya sürümünde kullanılamayabilir.

Bazı CultureInfo nesneler, temel alınan platforma bağlı olarak farklılık gösterir. Özellikle, zh-CN, veya Çince (Basitleştirilmiş, Çin) ve zh-TWveya Çince (Geleneksel, Tayvan), Windows sistemlerinde kullanılabilir kültürlerdir, ancak Unix sistemlerinde diğer adı geçen kültürlerdir. "zh-CN", "zh-Hans-CN" kültürünün diğer adıdır ve "zh-TW", "zh-Hant-TW" kültürünün diğer adıdır. Diğer adlara sahip kültürler yöntemine GetCultures yapılan çağrılar tarafından döndürülmüyor ve farklı kültürler de dahil olmak üzere Windows karşılık gelenlerinden farklı Parent özellik değerlerine sahip olabilir. zh-CN ve zh-TW kültürleri için bu farklar aşağıdakileri içerir:

  • Windows sistemlerinde, "zh-CN" kültürünün üst kültürü "zh-Hans" ve "zh-TW" kültürünün üst kültürü "zh-Hant"tır. Her iki kültürün de üst kültürü "zh"dir. Unix sistemlerinde her iki kültürün de ana ailesi "zh"tir. Bu, "zh-CN" veya "zh-TW" kültürleri için kültüre özgü kaynaklar sağlamaz ancak nötr "zh-Hans" veya "zh-Hant" kültürü için bir kaynak sağlarsanız uygulamanızın Windows'ta nötr kültüre yönelik kaynakları yükleyeceği ancak Unix'te yükleymediği anlamına gelir. Unix sistemlerinde, iş parçacığını CurrentUICulture açıkça "zh-Hans" veya "zh-Hant" olarak ayarlamanız gerekir.

  • Windows sistemlerinde, "zh-CN" kültürünü temsil eden bir örneği çağırıp CultureInfo.Equals "zh-Hans-CN" örneğini geçirerek döndürür true. Unix sistemlerinde yöntem çağrısı döndürür false. Bu davranış, "zh-TW" örneğini çağırmak Equals ve "zh-Hant-Tw" CultureInfo örneğini geçirmek için de geçerlidir.

Dinamik kültür verileri

Sabit kültür dışında, kültür verileri dinamiktir. Bu, önceden tanımlanmış kültürler için bile geçerlidir. Örneğin, ülkeler veya bölgeler yeni para birimleri benimser, sözcüklerin yazımını değiştirir veya tercih ettikleri takvimi değiştirir ve kültür tanımları bunu izlemek için değişir. Özel kültürler bildirimde bulunmaksızın değiştirilebilir ve belirli bir kültür özel değiştirme kültürü tarafından geçersiz kılınabilir. Ayrıca, aşağıda açıklandığı gibi, bireysel bir kullanıcı kültürel tercihleri geçersiz kılabilir. Uygulamalar her zaman çalışma zamanında kültür verilerini almalıdır.

Dikkat

Veri kaydederken uygulamanız sabit kültürü, ikili biçimi veya kültürden bağımsız belirli bir biçimi kullanmalıdır. Sabit kültür dışında belirli bir kültürle ilişkili geçerli değerlere göre kaydedilen veriler okunamaz hale gelebilir veya kültür değişirse anlam olarak değişebilir.

Geçerli kültür ve geçerli kullanıcı arabirimi kültürü

Bir .NET uygulamasındaki her iş parçacığının geçerli bir kültürü ve geçerli kullanıcı arabirimi kültürü vardır. Geçerli kültür tarihler, saatler, sayılar ve para birimi değerleri için biçimlendirme kurallarını, metnin sıralama düzenini, büyük/küçük harf kurallarını ve dizelerin karşılaştırıldığı yolları belirler. Geçerli kullanıcı arabirimi kültürü, çalışma zamanında kültüre özgü kaynakları almak için kullanılır.

Not

Geçerli ve geçerli kullanıcı arabirimi kültürünün iş parçacığı başına nasıl belirlendiği hakkında bilgi için Kültür ve iş parçacıkları bölümüne bakın. Geçerli ve geçerli kullanıcı arabirimi kültürünün yeni bir uygulama etki alanında yürütülen iş parçacıklarında ve uygulama etki alanı sınırlarını aşan iş parçacıklarında nasıl belirlendiği hakkında bilgi için Kültür ve uygulama etki alanları bölümüne bakın. Geçerli ve geçerli kullanıcı arabirimi kültürünün görev tabanlı zaman uyumsuz işlemler gerçekleştiren iş parçacıklarında nasıl belirlendiği hakkında bilgi için Kültür ve görev tabanlı zaman uyumsuz işlemler bölümüne bakın.

Geçerli kültür hakkında daha ayrıntılı bilgi için özelliğine CultureInfo.CurrentCulture bakın. Geçerli kullanıcı arabirimi kültürü hakkında daha ayrıntılı bilgi için özellik konusuna CultureInfo.CurrentUICulture bakın.

Geçerli ve geçerli kullanıcı arabirimi kültürlerini alma

Geçerli kültürü temsil eden bir CultureInfo nesneyi iki yoldan biriyle alabilirsiniz:

Aşağıdaki örnek her iki özellik değerini de alır, eşit olduklarını gösterecek şekilde karşılaştırır ve geçerli kültürün adını görüntüler.

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

public class CurrentCultureEx
{
    public static void Main()
    {
        CultureInfo culture1 = CultureInfo.CurrentCulture;
        CultureInfo culture2 = Thread.CurrentThread.CurrentCulture;
        Console.WriteLine("The current culture is {0}", culture1.Name);
        Console.WriteLine("The two CultureInfo objects are equal: {0}",
                          culture1 == culture2);
    }
}
// The example displays output like the following:
//     The current culture is en-US
//     The two CultureInfo objects are equal: True

Geçerli kullanıcı arabirimi kültürünü temsil eden bir CultureInfo nesneyi iki yoldan biriyle alabilirsiniz:

Aşağıdaki örnek her iki özellik değerini de alır, eşit olduklarını gösterecek şekilde karşılaştırır ve geçerli ui kültürünün adını görüntüler.

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

public class CurrentUIEx
{
    public static void Main()
    {
        CultureInfo uiCulture1 = CultureInfo.CurrentUICulture;
        CultureInfo uiCulture2 = Thread.CurrentThread.CurrentUICulture;
        Console.WriteLine("The current UI culture is {0}", uiCulture1.Name);
        Console.WriteLine("The two CultureInfo objects are equal: {0}",
                          uiCulture1 == uiCulture2);
    }
}
// The example displays output like the following:
//     The current UI culture is en-US
//     The two CultureInfo objects are equal: True

Geçerli ve geçerli kullanıcı arabirimi kültürlerini ayarlama

Bir iş parçacığının kültürünü ve ui kültürünü değiştirmek için aşağıdakileri yapın:

  1. CultureInfo Bir sınıf oluşturucusu çağırıp kültürün adını geçirerek bu kültürü temsil eden bir CultureInfo nesne örneği oluşturma. Oluşturucu, CultureInfo(String) yeni kültür geçerli Windows kültürüyle aynıysa kullanıcı geçersiz kılmalarını yansıtan bir CultureInfo nesnenin örneğini oluşturur. Oluşturucu, CultureInfo(String, Boolean) yeni örneklediğiniz CultureInfo nesnenin, yeni kültür geçerli Windows kültürüyle aynıysa kullanıcı geçersiz kılmalarını yansıtıp yansıtmayacağını belirtmenize olanak tanır.

  2. CultureInfo nesnesini CultureInfo.CurrentCulture .NET Core ve .NET Framework 4.6 ve sonraki sürümlerde veya CultureInfo.CurrentUICulture özelliğine atayın.

Aşağıdaki örnek geçerli kültürü alır. Fransız (Fransa) kültürü dışında bir şey ise, mevcut kültürü Fransızca (Fransa) olarak değiştirir. Aksi takdirde, geçerli kültürü Fransızca (Lüksemburg) olarak değiştirir.

using System;
using System.Globalization;

public class ChangeEx1
{
    public static void Main()
    {
        CultureInfo current = CultureInfo.CurrentCulture;
        Console.WriteLine("The current culture is {0}", current.Name);
        CultureInfo newCulture;
        if (current.Name.Equals("fr-FR"))
            newCulture = new CultureInfo("fr-LU");
        else
            newCulture = new CultureInfo("fr-FR");

        CultureInfo.CurrentCulture = newCulture;
        Console.WriteLine("The current culture is now {0}",
                          CultureInfo.CurrentCulture.Name);
    }
}
// The example displays output like the following:
//     The current culture is en-US
//     The current culture is now fr-FR

Aşağıdaki örnek geçerli kültürü alır. Slovence (Slovenya) kültüründen başka bir şeyse, mevcut kültürü Slovence (Slovenya) olarak değiştirir. Aksi takdirde, mevcut kültürü Hırvatçe (Hırvatistan) olarak değiştirir.

using System;
using System.Globalization;

public class ChangeUICultureEx
{
    public static void Main()
    {
        CultureInfo current = CultureInfo.CurrentUICulture;
        Console.WriteLine("The current UI culture is {0}", current.Name);
        CultureInfo newUICulture;
        if (current.Name.Equals("sl-SI"))
            newUICulture = new CultureInfo("hr-HR");
        else
            newUICulture = new CultureInfo("sl-SI");

        CultureInfo.CurrentUICulture = newUICulture;
        Console.WriteLine("The current UI culture is now {0}",
                          CultureInfo.CurrentUICulture.Name);
    }
}
// The example displays output like the following:
//     The current UI culture is en-US
//     The current UI culture is now sl-SI

Tüm kültürleri alma

yöntemini çağırarak GetCultures belirli kültür kategorilerinden veya yerel bilgisayarda bulunan tüm kültürlerden oluşan bir dizi alabilirsiniz. Örneğin, özel kültürleri, belirli kültürleri veya nötr kültürleri tek başına veya birlikte alabilirsiniz.

Aşağıdaki örnek, önce tüm özel kültürleri almak için numaralandırma üyesiyle System.Globalization.CultureTypes ve ardından tüm değiştirme kültürlerini almak için numaralandırma üyesiyle yöntemi System.Globalization.CultureTypes iki kez çağırırGetCultures.

using System;
using System.Globalization;

public class GetCulturesEx
{
    public static void Main()
    {
        // Get all custom cultures.
        CultureInfo[] custom = CultureInfo.GetCultures(CultureTypes.UserCustomCulture);
        if (custom.Length == 0)
        {
            Console.WriteLine("There are no user-defined custom cultures.");
        }
        else
        {
            Console.WriteLine("Custom cultures:");
            foreach (var culture in custom)
                Console.WriteLine("   {0} -- {1}", culture.Name, culture.DisplayName);
        }
        Console.WriteLine();

        // Get all replacement cultures.
        CultureInfo[] replacements = CultureInfo.GetCultures(CultureTypes.ReplacementCultures);
        if (replacements.Length == 0)
        {
            Console.WriteLine("There are no replacement cultures.");
        }
        else
        {
            Console.WriteLine("Replacement cultures:");
            foreach (var culture in replacements)
                Console.WriteLine("   {0} -- {1}", culture.Name, culture.DisplayName);
        }
        Console.WriteLine();
    }
}
// The example displays output like the following:
//     Custom cultures:
//        x-en-US-sample -- English (United States)
//        fj-FJ -- Boumaa Fijian (Viti)
//
//     There are no replacement cultures.

Kültür ve iş parçacıkları

Yeni bir uygulama iş parçacığı başlatıldığında, geçerli kültürü ve geçerli ui kültürü geçerli iş parçacığı kültürü tarafından değil, geçerli sistem kültürü tarafından tanımlanır. Aşağıdaki örnekte fark gösterilmektedir. Bir uygulama iş parçacığının geçerli kültürünü ve geçerli kullanıcı arabirimi kültürünü Fransızca (Fransa) kültürüne (fr-FR) ayarlar. Geçerli kültür zaten fr-FR ise, örnek bunu İngilizce (Birleşik Devletler) kültürüne (en-US) ayarlar. Para birimi değerleri olarak üç rastgele sayı görüntüler ve ardından yeni bir iş parçacığı oluşturur ve bu da para birimi değerleri olarak üç rastgele sayı daha görüntüler. Ancak örnekte gösterildiği gibi, yeni iş parçacığı tarafından görüntülenen para birimi değerleri, ana uygulama iş parçacığından elde edilen çıkışın aksine Fransızca (Fransa) kültürünün biçimlendirme kurallarını yansıtmaz.

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

public class DefaultThreadEx
{
    static Random rnd = new Random();

    public static void Main()
    {
        if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR")
        {
            // If current culture is not fr-FR, set culture to fr-FR.
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        }
        else
        {
            // Set culture to en-US.
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
        }
        ThreadProc();

        Thread worker = new Thread(ThreadProc);
        worker.Name = "WorkerThread";
        worker.Start();
    }

    private static void DisplayThreadInfo()
    {
        Console.WriteLine("\nCurrent Thread Name: '{0}'",
                          Thread.CurrentThread.Name);
        Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}",
                          Thread.CurrentThread.CurrentCulture.Name,
                          Thread.CurrentThread.CurrentUICulture.Name);
    }

    private static void DisplayValues()
    {
        // Create new thread and display three random numbers.
        Console.WriteLine("Some currency values:");
        for (int ctr = 0; ctr <= 3; ctr++)
            Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);
    }

    private static void ThreadProc()
    {
        DisplayThreadInfo();
        DisplayValues();
    }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          8,11 €
//          1,48 €
//          8,99 €
//          9,04 €
//
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: en-US/en-US
//       Some currency values:
//          $6.72
//          $6.35
//          $2.90
//          $7.72

ve özelliklerine bu kültürü temsil eden bir CultureInfo nesne atayarak bir uygulama etki alanındaki tüm iş parçacıklarının DefaultThreadCurrentCulture kültür ve DefaultThreadCurrentUICulture kullanıcı arabirimi kültürünü ayarlayabilirsiniz. Aşağıdaki örnek, varsayılan uygulama etki alanındaki tüm iş parçacıklarının aynı kültürü paylaştığından emin olmak için bu özellikleri kullanır.

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

public class SetThreadsEx
{
    static Random rnd = new Random();

    public static void Main()
    {
        if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR")
        {
            // If current culture is not fr-FR, set culture to fr-FR.
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
            CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        }
        else
        {
            // Set culture to en-US.
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
            CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
        }
        ThreadProc();

        Thread worker = new Thread(SetThreadsEx.ThreadProc);
        worker.Name = "WorkerThread";
        worker.Start();
    }

    private static void DisplayThreadInfo()
    {
        Console.WriteLine("\nCurrent Thread Name: '{0}'",
                          Thread.CurrentThread.Name);
        Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}",
                          Thread.CurrentThread.CurrentCulture.Name,
                          Thread.CurrentThread.CurrentUICulture.Name);
    }

    private static void DisplayValues()
    {
        // Create new thread and display three random numbers.
        Console.WriteLine("Some currency values:");
        for (int ctr = 0; ctr <= 3; ctr++)
            Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);
    }

    private static void ThreadProc()
    {
        DisplayThreadInfo();
        DisplayValues();
    }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          6,83 €
//          3,47 €
//          6,07 €
//          1,70 €
//
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          9,54 €
//          9,50 €
//          0,58 €
//          6,91 €

Uyarı

ve DefaultThreadCurrentUICulture özellikleri statik üyeler olsa DefaultThreadCurrentCulture da, varsayılan kültürü ve varsayılan kullanıcı arabirimi kültürünü yalnızca bu özellik değerlerinin ayarlandığı sırada geçerli olan uygulama etki alanı için tanımlar. Daha fazla bilgi için kültür ve uygulama etki alanları başlıklı sonraki bölüme bakın.

ve DefaultThreadCurrentUICulture özelliklerine DefaultThreadCurrentCulture değer atadığınızda, uygulama etki alanındaki iş parçacıklarının kültürü ve ui kültürü de açıkça bir kültür atanmamışsa değişir. Ancak, bu iş parçacıkları yeni kültür ayarlarını yalnızca geçerli uygulama etki alanında yürütürken yansıtır. Bu iş parçacıkları başka bir uygulama etki alanında yürütülürse, kültürleri söz konusu uygulama etki alanı için tanımlanan varsayılan kültür olur. Sonuç olarak, ana uygulama iş parçacığının kültürünü her zaman ayarlamanız ve değiştirmek için ve DefaultThreadCurrentUICulture özelliklerine DefaultThreadCurrentCulture güvenmemenizi öneririz.

Kültür ve uygulama etki alanları

DefaultThreadCurrentCulture ve DefaultThreadCurrentUICulture yalnızca özellik değeri ayarlandığında veya alındığında geçerli olan uygulama etki alanı için varsayılan bir kültürü açıkça tanımlayan statik özelliklerdir. Aşağıdaki örnek, varsayılan uygulama etki alanındaki varsayılan kültürü ve varsayılan UI kültürünü Fransızca (Fransa) olarak ayarlar ve ardından sınıfını ve temsilciyi AppDomainInitializer kullanarak AppDomainSetup yeni bir uygulama etki alanındaki varsayılan kültürü ve ui kültürünü Rusça (Rusya) olarak ayarlar. Tek bir iş parçacığı daha sonra her uygulama etki alanında iki yöntem yürütür. İş parçacığının kültürünün ve kullanıcı arabirimi kültürünün açıkça ayarlanmadığını unutmayın; bunlar, iş parçacığının yürütülmekte olduğu uygulama etki alanının varsayılan kültüründen ve UI kültüründen türetilir. Ve DefaultThreadCurrentUICulture özelliklerinin, yöntem çağrısı yapıldığında geçerli olan uygulama etki alanının varsayılan CultureInfo değerlerini döndürdüğünü de DefaultThreadCurrentCulture unutmayın.

using System;
using System.Globalization;

public class Example
{
    public static void Main()
    {
        // Set the default culture and display the current date in the current application domain.
        Info info1 = new Info();
        SetAppDomainCultures("fr-FR");

        // Create a second application domain.
        AppDomainSetup setup = new AppDomainSetup();
        setup.AppDomainInitializer = SetAppDomainCultures;
        setup.AppDomainInitializerArguments = new string[] { "ru-RU" };
        AppDomain domain = AppDomain.CreateDomain("Domain2", null, setup);
        // Create an Info object in the new application domain.
        Info info2 = (Info)domain.CreateInstanceAndUnwrap(typeof(Example).Assembly.FullName,
                                                           "Info");

        // Execute methods in the two application domains.
        info2.DisplayDate();
        info2.DisplayCultures();

        info1.DisplayDate();
        info1.DisplayCultures();
    }

    public static void SetAppDomainCultures(string[] names)
    {
        SetAppDomainCultures(names[0]);
    }

    public static void SetAppDomainCultures(string name)
    {
        try
        {
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture(name);
            CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture(name);
        }
        // If an exception occurs, we'll just fall back to the system default.
        catch (CultureNotFoundException)
        {
            return;
        }
        catch (ArgumentException)
        {
            return;
        }
    }
}

public class Info : MarshalByRefObject
{
    public void DisplayDate()
    {
        Console.WriteLine("Today is {0:D}", DateTime.Now);
    }

    public void DisplayCultures()
    {
        Console.WriteLine("Application domain is {0}", AppDomain.CurrentDomain.Id);
        Console.WriteLine("Default Culture: {0}", CultureInfo.DefaultThreadCurrentCulture);
        Console.WriteLine("Default UI Culture: {0}", CultureInfo.DefaultThreadCurrentUICulture);
    }
}
// The example displays the following output:
//       Today is 14 октября 2011 г.
//       Application domain is 2
//       Default Culture: ru-RU
//       Default UI Culture: ru-RU
//       Today is vendredi 14 octobre 2011
//       Application domain is 1
//       Default Culture: fr-FR
//       Default UI Culture: fr-FR

Kültürler ve uygulama etki alanları hakkında daha fazla bilgi için, Uygulama Etki Alanları konusunun "Uygulama Etki Alanları ve İş Parçacıkları" bölümüne bakın.

Kültür ve görev tabanlı zaman uyumsuz işlemler

Görev tabanlı zaman uyumsuz programlama düzeni, iş parçacığı havuzu iş parçacıklarında temsilcileri zaman uyumsuz olarak yürütmek için ve Task<TResult> nesnelerini kullanırTask. Belirli bir görevin üzerinde çalıştığı belirli iş parçacığı önceden bilinmez, ancak yalnızca çalışma zamanında belirlenir.

.NET Framework 4.6 veya sonraki bir sürümü hedefleyen uygulamalar için kültür, zaman uyumsuz bir işlemin bağlamının bir parçasıdır. Başka bir deyişle, zaman uyumsuz işlemler varsayılan olarak başlatıldıkları iş parçacığının CurrentCulture ve CurrentUICulture özelliklerinin değerlerini devralır. Geçerli kültür veya geçerli ui kültürü sistem kültüründen farklıysa, geçerli kültür iş parçacığı sınırlarını geçer ve zaman uyumsuz bir işlem yürüten iş parçacığı havuzu iş parçacığının geçerli kültürü olur.

Aşağıdaki örnek basit bir çizim sağlar. Örnek, formatDelegatepara birimi değeri olarak biçimlendirilmiş bazı sayıları döndüren bir Func<TResult> temsilci tanımlar. Örnek, geçerli sistem kültürünü Fransızca (Fransa) veya Fransızca (Fransa) zaten geçerli kültür ise İngilizce (Birleşik Devletler) olarak değiştirir. Bu daha sonra:

  • Ana uygulama iş parçacığında zaman uyumlu bir şekilde çalışması için temsilciyi doğrudan çağırır.
  • Temsilciyi bir iş parçacığı havuzu iş parçacığında zaman uyumsuz olarak yürüten bir görev oluşturur.
  • yöntemini çağırarak Task.RunSynchronously ana uygulama iş parçacığında temsilciyi zaman uyumlu olarak yürüten bir görev oluşturur.

Örnekteki çıktıda gösterildiği gibi, geçerli kültür Fransızca (Fransa) olarak değiştirildiğinde, görevlerin zaman uyumsuz olarak çağrıldığı iş parçacığının geçerli kültürü bu zaman uyumsuz işlem için geçerli kültür olur.

using System;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;

public class AsyncCultureEx1
{
    public static void Main()
    {
        decimal[] values = { 163025412.32m, 18905365.59m };
        string formatString = "C2";

        string FormatDelegate()
        {
            string output = $"Formatting using the {CultureInfo.CurrentCulture.Name} " +
            "culture on thread {Thread.CurrentThread.ManagedThreadId}.\n";
            foreach (decimal value in values)
                output += $"{value.ToString(formatString)}   ";

            output += Environment.NewLine;
            return output;
        }

        Console.WriteLine($"The example is running on thread {Thread.CurrentThread.ManagedThreadId}");
        // Make the current culture different from the system culture.
        Console.WriteLine($"The current culture is {CultureInfo.CurrentCulture.Name}");
        if (CultureInfo.CurrentCulture.Name == "fr-FR")
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
        else
            Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

        Console.WriteLine($"Changed the current culture to {CultureInfo.CurrentCulture.Name}.\n");

        // Execute the delegate synchronously.
        Console.WriteLine("Executing the delegate synchronously:");
        Console.WriteLine(FormatDelegate());

        // Call an async delegate to format the values using one format string.
        Console.WriteLine("Executing a task asynchronously:");
        var t1 = Task.Run(FormatDelegate);
        Console.WriteLine(t1.Result);

        Console.WriteLine("Executing a task synchronously:");
        var t2 = new Task<string>(FormatDelegate);
        t2.RunSynchronously();
        Console.WriteLine(t2.Result);
    }
}
// The example displays the following output:
//         The example is running on thread 1
//         The current culture is en-US
//         Changed the current culture to fr-FR.
//
//         Executing the delegate synchronously:
//         Formatting using the fr-FR culture on thread 1.
//         163 025 412,32 €   18 905 365,59 €
//
//         Executing a task asynchronously:
//         Formatting using the fr-FR culture on thread 3.
//         163 025 412,32 €   18 905 365,59 €
//
//         Executing a task synchronously:
//         Formatting using the fr-FR culture on thread 1.
//         163 025 412,32 €   18 905 365,59 €

DefaultThreadCurrentCulture ve DefaultThreadCurrentUICulture uygulama başına etki alanı özellikleridir; başka bir deyişle, belirli bir uygulama etki alanında açıkça bir kültür atanmamış tüm iş parçacıkları için varsayılan bir kültür oluştururlar. Ancak, .NET Framework 4.6 veya üzerini hedefleyen uygulamalar için, görev uygulama etki alanı sınırlarını aşsa bile çağıran iş parçacığının kültürü zaman uyumsuz bir görevin bağlamının bir parçası olarak kalır.

CultureInfo nesne serileştirmesi

Bir CultureInfo nesne seri hale getirildiğinde, aslında depolanan tek şey ve UseUserOverrideolurName. Yalnızca aynı anlama sahip olan bir ortamda başarıyla seri durumdan Name çıkarılır. Aşağıdaki üç örnek neden her zaman böyle olmadığını gösterir:

  • CultureTypes Özellik değeri ise CultureTypes.InstalledWin32Culturesve bu kültür ilk olarak Windows işletim sisteminin belirli bir sürümünde tanıtıldıysa, windows'un önceki bir sürümünde seri durumdan çıkarmak mümkün değildir. Örneğin, Windows 10'da bir kültür tanıtıldıysa, Windows 8'de seri durumdan çıkarılamaz.

  • CultureTypes değer ise CultureTypes.UserCustomCultureve seri durumdan çıkarıldığı bilgisayarda bu kullanıcı özel kültürü yüklü değilse, seri durumdan çıkarmak mümkün değildir.

  • CultureTypes değeri ise CultureTypes.ReplacementCulturesve seri durumdan çıkarıldığı bilgisayarda bu değiştirme kültürü yoksa, aynı ada seri durumdan çıkarılır, ancak aynı özelliklerin tümü olmaz. Örneğin, A bilgisayarındaki yerine geçen bir kültürse en-US , ancak B bilgisayarında değilse ve bu kültüre başvuran bir CultureInfo nesne A bilgisayarında seri hale getirilirse ve B bilgisayarında seri durumdan çıkarılırsa, kültürün özel özelliklerinden hiçbiri iletilmez. Kültür başarıyla seri durumdan çıkarılır, ancak farklı bir anlama gelir.

geçersiz kılmaları Denetim Masası

Kullanıcı, Denetim Masası bölgesel ve dil seçenekleri bölümü aracılığıyla geçerli Windows kültürüyle ilişkili bazı değerleri geçersiz kılmayı seçebilir. Örneğin, kullanıcı tarihi farklı bir biçimde görüntülemeyi veya kültür için varsayılan değer dışında bir para birimi kullanmayı seçebilir. Genel olarak, uygulamalarınız bu kullanıcı geçersiz kılmalarını kabul etmelidir.

ise UseUserOverridetrue ve belirtilen kültür geçerli Windows kültürüyle eşleşiyorsa, CultureInfo özelliği tarafından döndürülen örneğin özellikleri DateTimeFormatInfo için kullanıcı ayarları ve özelliği tarafından DateTimeFormatNumberFormat döndürülen örneğin özellikleri NumberFormatInfo de dahil olmak üzere bu geçersiz kılmaları kullanır. Kullanıcı ayarları ile CultureInfoilişkili kültürle uyumsuzsa, örneğin, seçilen takvim öğesinden OptionalCalendarsbiri değilse, yöntemlerin sonuçları ve özelliklerin değerleri tanımsız olur.

Alternatif sıralama düzenleri

Bazı kültürler birden fazla sıralama düzenini destekler. Örneğin:

  • İspanyolca (İspanya) kültürü iki sıralama düzenine sahiptir: varsayılan uluslararası sıralama düzeni ve geleneksel sıralama düzeni. Kültür adıyla bir CultureInfo nesne örneği es-ES oluşturduğunuzda, uluslararası sıralama düzeni kullanılır. Kültür adıyla bir CultureInfo nesne örneği es-ES-tradnl oluşturduğunuzda, geleneksel sıralama düzeni kullanılır.

  • zh-CN (Çince (Basitleştirilmiş, PRC)) kültürü iki sıralama düzeni destekler: söylenişe göre (varsayılan) ve vuruş sayısına göre. Kültür adıyla bir CultureInfo nesne örneği zh-CN oluşturduğunuzda, varsayılan sıralama düzeni kullanılır. 0x00020804 yerel tanımlayıcısı olan bir CultureInfo nesnenin örneğini oluştururken dizeler vuruş sayısına göre sıralanır.

Aşağıdaki tabloda, alternatif sıralama düzenlerini destekleyen kültürler ve varsayılan ve alternatif sıralama düzenleri için tanımlayıcılar listeilmektedir.

Kültür adı Kültür Varsayılan sıralama adı ve tanımlayıcısı Alternatif sıralama adı ve tanımlayıcısı
es-ES İspanyolca (İspanya) Uluslararası: 0x00000C0A Geleneksel: 0x0000040A
zh-TW Çince (Tayvan) Vuruş Sayısı: 0x00000404 Bopomofo: 0x00030404
zh-CN Çince (PRC) Söyleniş: 0x00000804 Vuruş Sayısı: 0x00020804
zh-HK Çince - (Hong Kong ÖİB) Vuruş Sayısı: 0x00000c04 Vuruş Sayısı: 0x00020c04
zh-SG Çince (Singapur) Söyleniş: 0x00001004 Vuruş Sayısı: 0x00021004
zh-MO Çince (Macao SAR) Söyleniş: 0x00001404 Vuruş Sayısı: 0x00021404
ja-JP Japonca (Japonya) Varsayılan: 0x00000411 Unicode: 0x00010411
ko-KR Korece (Kore) Varsayılan: 0x00000412 Korece Xwansung - Unicode: 0x00010412
de-DE Almanca (Almanya) Sözlük: 0x00000407 Telefon Kitap Sıralama DIN: 0x00010407
hu-HU Macarca (Macaristan) Varsayılan: 0x0000040e Teknik Sıralama: 0x0001040e
ka-GE Gürcüce (Gürcistan) Geleneksel: 0x00000437 Modern Sıralama: 0x00010437

Geçerli kültür ve UWP uygulamaları

Evrensel Windows Platformu (UWP) uygulamalarında CurrentCulture ve CurrentUICulture özellikleri aynı .NET Framework ve .NET Core uygulamalarında olduğu gibi okuma-yazma özelliğine sahiptir. Ancak UWP uygulamaları tek bir kültürü tanır. ve özellikleri, CurrentCulture Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages koleksiyonundaki ilk değerle eşler.CurrentUICulture

.NET uygulamalarında geçerli kültür iş parçacığı başına bir ayardır ve CurrentCulture ve CurrentUICulture özellikleri yalnızca geçerli iş parçacığının kültürünü ve kullanıcı arabirimi kültürünü yansıtır. UWP uygulamalarında geçerli kültür, genel bir ayar olan Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages koleksiyonuna eşler. veya CurrentUICulture özelliğinin CurrentCulture ayarlanması uygulamanın tamamının kültürünü değiştirir; kültür iş parçacığı başına temelinde ayarlanamaz.