Aracılığıyla paylaş


System.Globalization.CultureInfo.CurrentCulture özelliği

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

CultureInfo özelliği tarafından CurrentCulture döndürülen nesne ve ilişkili nesneleri tarihler, saatler, sayılar ve para birimi değerleri, metnin sıralama düzeni, büyük/küçük harf kuralları ve dize karşılaştırmaları için varsayılan biçimi belirler.

Geçerli kültür, yürütülen iş parçacığının bir özelliğidir. Bu özelliği yeni bir kültürü temsil eden bir CultureInfo nesneye ayarladığınızda, özelliğin Thread.CurrentThread.CurrentCulture değeri de değişir. Ancak, geçerli kültürü almak ve ayarlamak için her zaman özelliğini kullanmanızı CultureInfo.CurrentCulture öneririz.

CultureInfo Bu özelliğin döndürdüğü nesne salt okunurdur. Başka bir deyişle, örneğin öğesini değiştirerek mevcut nesnenin DateTimeFormatsesini kapatamazsınız. Geçerli kültürün tarih-saat biçimini veya başka bir yönünü değiştirmek için yeni CultureInfo bir nesne oluşturun ve özelliğine atayın.

bir iş parçacığının kültürünün nasıl belirlendiği

Bir iş parçacığı başlatıldığında, kültürü başlangıçta aşağıdaki gibi belirlenir:

  • özellik değeri değilsenull, iş parçacığının DefaultThreadCurrentCulture yürütülmekte olduğu uygulama etki alanında özelliği tarafından belirtilen kültürü alarak.

  • İş parçacığı, görev tabanlı zaman uyumsuz bir işlemi yürüten bir iş parçacığı havuzu iş parçacığıysa, kültürü çağıran iş parçacığının kültürü tarafından belirlenir. Aşağıdaki örnek geçerli kültürü Portekizce (Brezilya) olarak değiştirir ve her biri iş parçacığı kimliğini, görev kimliğini ve geçerli kültürünü görüntüleyen altı görev başlatır. Görevlerin (ve iş parçacıklarının) her biri, çağıran iş parçacığının kültürünü devralmıştır.

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.Versioning;
    using System.Threading;
    using System.Threading.Tasks;
    
    public class Example14
    {
        public static async Task Main()
        {
            var tasks = new List<Task>();
            Console.WriteLine("The current culture is {0}",
                              Thread.CurrentThread.CurrentCulture.Name);
            Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
            // Change the current culture to Portuguese (Brazil).
            Console.WriteLine("Current culture changed to {0}",
                              Thread.CurrentThread.CurrentCulture.Name);
            Console.WriteLine("Application thread is thread {0}",
                              Thread.CurrentThread.ManagedThreadId);
            // Launch six tasks and display their current culture.
            for (int ctr = 0; ctr <= 5; ctr++)
                tasks.Add(Task.Run(() =>
                {
                    Console.WriteLine("Culture of task {0} on thread {1} is {2}",
                                      Task.CurrentId,
                                      Thread.CurrentThread.ManagedThreadId,
                                      Thread.CurrentThread.CurrentCulture.Name);
                }));
    
            await Task.WhenAll(tasks.ToArray());
        }
    }
    // The example displays output like the following:
    //     The current culture is en-US
    //     Current culture changed to pt-BR
    //     Application thread is thread 9
    //     Culture of task 2 on thread 11 is pt-BR
    //     Culture of task 1 on thread 10 is pt-BR
    //     Culture of task 3 on thread 11 is pt-BR
    //     Culture of task 5 on thread 11 is pt-BR
    //     Culture of task 6 on thread 11 is pt-BR
    //     Culture of task 4 on thread 10 is pt-BR
    
    Imports System.Globalization
    Imports System.Threading
    
    Module Example1
        Public Sub S1()
            Dim tasks As New List(Of Task)
            Console.WriteLine("The current culture is {0}",
                            Thread.CurrentThread.CurrentCulture.Name)
            Thread.CurrentThread.CurrentCulture = New CultureInfo("pt-BR")
            ' Change the current culture to Portuguese (Brazil).
            Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentCulture.Name)
            Console.WriteLine("Application thread is thread {0}",
                            Thread.CurrentThread.ManagedThreadId)
            ' Launch six tasks and display their current culture.
            For ctr As Integer = 0 To 5
                tasks.Add(Task.Run(Sub()
                                       Console.WriteLine("Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId,
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     Thread.CurrentThread.CurrentCulture.Name)
                                   End Sub))
            Next
            Task.WaitAll(tasks.ToArray())
        End Sub
    End Module
    ' The example displays output like the following:
    '     The current culture is en-US
    '     Current culture changed to pt-BR
    '     Application thread is thread 9
    '     Culture of task 2 on thread 11 is pt-BR
    '     Culture of task 1 on thread 10 is pt-BR
    '     Culture of task 3 on thread 11 is pt-BR
    '     Culture of task 5 on thread 11 is pt-BR
    '     Culture of task 6 on thread 11 is pt-BR
    '     Culture of task 4 on thread 10 is pt-BR
    

    Daha fazla bilgi için bkz . Kültür ve görev tabanlı zaman uyumsuz işlemler.

  • İşlevi GetUserDefaultLocaleName Windows'da veya uloc_getDefault şu anda Unix benzeri sistemlerde kategorili LC_MESSAGESPOSIX setlocale işlevini çağıran ICU'dan çağırarak.

Sistem tarafından yüklenen kültürden veya kullanıcının tercih edilen kültüründen farklı belirli bir kültür ayarlarsanız ve uygulamanız birden çok iş parçacığı başlatırsa, iş parçacığının yürütülmekte olduğu uygulama etki alanındaki özelliğe bir kültür atamadığınız sürece, bu iş parçacıklarının geçerli kültürü işlevi tarafından GetUserDefaultLocaleName döndürülen kültür DefaultThreadCurrentCulture olacaktır.

bir iş parçacığının kültürünün nasıl belirlendiği hakkında daha fazla bilgi için başvuru sayfasındaki "Kültür ve iş parçacıkları" bölümüne CultureInfo bakın.

Geçerli kültürü alma

CultureInfo.CurrentCulture özelliği iş parçacığı başına bir ayardır; yani her iş parçacığının kendi kültürü olabilir. Aşağıdaki örnekte gösterildiği gibi özelliğinin değerini alarak geçerli iş parçacığının CultureInfo.CurrentCulture kültürünü elde edersiniz.

using System;
using System.Globalization;

public class Example5
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentCulture;
      Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name);
   }
}
// The example displays output like the following:
//       The current culture is English (United States) [en-US]
Imports System.Globalization

Module Example3
    Public Sub S1()
        Dim culture As CultureInfo = CultureInfo.CurrentCulture
        Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name)
    End Sub
End Module
' The example displays output like the following:
'     The current culture is English (United States) [en-US]

CurrentCulture özelliğini açıkça ayarlama

Mevcut bir iş parçacığı tarafından kullanılan kültürü değiştirmek için özelliğini yeni kültür olarak ayarlarsınız CultureInfo.CurrentCulture . Bir iş parçacığının kültürünü bu şekilde açıkça değiştirirseniz, iş parçacığı uygulama etki alanı sınırlarını geçerse bu değişiklik devam eder. Aşağıdaki örnek geçerli iş parçacığı kültürünü Felemenkçe (Hollanda) olarak değiştirir. Ayrıca, geçerli iş parçacığı uygulama etki alanı sınırlarını aştığında geçerli kültürünün değişmeye devam ettiğini gösterir.

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

public class Info11 : MarshalByRefObject
{
    public void ShowCurrentCulture()
    {
        Console.WriteLine("Culture of {0} in application domain {1}: {2}",
                          Thread.CurrentThread.Name,
                          AppDomain.CurrentDomain.FriendlyName,
                          CultureInfo.CurrentCulture.Name);
    }
}

public class Example11
{
    public static void Main()
    {
        Info11 inf = new Info11();
        // Set the current culture to Dutch (Netherlands).
        Thread.CurrentThread.Name = "MainThread";
        CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL");
        inf.ShowCurrentCulture();

        // Create a new application domain.
        AppDomain ad = AppDomain.CreateDomain("Domain2");
        Info11 inf2 = (Info11)ad.CreateInstanceAndUnwrap(typeof(Info11).Assembly.FullName, "Info11");
        inf2.ShowCurrentCulture();
    }
}
// The example displays the following output:
//       Culture of MainThread in application domain ChangeCulture1.exe: nl-NL
//       Culture of MainThread in application domain Domain2: nl-NL
Imports System.Globalization
Imports System.Threading

Public Class Info : Inherits MarshalByRefObject
   Public Sub ShowCurrentCulture()
      Console.WriteLine("Culture of {0} in application domain {1}: {2}",
                        Thread.CurrentThread.Name,
                        AppDomain.CurrentDomain.FriendlyName,
                        CultureInfo.CurrentCulture.Name)
   End Sub
End Class

Module Example2
    Public Sub S1()
        Dim inf As New Info()
        ' Set the current culture to Dutch (Netherlands).
        Thread.CurrentThread.Name = "MainThread"
        CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL")
        inf.ShowCurrentCulture()

        ' Create a new application domain.
        Dim ad As AppDomain = AppDomain.CreateDomain("Domain2")
        Dim inf2 As Info = CType(ad.CreateInstanceAndUnwrap(GetType(Info).Assembly.FullName, "Info"),
                          Info)
        inf2.ShowCurrentCulture()
    End Sub
End Module
' This example displays the following output:
'       Culture of MainThread in application domain Example.exe: nl-NL
'       Culture of MainThread in application domain Domain2: nl-NL

Not

özelliğini kullanarak kültürü değiştirmek CultureInfo.CurrentCulture için değer kümesine ControlThread sahip bir SecurityPermission izin gerekir. İş parçacıklarıyla ilişkili güvenlik durumu nedeniyle iş parçacıklarını işlemek tehlikelidir. Bu nedenle, bu izin yalnızca güvenilir koda ve ardından yalnızca gerektiği şekilde verilmelidir. Yarı güvenilir kodda iş parçacığı kültürünü değiştiremezsiniz.

.NET Framework 4'den başlayarak, geçerli iş parçacığı kültürünü açıkça belirli bir kültür (Fransızca (Kanada) veya nötr bir kültür (Fransızca gibi) olarak değiştirebilirsiniz. Nesne CultureInfo nötr bir kültürü temsil ettiğinde, , CompareInfo, DateTimeFormat, NumberFormatve TextInfo gibi Calendarözelliklerin CultureInfo değerleri nötr kültürle ilişkili belirli kültürü yansıtır. Örneğin, İngiliz tarafsız kültürü için baskın kültür İngilizcedir (Birleşik Devletler); Alman kültürü için baskın kültür Almancadır (Almanya). Aşağıdaki örnek, geçerli kültürün belirli bir kültür, Fransızca (Kanada) ve nötr bir kültür olan Fransızca olarak ayarlandığında biçimlendirme farkını gösterir.

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

public class Example12
{
   public static void Main()
   {
      double value = 1634.92;
      CultureInfo.CurrentCulture = new CultureInfo("fr-CA");
      Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}\n", value);

      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
      Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}", value);
   }
}
// The example displays the following output:
//       Current Culture: fr-CA
//       1 634,92 $
//
//       Current Culture: fr
//       1 634,92 €
Imports System.Globalization
Imports System.Threading

Module Example4
    Public Sub S1()
        Dim value As Double = 1634.92
        CultureInfo.CurrentCulture = New CultureInfo("fr-CA")
        Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name)
        Console.WriteLine("{0:C2}", value)
        Console.WriteLine()

        Thread.CurrentThread.CurrentCulture = New CultureInfo("fr")
        Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name)
        Console.WriteLine("{0:C2}", value)
    End Sub
End Module
' The example displays the following output:
'       Current Culture: fr-CA
'       1 634,92 $
'       
'       Current Culture: fr
'       1 634,92 €

Aşağıdaki örnekte gösterildiği gibi, bir ASP.NET uygulamasının özelliğini kullanıcının tercih edilen kültürüne ayarlamak CurrentCulture için özelliğiyle HttpRequest.UserLanguages birlikte özelliğini de kullanabilirsinizCultureInfo.CurrentCulture.

CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(Request13.UserLanguages[0]);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))

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

Windows, kullanıcıların Denetim Masası'de Bölgesel ve Dil Seçenekleri'ni kullanarak nesnenin CultureInfo ve ilişkili nesnelerinin standart özellik değerlerini geçersiz kılmasına olanak tanır. CultureInfo özelliği tarafından CurrentCulture döndürülen nesne, aşağıdaki durumlarda bu kullanıcı geçersiz kılmalarını yansıtır:

  • Geçerli iş parçacığı kültürü Windows GetUserDefaultLocaleName işlevi tarafından örtük olarak ayarlanırsa.

  • özelliği tarafından DefaultThreadCurrentCulture tanımlanan geçerli iş parçacığı kültürü geçerli Windows sistem kültürüne karşılık geliyorsa.

  • Geçerli iş parçacığı kültürü açıkça yöntemi tarafından CreateSpecificCulture döndürülen bir kültüre ayarlanırsa ve bu kültür geçerli Windows sistem kültürüne karşılık gelir.

  • Geçerli iş parçacığı kültürü oluşturucu tarafından CultureInfo(String) örnek alınan bir kültüre açıkça ayarlanırsa ve bu kültür geçerli Windows sistem kültürüne karşılık gelir.

Bazı durumlarda, özellikle sunucu uygulamaları için geçerli kültürü kullanıcı geçersiz kılmalarını yansıtan bir CultureInfo nesneye ayarlamak istenmeyen bir durum olabilir. Bunun yerine, geçerli kültürü aşağıdaki yollarla kullanıcı geçersiz kılmalarını yansıtmayan bir CultureInfo nesneye ayarlayabilirsiniz:

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

Evrensel Windows Platformu (UWP) uygulamalarında CurrentCulture özelliği, .NET Framework ve .NET Core uygulamalarında olduğu gibi okuma-yazma özelliğidir; hem almak hem de geçerli kültürü ayarlamak için kullanabilirsiniz. Ancak, UWP uygulamaları geçerli kültür ile geçerli kullanıcı arabirimi kültürü arasında ayrım yapmaz. ve özellikleri, CurrentCulture Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages koleksiyonundaki ilk değerle eşler.CurrentUICulture

.NET Framework ve .NET Core uygulamalarında, geçerli kültür iş parçacığı başına bir ayardır ve CurrentCulture özelliği yalnızca geçerli iş parçacığının 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 özelliğiyle eşler. özelliğinin CurrentCulture ayarlanması tüm uygulamanın kültürünü değiştirir; kültür iş parçacığı başına temelinde ayarlanamaz.