CultureInfo.CurrentCulture Properti

Definisi

Mendapatkan atau mengatur CultureInfo objek yang mewakili budaya yang digunakan oleh utas saat ini dan operasi asinkron berbasis tugas.

public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentCulture { get; set; }
public static System.Globalization.CultureInfo CurrentCulture { get; }
static member CurrentCulture : System.Globalization.CultureInfo with get, set
static member CurrentCulture : System.Globalization.CultureInfo
Public Shared Property CurrentCulture As CultureInfo
Public Shared ReadOnly Property CurrentCulture As CultureInfo

Nilai Properti

Budaya yang digunakan oleh utas saat ini dan operasi asinkron berbasis tugas.

Pengecualian

Properti diatur ke null.

Contoh

Contoh berikut menunjukkan cara mengubah CurrentCulture dan CurrentUICulture utas saat ini.

using System;
using System.Globalization;

public class Example0
{
   public static void Main()
   {
      // Display the name of the current culture.
      Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);

      // Change the current culture to th-TH.
      CultureInfo.CurrentCulture = new CultureInfo("th-TH", false);
      Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name);

      // Display the name of the current UI culture.
      Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);

      // Change the current UI culture to ja-JP.
      CultureInfo.CurrentUICulture = new CultureInfo( "ja-JP", false );
      Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name);
   }
}

// The example displays the following output:
//       CurrentCulture is en-US.
//       CurrentCulture is now th-TH.
//       CurrentUICulture is en-US.
//       CurrentUICulture is now ja-JP.
Imports System.Globalization
Imports System.Threading

Public Module Example2
   Public Sub Run()
      ' Display the name of the current culture.
      Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name)

      ' Change the current culture to th-TH.
      CultureInfo.CurrentCulture = New CultureInfo("th-TH", False)
      Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name)

      ' Display the name of the current UI culture.
      Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name)

      ' Change the current UI culture to ja-JP.
      CultureInfo.CurrentUICulture = New CultureInfo("ja-JP", False)
      Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name)
   End Sub
End Module
' The example displays the following output:
'       CurrentCulture is en-US.
'       CurrentCulture is now th-TH.
'       CurrentUICulture is en-US.
'       CurrentUICulture is now ja-JP.

Keterangan

Objek CultureInfo yang dikembalikan oleh CurrentCulture properti dan objek terkait menentukan format default untuk nilai tanggal, waktu, angka, dan mata uang, urutan pengurutan teks, konvensi casing, dan perbandingan string.

Budaya saat ini adalah properti dari utas yang dieksekusi. Saat Anda mengatur properti ini ke CultureInfo objek yang mewakili budaya baru, nilai Thread.CurrentThread.CurrentCulture properti juga berubah. Namun, kami menyarankan agar Anda selalu menggunakan properti CultureInfo.CurrentCulture untuk mengambil dan mengatur kultur saat ini.

Objek CultureInfo yang dikembalikan properti ini bersifat hanya baca. Itu berarti Anda tidak dapat mengubah objek yang ada, misalnya, dengan mengubah DateTimeFormat. Untuk mengubah format tanggal-waktu atau beberapa aspek lain dari budaya saat ini, buat objek baru CultureInfo dan tetapkan ke properti .

Bagaimana menentukan budaya sebuah utas

Ketika sebuah benang dimulai, budaya awalnya ditentukan sebagai berikut:

  • Dengan mengambil kultur yang ditentukan oleh properti DefaultThreadCurrentCulture di domain aplikasi tempat utas dijalankan, jika nilai properti bukan null.

  • Jika utas adalah utas kumpulan utas yang menjalankan operasi asinkron berbasis tugas, budayanya ditentukan oleh budaya utas panggilan. Contoh berikut mengubah budaya saat ini menjadi Bahasa Portugis (Brasil) dan meluncurkan enam tugas, yang masing-masing menampilkan ID utasnya, ID tugasnya, dan budayanya saat ini. Setiap tugas (dan utas) telah mewarisi konteks budaya dari utas pemanggil.

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    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 {Thread.CurrentThread.CurrentCulture.Name}");
            Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
            // Change the current culture to Portuguese (Brazil).
            Console.WriteLine($"Current culture changed to {Thread.CurrentThread.CurrentCulture.Name}");
            Console.WriteLine($"Application thread is thread {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 {Task.CurrentId} on thread {Thread.CurrentThread.ManagedThreadId} is {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
    

    Untuk informasi selengkapnya, lihat Budaya dan operasi asinkron berbasis tugas.

  • Dengan memanggil fungsi GetUserDefaultLocaleName pada Windows atau fungsi uloc_getDefault dari ICU, yang saat ini memanggil fungsi setlocale POSIX dengan kategori LC_MESSAGES, pada sistem seperti Unix.

Perhatikan bahwa jika Anda menetapkan pengaturan lokal tertentu yang berbeda dari pengaturan lokal yang diinstal sistem atau pengaturan lokal pilihan pengguna, dan aplikasi Anda memulai beberapa utas, pengaturan lokal saat ini dari utas tersebut akan menjadi pengaturan lokal yang dikembalikan oleh fungsi GetUserDefaultLocaleName, kecuali Anda menetapkan pengaturan lokal pada properti DefaultThreadCurrentCulture di domain aplikasi tempat utas dijalankan.

Untuk informasi selengkapnya tentang bagaimana budaya utas ditentukan, lihat bagian "Budaya dan utas" di CultureInfo halaman referensi.

Dapatkan budaya saat ini

Properti CultureInfo.CurrentCulture ini adalah pengaturan per utas; artinya, setiap utas dapat memiliki kulturnya sendiri. Anda mendapatkan kultur dari utas saat ini dengan mengambil nilai properti CultureInfo.CurrentCulture, seperti yang diilustrasikan oleh contoh berikut.

using System;
using System.Globalization;

public class Example5
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentCulture;
      Console.WriteLine($"The current culture is {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]

Mengatur properti CurrentCulture secara eksplisit

Untuk mengubah budaya yang digunakan oleh utas yang ada, Anda menyetel properti CultureInfo.CurrentCulture ke budaya baru. Contoh berikut mengubah kultur benang saat ini menjadi Bahasa Belanda (Belanda).

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

public class Info11 : MarshalByRefObject
{
    public void ShowCurrentCulture()
    {
        Console.WriteLine($"Culture of thread {Thread.CurrentThread.Name}: {CultureInfo.CurrentCulture.Name}");
    }
}

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

// The example displays the following output:
//
//     Culture of thread MainThread: nl-NL

Note

Mengubah pengaturan dengan menggunakan properti CultureInfo.CurrentCulture memerlukan izin SecurityPermission dengan nilai ControlThread yang ditetapkan. Memanipulasi utas berbahaya karena kondisi keamanan yang terkait dengan utas. Oleh karena itu, izin ini harus diberikan hanya untuk kode yang dapat dipercaya, dan kemudian hanya seperlunya. Anda tidak dapat mengubah kultur utas dalam kode semi-tepercaya.

Anda dapat secara eksplisit mengubah budaya utas saat ini menjadi budaya tertentu (seperti Prancis (Kanada)) atau budaya netral (seperti Prancis). Ketika objek CultureInfo mewakili budaya netral, nilai-nilai CultureInfo properti seperti Calendar, , CompareInfoDateTimeFormat, NumberFormat, dan TextInfo mencerminkan budaya tertentu yang terkait dengan budaya netral. Misalnya, budaya dominan untuk budaya netral Inggris adalah Inggris (Amerika Serikat); budaya dominan untuk budaya Jerman adalah Jerman (Jerman). Contoh berikut menggambarkan perbedaan pemformatan ketika budaya saat ini diatur ke budaya tertentu, Prancis (Kanada), dan budaya netral, Prancis.

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: {CultureInfo.CurrentCulture.Name}");
      Console.WriteLine($"{value:C2}\n");

      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
      Console.WriteLine($"Current Culture: {CultureInfo.CurrentCulture.Name}");
      Console.WriteLine($"{value:C2}");
   }
}

// 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 €

Budaya saat ini dan penggantian oleh pengguna

Pengguna Windows dapat mengubah nilai properti standar dari objek CultureInfo dan objek terkaitnya dengan menggunakan Opsi Regional dan Bahasa di Panel Kontrol. Objek CultureInfo yang dikembalikan oleh properti CurrentCulture mencerminkan pengubahan yang dilakukan pengguna dalam kasus berikut:

  • Jika culture thread saat ini diatur secara implisit oleh fungsi Windows GetUserDefaultLocaleName.
  • Jika budaya utas saat ini yang ditentukan oleh properti DefaultThreadCurrentCulture sesuai dengan pengaturan lokal sistem Windows saat ini.
  • Jika budaya utas saat ini diatur secara eksplisit ke budaya yang dikembalikan oleh CreateSpecificCulture metode , dan budaya tersebut sesuai dengan budaya sistem Windows saat ini.
  • Jika kultur utas saat ini diatur secara eksplisit ke kultur yang dibuat oleh CultureInfo(String) konstruktor, dan kultur tersebut sesuai dengan kultur sistem Windows yang sedang digunakan.

Dalam beberapa kasus, terutama untuk aplikasi server, mengatur budaya saat ini ke objek CultureInfo yang mencerminkan penggantian pengguna mungkin tidak diinginkan. Sebagai gantinya, Anda dapat mengatur objek CultureInfo budaya saat ini yang tidak mencerminkan pengaturan ulang oleh pengguna dengan cara berikut:

Berlaku untuk

Lihat juga