CultureInfo.DefaultThreadCurrentUICulture Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendapatkan atau mengatur budaya UI default untuk utas di domain aplikasi saat ini.
public:
static property System::Globalization::CultureInfo ^ DefaultThreadCurrentUICulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public static System.Globalization.CultureInfo DefaultThreadCurrentUICulture { get; set; }
public static System.Globalization.CultureInfo? DefaultThreadCurrentUICulture { get; set; }
static member DefaultThreadCurrentUICulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentUICulture As CultureInfo
Nilai Properti
Budaya UI default untuk utas di domain aplikasi saat ini, atau null
jika budaya UI sistem saat ini adalah budaya UI utas default di domain aplikasi.
Pengecualian
Dalam operasi yang ditetapkan, Name nilai properti tidak valid.
Contoh
Contoh berikut menggambarkan perilaku default .NET Framework dalam menentukan budaya utas baru saat ini. Ini menggunakan sumber daya bahasa Inggris dan Rusia. File teks berikut bernama GreetingStrings.txt berisi sumber daya bahasa Inggris:
greeting =Hello again!
newGreeting=Hello!
Ini dikompilasi ke file biner .resources bernama GreetingStrings.resources dengan menggunakan Generator File Sumber Daya dengan perintah berikut.
resgen greetingstrings.txt
File teks berikut bernama GreetingStrings.ru-RU.txt berisi sumber daya bahasa Rusia:
greeting=Еще раз привет!
newGreeting=Привет!
Ini dikompilasi ke file biner .resources bernama GreetingStrings.ru-RU.resources dengan menggunakan Generator File Sumber Daya dengan perintah berikut.
resgen greetingstrings.ru-RU.txt
Kode aplikasi, yang ditunjukkan di bawah ini, berada dalam file bernama Example1.vb atau Example1.cs. Ini dikompilasi ke executable dengan menggunakan perintah berikut untuk pengkompilasi Visual Basic:
vbc Example1.vb /resource:GreetingStrings.resources
Untuk pengkompilasi C#, perintahnya mirip:
csc /resource:GreetingStrings.resources Example1.cs
Ini membuat assembly yang mencakup contoh kode yang dapat dieksekusi bersama dengan sumber daya untuk budaya fallback-nya. Anda juga dapat menggunakan Assembly Linker untuk membuat file sumber daya untuk budaya Rusia (Rusia) dengan perintah berikut:
>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll
Pada saat startup, contoh menetapkan budaya saat ini dan budaya UI saat ini ke Rusia (Rusia) pada semua sistem kecuali yang budaya sistem defaultnya sudah Rusia (Rusia). Jika budaya sistem default sudah Rusia (Rusia), kode menetapkan budaya saat ini dan budaya UI saat ini ke Bahasa Inggris (Amerika Serikat). Kemudian memanggil ShowGreeting
rutinitas, yang menampilkan string sederhana saat pertama kali dipanggil dan string yang sedikit berbeda pada panggilan metode berikutnya. Selanjutnya, ia membuat utas baru, yang juga menjalankan ShowGreeting
rutinitas.
using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;
[assembly:NeutralResourcesLanguageAttribute("en-US")]
public class Example
{
private static int nGreetings = 0;
private static ResourceManager rm;
public static void Main()
{
AppDomain domain = AppDomain.CurrentDomain;
rm = new ResourceManager("GreetingStrings",
typeof(Example).Assembly);
CultureInfo culture = null;
if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
culture = CultureInfo.CreateSpecificCulture("en-US");
else
culture = CultureInfo.CreateSpecificCulture("ru-RU");
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
ShowGreeting();
Thread.Sleep(1000);
Thread workerThread = new Thread(Example.ShowGreeting);
workerThread.Start();
}
private static void ShowGreeting()
{
string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
rm.GetString("greeting");
nGreetings++;
Console.WriteLine("{0}", greeting);
}
}
// The example displays the following output:
// Привет!
// Hello again!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading
<Assembly:NeutralResourcesLanguageAttribute("en-US")>
Public Class Example
Private Shared nGreetings As Integer = 0
Private Shared rm As ResourceManager
Public Shared Sub Main()
Dim domain As AppDomain = AppDomain.CurrentDomain
rm = New ResourceManager("GreetingStrings",
GetType(Example).Assembly)
Dim culture As CultureInfo = Nothing
If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
culture = CultureInfo.CreateSpecificCulture("en-US")
Else
culture = CultureInfo.CreateSpecificCulture("ru-RU")
End If
Thread.CurrentThread.CurrentCulture = culture
Thread.CurrentThread.CurrentUICulture = culture
ShowGreeting()
Thread.Sleep(1000)
Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
workerThread.Start()
End Sub
Private Shared Sub ShowGreeting()
Dim greeting As String = CStr(IIf(nGreetings = 0,
rm.GetString("newGreeting"),
rm.GetString("greeting")))
nGreetings += 1
Console.WriteLine("{0}", greeting)
End Sub
End Class
' The example displays the following output:
' Привет!
' Hello again!
Seperti yang ditunjukkan oleh output dari contoh, ketika contoh dijalankan pada komputer yang budaya sistemnya adalah Bahasa Inggris (Amerika Serikat), utas utama menampilkan string awalnya dalam bahasa Rusia. Namun, karena budaya utas pekerja berasal dari budaya sistem Windows saat ini daripada budaya aplikasi saat ini, utas pekerja menampilkan stringnya dalam bahasa Inggris.
Contoh berikut menggunakan DefaultThreadCurrentCulture properti dan DefaultThreadCurrentUICulture untuk menentukan budaya saat ini dan budaya UI saat ini dari utas aplikasi baru.
Contohnya menggunakan file sumber daya yang sama dengan contoh sebelumnya. Perintah untuk mengkompilasi dan menyematkan sumber daya bahasa Rusia yang dilokalkan ke dalam rakitan satelit juga identik, kecuali bahwa nama rakitan yang dapat dieksekusi berubah.
Pada saat startup, contoh menetapkan budaya saat ini dan budaya UI saat ini ke Rusia (Rusia) pada semua sistem kecuali yang budaya sistem defaultnya sudah Rusia (Rusia). Jika budaya sistem default sudah Rusia (Rusia), itu menetapkan budaya saat ini dan budaya UI saat ini ke Bahasa Inggris (Amerika Serikat). Kemudian memanggil ShowGreeting
rutinitas, yang menampilkan string sederhana saat pertama kali dipanggil dan string yang sedikit berbeda pada panggilan metode berikutnya. Selanjutnya, ia membuat utas baru, yang juga menjalankan ShowGreeting
rutinitas.
using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;
[assembly:NeutralResourcesLanguageAttribute("en-US")]
public class Example
{
private static int nGreetings = 0;
private static ResourceManager rm;
public static void Main()
{
AppDomain domain = AppDomain.CurrentDomain;
rm = new ResourceManager("GreetingStrings",
typeof(Example).Assembly);
CultureInfo culture = null;
if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
culture = CultureInfo.CreateSpecificCulture("en-US");
else
culture = CultureInfo.CreateSpecificCulture("ru-RU");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
ShowGreeting();
Thread.Sleep(1000);
Thread workerThread = new Thread(Example.ShowGreeting);
workerThread.Start();
}
private static void ShowGreeting()
{
string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
rm.GetString("greeting");
nGreetings++;
Console.WriteLine("{0}", greeting);
}
}
// The example displays the following output:
// Привет!
// Еще раз привет!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading
<Assembly:NeutralResourcesLanguageAttribute("en-US")>
Public Class Example
Private Shared nGreetings As Integer = 0
Private Shared rm As ResourceManager
Public Shared Sub Main()
Dim domain As AppDomain = AppDomain.CurrentDomain
rm = New ResourceManager("GreetingStrings",
GetType(Example).Assembly)
Dim culture As CultureInfo = Nothing
If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
culture = CultureInfo.CreateSpecificCulture("en-US")
Else
culture = CultureInfo.CreateSpecificCulture("ru-RU")
End If
CultureInfo.DefaultThreadCurrentCulture = culture
CultureInfo.DefaultThreadCurrentUICulture = culture
Thread.CurrentThread.CurrentCulture = culture
Thread.CurrentThread.CurrentUICulture = culture
ShowGreeting()
Thread.Sleep(1000)
Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
workerThread.Start()
End Sub
Private Shared Sub ShowGreeting()
Dim greeting As String = CStr(IIf(nGreetings = 0,
rm.GetString("newGreeting"),
rm.GetString("greeting")))
nGreetings += 1
Console.WriteLine("{0}", greeting)
End Sub
End Class
' The example displays the following output:
' Привет!
' Еще раз привет!
Seperti yang ditunjukkan oleh output dari contoh, ketika contoh dijalankan di komputer yang budaya sistemnya adalah bahasa Inggris (Amerika Serikat), utas utama dan utas pekerja menampilkan string mereka dalam bahasa Rusia.
Keterangan
Dalam .NET Framework 4 dan versi sebelumnya, secara default, budaya UI dari semua utas diatur ke budaya sistem Windows. Untuk aplikasi yang budaya UI saat ini berbeda dari budaya sistem default, perilaku ini sering kali tidak diinginkan. Dalam .NET Framework 4.5, DefaultThreadCurrentUICulture properti memungkinkan Anda menentukan budaya UI default dari semua utas dalam domain aplikasi.
Penting
Jika Anda belum secara eksplisit mengatur budaya UI dari utas yang ada yang dijalankan di domain aplikasi, mengatur DefaultThreadCurrentUICulture properti juga mengubah budaya utas ini. Namun, jika utas ini dijalankan di domain aplikasi lain, budayanya ditentukan oleh properti di domain aplikasi tersebut DefaultThreadCurrentUICulture atau, jika tidak ada nilai default yang ditentukan, oleh budaya sistem default. Karena itu, kami sarankan Anda selalu secara eksplisit mengatur budaya utas aplikasi utama Anda dan tidak mengandalkan DefaultThreadCurrentUICulture properti untuk menentukan budaya utas aplikasi utama.
Kecuali diatur secara eksplisit, nilai DefaultThreadCurrentUICulture properti adalah null
, dan budaya saat ini dari semua utas dalam domain aplikasi yang belum ditetapkan budaya eksplisit didefinisikan oleh budaya sistem Windows default.
Untuk informasi selengkapnya tentang budaya, utas, dan domain aplikasi, lihat bagian "Budaya dan utas" dan "Budaya dan domain aplikasi" di CultureInfo halaman referensi.