CultureInfo.DefaultThreadCurrentUICulture Tulajdonság

Definíció

Lekéri vagy beállítja az aktuális alkalmazástartományban lévő szálak alapértelmezett felhasználói felületi kultúráját.

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

Tulajdonság értéke

Az aktuális alkalmazástartományban lévő szálak alapértelmezett felhasználói felületi kultúrája, vagy null ha az aktuális rendszer felhasználói felületi kultúrája az alapértelmezett szál felhasználói felületi kultúrája az alkalmazástartományban.

Kivételek

Egy halmazműveletben a Name tulajdonság értéke érvénytelen.

Példák

Az alábbi példa a .NET alapértelmezett viselkedését mutatja be egy új szál aktuális kultúrájának meghatározásában. Angol és orosz nyelvi erőforrásokat használ. Az alábbi GreetingStrings.txt nevű szövegfájl tartalmazza az angol nyelvű erőforrásokat:

greeting =Hello again!
newGreeting=Hello!

A rendszer egy GreetingStrings.resources nevű bináris .resources fájlba fordítja a következő paranccsal az Erőforrásfájl-generátor használatával.

resgen greetingstrings.txt

A következő GreetingStrings.ru-RU.txt nevű szövegfájl tartalmazza az orosz nyelvi erőforrásokat:

greeting=Еще раз привет!
newGreeting=Привет!

Egy GreetingStrings nevű bináris .resources fájlba van lefordítva.ru-RU.resources parancsot az erőforrásfájl-generátorral az alábbi paranccsal.

resgen greetingstrings.ru-RU.txt

Az alább látható alkalmazáskód egy Example1.vb vagy Example1.cs nevű fájlban található. A rendszer a Visual Basic fordító következő parancsával lefordítja egy végrehajtható fájlra:

vbc Example1.vb /resource:GreetingStrings.resources

A C#-fordító esetében a parancs hasonló:

csc /resource:GreetingStrings.resources Example1.cs

Ez létrehoz egy szerelvényt, amely tartalmazza a példa végrehajtható kódját, valamint a tartalék kultúra erőforrásait. Az Assembly Linkerrel az orosz (Oroszország) kultúra erőforrásfájlját is létrehozhatja a következő paranccsal:

>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll

A példa indításkor az aktuális kultúrát és a jelenlegi felhasználói felületi kultúrát minden rendszeren orosz (Oroszország) értékre állítja, kivéve azokat, amelyeken az alapértelmezett rendszerkultúra már orosz (Oroszország). Ha az alapértelmezett rendszerkultúra már orosz (Oroszország), a kód az aktuális kultúrát és a jelenlegi felhasználói felületi kultúrát angolra állítja (Egyesült Államok). Ezután meghívja a ShowGreeting rutint, amely egy egyszerű sztringet jelenít meg az első híváskor, és egy kissé eltérő sztringet a későbbi metódushívásokon. Ezután létrehoz egy új szálat, amely a rutint ShowGreeting is végrehajtja.

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!

Ahogy a példa kimenete is mutatja, amikor a példa egy olyan számítógépen fut, amelynek a rendszerkultúra angol (Egyesült Államok), a fő szál a kezdeti sztringet orosz nyelven jeleníti meg. Mivel azonban a feldolgozószál kultúrája az alkalmazás jelenlegi kultúrája helyett az aktuális Windows rendszerkultúrából származik, a munkaszál angol nyelven jeleníti meg a sztringet.

Az alábbi példa az új alkalmazáslánc jelenlegi és jelenlegi felhasználói felületi kultúrájának meghatározásához használja a tulajdonságokat és a DefaultThreadCurrentCultureDefaultThreadCurrentUICulture tulajdonságokat.

A példa ugyanazokat az erőforrásfájlokat használja, mint az előző példában. A honosított orosz nyelvi erőforrások műholdas szerelvénybe való fordítására és beágyazására vonatkozó parancsok is azonosak, azzal a kivételrel, hogy a végrehajtható szerelvény neve megváltozik.

A példa indításkor az aktuális kultúrát és a jelenlegi felhasználói felületi kultúrát minden rendszeren orosz (Oroszország) értékre állítja, kivéve azokat, amelyeken az alapértelmezett rendszerkultúra már orosz (Oroszország). Ha az alapértelmezett rendszerkultúra már orosz (Oroszország), akkor a jelenlegi kultúrát és a jelenlegi felhasználói felületi kultúrát angolra állítja (Egyesült Államok). Ezután meghívja a ShowGreeting rutint, amely egy egyszerű sztringet jelenít meg az első híváskor, és egy kissé eltérő sztringet a későbbi metódushívásokon. Ezután létrehoz egy új szálat, amely a rutint ShowGreeting is végrehajtja.

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:
'       Привет!
'       Еще раз привет!

Ahogy a példa kimenete is mutatja, amikor a példa egy olyan számítógépen fut, amelynek a rendszerkultúra angol (Egyesült Államok), a fő szál és a feldolgozószál is az orosz nyelven jeleníti meg a sztringeket.

Megjegyzések

A .NET Framework 4-es és korábbi verzióiban alapértelmezés szerint az összes szál felhasználói felületi kultúrája a Windows rendszerkultúra szerint van beállítva. Az olyan alkalmazások esetében, amelyek jelenlegi felhasználói felületi kultúrája eltér az alapértelmezett rendszerkultúrától, ez a viselkedés gyakran nem kívánatos. A .NET Framework 4.5+-ban a DefaultThreadCurrentUICulture tulajdonság lehetővé teszi az alkalmazástartományban lévő összes szál alapértelmezett felhasználói felületi kultúrájának meghatározását.

Important

Ha nem állította be kifejezetten az alkalmazástartományban végrehajtó meglévő szálak felhasználói felületi kultúráját, a DefaultThreadCurrentUICulture tulajdonság beállítása ezen szálak kultúráját is megváltoztatja. Ha azonban ezek a szálak egy másik alkalmazástartományban futnak, a kultúrájukat az DefaultThreadCurrentUICulture adott alkalmazástartományban lévő tulajdonság, vagy ha nincs megadva alapértelmezett érték, az alapértelmezett rendszerkultúra határozza meg. Ezért azt javasoljuk, hogy mindig explicit módon állítsa be a fő alkalmazásszál kultúráját, és ne támaszkodjon a DefaultThreadCurrentUICulture tulajdonságra a fő alkalmazásszál kultúrájának meghatározásához.

Ha nem állítja be explicit módon, a DefaultThreadCurrentUICulture tulajdonság értéke null, és az alkalmazástartomány azon szálainak aktuális kultúráját, amelyekhez nem rendeltek explicit kultúrát, az alapértelmezett Windows rendszerkultúra határozza meg.

A kultúrákról, a szálakról és az alkalmazástartományokról további információt a "Kultúra és szálak" és a "Kultúra és alkalmazástartományok" című szakasz tartalmaz CultureInfo.

A következőre érvényes:

Lásd még