Bagikan melalui


CultureInfo.DefaultThreadCurrentUICulture Properti

Definisi

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.

Berlaku untuk

Lihat juga