Share via


System.Globalization.CultureInfo.CurrentUICulture özelliği

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

CurrentUICulture özelliği, iş parçacığı başına bir özelliktir. Yani, her iş parçacığının kendi geçerli kullanıcı arabirimi kültürü vardır. Bu özellik, özelliğine atanan nesnenin CultureInfo alınmasına veya ayarlanmasına System.Threading.Thread.CurrentThread.CurrentUICulture eşdeğerdir. Bir iş parçacığı başlatıldığında, kullanıcı arabirimi kültürü başlangıçta aşağıdaki gibi belirlenir:

  • özellik değeri değilsenull, iş parçacığının DefaultThreadCurrentUICulture 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şlem yürüten bir iş parçacığı havuzu iş parçacığıysa ve uygulama .NET Framework 4.6'yı veya .NET Framework'ün daha sonraki bir sürümünü hedef alıyorsa, kullanıcı arabirimi kültürü çağıran iş parçacığının UI kültürü tarafından belirlenir. Aşağıdaki örnek, geçerli ui kültürünü Portekizce (Brezilya) olarak değiştirir ve her biri iş parçacığı kimliğini, görev kimliğini ve geçerli ui 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 kullanıcı arabirimi 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 Example
    {
        public static async Task Main()
        {
            var tasks = new List<Task>();
            Console.WriteLine("The current UI culture is {0}",
                              Thread.CurrentThread.CurrentUICulture.Name);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR");
            // Change the current UI culture to Portuguese (Brazil).
            Console.WriteLine("Current UI culture changed to {0}",
                              Thread.CurrentThread.CurrentUICulture.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("UI Culture of task {0} on thread {1} is {2}",
                                      Task.CurrentId,
                                      Thread.CurrentThread.ManagedThreadId,
                                      Thread.CurrentThread.CurrentUICulture.Name);
                }));
    
            await Task.WhenAll(tasks.ToArray());
        }
    }
    // The example displays output like the following:
    //     The current UI culture is en-US
    //     Current UI culture changed to pt-BR
    //     Application thread is thread 9
    //     UI Culture of task 2 on thread 11 is pt-BR
    //     UI Culture of task 1 on thread 10 is pt-BR
    //     UI Culture of task 3 on thread 11 is pt-BR
    //     UI Culture of task 5 on thread 11 is pt-BR
    //     UI Culture of task 6 on thread 11 is pt-BR
    //     UI Culture of task 4 on thread 10 is pt-BR
    
    Imports System.Globalization
    Imports System.Threading
    
    Module Example1
        Public Sub Main()
            Dim tasks As New List(Of Task)
            Console.WriteLine("The current UI culture is {0}",
                              Thread.CurrentThread.CurrentUICulture.Name)
            Thread.CurrentThread.CurrentUICulture = New CultureInfo("pt-BR")
            ' Change the current UI culture to Portuguese (Brazil).
            Console.WriteLine("Current culture changed to {0}",
                              Thread.CurrentThread.CurrentUICulture.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.CurrentUICulture.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 belgelerde "Kültür ve görev tabanlı zaman uyumsuz işlemler" bölümüne CultureInfo bakın.

  • Windows GetUserDefaultUILanguage işlevini çağırarak.

İş parçacığı tarafından kullanılan kullanıcı arabirimi kültürünü değiştirmek için özelliğini yeni kültür olarak ayarlayın Thread.CurrentUICulture . Bir iş parçacığının kullanıcı arabirimi 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.

Not

Özellik değerini yeni bir kültürü temsil eden bir CultureInfo nesneye ayarlarsanız, özelliğin Thread.CurrentThread.CurrentCulture değeri de değişir.

Geçerli kullanıcı arabirimi kültürünü alma

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

using System;
using System.Globalization;

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

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

Ayrıca özelliğinden geçerli iş parçacığının kullanıcı arabirimi kültürünün Thread.CurrentUICulture değerini de alabilirsiniz.

Geçerli kullanıcı arabirimi kültürünü açıkça ayarlama

.NET Framework 4.6'dan başlayarak, özelliğine yeni kültürü temsil eden bir CultureInfo nesne atayarak geçerli kullanıcı arabirimi kültürünü CultureInfo.CurrentUICulture değiştirebilirsiniz. Geçerli kullanıcı arabirimi kültürü belirli bir kültüre (en-US veya de-DE gibi) veya nötr bir kültüre (en veya de gibi) ayarlanabilir. Aşağıdaki örnek, geçerli kullanıcı arabirimi kültürünü fr-FR veya Fransızca (Fransa) olarak ayarlar.

using System;
using System.Globalization;

public class Example1
{
    public static void Main()
    {
        Console.WriteLine("The current UI culture: {0}",
                          CultureInfo.CurrentUICulture.Name);

        CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        Console.WriteLine("The current UI culture: {0}",
                          CultureInfo.CurrentUICulture.Name);
    }
}
// The example displays output like the following:
//       The current UI culture: en-US
//       The current UI culture: fr-FR
Imports System.Globalization

Module Example2
    Public Sub Main()
        Console.WriteLine("The current UI culture: {0}",
                        CultureInfo.CurrentUICulture.Name)

        CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR")
        Console.WriteLine("The current UI culture: {0}",
                        CultureInfo.CurrentUICulture.Name)
    End Sub
End Module
' The example displays output like the following:
'       The current UI culture: en-US
'       The current UI culture: fr-FR

Çok iş parçacıklı bir uygulamada, iş parçacığının özelliğine bu kültürü temsil eden bir nesne atayarak herhangi bir CultureInfo iş parçacığının Thread.CurrentUICulture ui kültürünü açıkça ayarlayabilirsiniz. Kültürünü ayarlamak istediğiniz iş parçacığı geçerli iş parçacığıysa, yeni kültürü özelliğine CultureInfo.CurrentUICulture atayabilirsiniz. bir iş parçacığının UI kültürü açıkça ayarlandığında, bu iş parçacığı uygulama etki alanı sınırlarını aşsa ve başka bir uygulama etki alanında kod yürütse bile aynı kültürü korur.

Geçerli kullanıcı arabirimi kültürünü örtük olarak ayarlama

Ana uygulama iş parçacığı da dahil olmak üzere bir iş parçacığı ilk oluşturulduğunda, varsayılan olarak geçerli ui kültürü aşağıdaki gibi ayarlanır:

  • Özellik değeri değilsenull, geçerli uygulama etki alanı için özelliği tarafından DefaultThreadCurrentUICulture tanımlanan kültürü kullanarak.
  • Sistemin varsayılan kültürünü kullanarak. Windows işletim sistemini kullanan sistemlerde, ortak dil çalışma zamanı geçerli ui kültürünü ayarlamak için Windows GetUserDefaultUILanguage işlevini çağırır. GetUserDefaultUILanguage kullanıcı tarafından ayarlanan varsayılan kullanıcı arabirimi kültürünü döndürür. Kullanıcı varsayılan kullanıcı arabirimi dilini ayarlamadıysa, başlangıçta sistemde yüklü olan kültürü döndürür.

İş parçacığı uygulama sınırlarını geçerse ve kodu başka bir uygulama etki alanında yürütürse, kültürü yeni oluşturulan iş parçacığıyla aynı şekilde belirlenir.

Sistem tarafından yüklenen UI kültüründen veya kullanıcının tercih edilen UI kültüründen farklı belirli bir ui 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 ui kültürü işlevi tarafından GetUserDefaultUILanguage döndürülen kültür DefaultThreadCurrentUICulture olacaktır.

Güvenlik konuları

Geçerli iş parçacığının kültürünü değiştirmek için değer kümesine ControlThread sahip bir SecurityPermission izin gerekir.

Dikkat

İş 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.

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

Evrensel Windows Platformu (UWP) uygulamalarında CurrentUICulture ö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 ui kültürü iş parçacığı başına bir ayardır ve CurrentUICulture özelliği yalnızca geçerli iş parçacığının 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 ö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.