Properti System.Globalization.CultureInfo.CurrentCulture
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
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 sarankan CultureInfo.CurrentCulture Anda selalu menggunakan properti untuk mengambil dan mengatur budaya saat ini.
Objek CultureInfo
yang dikembalikan properti ini bersifat baca-saja. Itu berarti Anda tidak dapat membisukan 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 budaya utas ditentukan
Ketika utas dimulai, budayanya awalnya ditentukan sebagai berikut:
Dengan mengambil budaya yang ditentukan oleh DefaultThreadCurrentCulture properti 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 budaya utas panggilan.
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
Untuk informasi selengkapnya, lihat Budaya dan operasi asinkron berbasis tugas.
Dengan memanggil
GetUserDefaultLocaleName
fungsi pada Windows atauuloc_getDefault
fungsi dari ICU, yang saat ini memanggil fungsi POSIXsetlocale
dengan kategoriLC_MESSAGES
, pada sistem seperti Unix.
Perhatikan bahwa jika Anda menetapkan budaya tertentu yang berbeda dari budaya yang diinstal sistem atau budaya pilihan pengguna, dan aplikasi Anda memulai beberapa utas, budaya utas tersebut saat ini akan menjadi budaya yang dikembalikan oleh GetUserDefaultLocaleName
fungsi, kecuali Anda menetapkan budaya ke DefaultThreadCurrentCulture properti 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 budayanya sendiri. Anda mendapatkan budaya utas saat ini dengan mengambil nilai CultureInfo.CurrentCulture properti, seperti yang diilustrasikan contoh berikut.
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]
Mengatur properti CurrentCulture secara eksplisit
Untuk mengubah budaya yang digunakan oleh utas yang ada, Anda mengatur CultureInfo.CurrentCulture properti ke budaya baru. Jika Anda secara eksplisit mengubah budaya utas dengan cara ini, perubahan tersebut tetap ada jika utas melewati batas domain aplikasi. Contoh berikut mengubah budaya utas saat ini menjadi Belanda (Belanda). Ini juga menunjukkan bahwa, ketika utas saat ini melewati batas domain aplikasi, budayanya saat ini tetap berubah.
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
Catatan
Mengubah budaya dengan menggunakan CultureInfo.CurrentCulture properti memerlukan SecurityPermission izin dengan nilai yang ControlThread ditetapkan. Memanipulasi utas berbahaya karena status 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 budaya utas dalam kode semi-tepercaya.
Dimulai dengan .NET Framework 4, 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 Bahasa 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: {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 €
Anda juga dapat menggunakan CultureInfo.CurrentCulture properti bersama dengan HttpRequest.UserLanguages properti untuk mengatur CurrentCulture properti aplikasi ASP.NET ke budaya pilihan pengguna, seperti yang diilustrasikan contoh berikut.
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(Request13.UserLanguages[0]);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))
Kultur saat ini dan penimpaan pengguna
Windows memungkinkan pengguna untuk mengambil alih nilai CultureInfo properti standar objek dan objek terkait dengan menggunakan Opsi Regional dan Bahasa di Panel Kontrol. Objek CultureInfo yang CurrentCulture dikembalikan oleh properti mencerminkan penimpaan pengguna ini dalam kasus berikut:
Jika budaya utas saat ini diatur secara implisit oleh fungsi Windows
GetUserDefaultLocaleName
.Jika budaya utas saat ini yang ditentukan oleh DefaultThreadCurrentCulture properti sesuai dengan budaya 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 budaya utas saat ini diatur secara eksplisit ke budaya yang dibuat oleh CultureInfo(String) konstruktor, dan budaya tersebut sesuai dengan budaya sistem Windows saat ini.
Dalam beberapa kasus, terutama untuk aplikasi server, mengatur budaya saat ini ke CultureInfo objek yang mencerminkan penimpaan pengguna mungkin tidak diinginkan. Sebagai gantinya, Anda dapat mengatur budaya saat ini ke CultureInfo objek yang tidak mencerminkan penimpaan pengguna dengan cara berikut:
Dengan memanggil CultureInfo(String, Boolean) konstruktor dengan nilai
false
untukuseUserOverride
argumen .Dengan memanggil GetCultureInfo metode , yang mengembalikan objek baca-saja CultureInfo yang di-cache.
Budaya saat ini dan aplikasi UWP
Di aplikasi Platform Windows Universal (UWP), CurrentCulture properti adalah baca-tulis, sama seperti di aplikasi .NET Framework dan .NET Core; Anda dapat menggunakannya untuk mendapatkan dan mengatur budaya saat ini. Namun, aplikasi UWP tidak membedakan antara budaya saat ini dan budaya UI saat ini. Properti CurrentCulture dan CurrentUICulture memetakan ke nilai pertama dalam koleksi Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages .
Di aplikasi .NET Framework dan .NET Core, budaya saat ini adalah pengaturan per utas, dan CurrentCulture properti hanya mencerminkan budaya utas saat ini. Di aplikasi UWP, budaya saat ini memetakan ke properti Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages , yang merupakan pengaturan global. Mengatur properti mengubah CurrentCulture budaya seluruh aplikasi; budaya tidak dapat diatur berdasarkan per utas.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk