CultureInfo.CurrentUICulture Proprietà

Definizione

Ottiene o imposta l'oggetto CultureInfo che rappresenta le impostazioni cultura correnti dell'interfaccia utente usate da Gestione risorse per cercare le risorse specifiche delle impostazioni cultura in fase di esecuzione.

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

Valore della proprietà

CultureInfo

Impostazioni cultura usate da Gestione risorse per cercare le risorse specifiche delle impostazioni cultura in fase di esecuzione.

Eccezioni

La proprietà è impostata su null.

La proprietà è impostata su un nome delle impostazioni cultura che non può essere usato per individuare un file di risorse. I nomi dei file di risorse possono includere solo lettere, numeri, trattini o caratteri di sottolineatura.

Esempio

Nell'esempio di codice seguente viene illustrato come modificare CurrentCulture e CurrentUICulture del thread corrente.

using namespace System;
using namespace System::Globalization;
using namespace System::Threading;

int main()
{
   // Display the name of the current thread culture.
   Console::WriteLine("CurrentCulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Change the current culture to th-TH.
   CultureInfo::CurrentCulture = gcnew CultureInfo("th-TH",false);
   Console::WriteLine("CurrentCulture is now {0}.", CultureInfo::CurrentCulture->Name);
   
   // Displays the name of the CurrentUICulture of the current thread.
   Console::WriteLine("CurrentUICulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Changes the CurrentUICulture of the current thread to ja-JP.
   CultureInfo::CurrentUICulture = gcnew CultureInfo("ja-JP",false);
   Console::WriteLine("CurrentUICulture is now {0}.", CultureInfo::CurrentCulture->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.
using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      // Display the name of the current thread 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 Example
   Public Sub Main()

      ' Display the name of the current thread 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.

Commenti

Le impostazioni cultura correnti dell'interfaccia utente sono una proprietà per thread. In altre informazioni, ogni thread ha le proprie impostazioni cultura correnti dell'interfaccia utente. Questa proprietà equivale al recupero o, a partire dal .NET Framework 4.6, all'impostazione dell'oggetto CultureInfo assegnato alla System.Threading.Thread.CurrentThread.CurrentUICulture proprietà . Quando un thread viene avviato, le impostazioni cultura dell'interfaccia utente vengono inizialmente determinate come segue:

  • Recuperando le impostazioni cultura specificate dalla proprietà nel dominio applicazione in cui è in esecuzione il thread, se il valore della proprietà DefaultThreadCurrentUICulture non è null .

  • Se il thread è un thread del pool di thread che esegue un'operazione asincrona basata su attività e l'app è destinata a .NET Framework 4.6 o versione successiva del .NET Framework, le impostazioni cultura dell'interfaccia utente sono determinate dalle impostazioni cultura dell'interfaccia utente del thread chiamante. L'esempio seguente modifica le impostazioni cultura correnti dell'interfaccia utente in portoghese (Brasile) e avvia sei attività, ognuna delle quali visualizza l'ID thread, l'ID attività e le impostazioni cultura correnti dell'interfaccia utente. Ognuna delle attività (e dei thread) ha ereditato le impostazioni cultura dell'interfaccia utente del thread chiamante.

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.Versioning;
    using System.Threading;
    using System.Threading.Tasks;
    
    [assembly:TargetFramework(".NETFramework,Version=v4.6")]
    
    public class Example
    {
       public static async Task Main()
       {
          var tasks = new List<Task>();
          Console.WriteLine("The current UI culture is {0}",
                            Thread.CurrentThread.CurrentUICulture.Name);
          Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR");
          // Change the current UI culture to Portuguese (Brazil).
          Console.WriteLine("Current UI culture changed to {0}",
                            Thread.CurrentThread.CurrentUICulture.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("UI Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId,
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     Thread.CurrentThread.CurrentUICulture.Name);
                                } ));
    
          await Task.WhenAll(tasks.ToArray());
       }
    }
    // The example displays output like the following:
    //     The current UI culture is en-US
    //     Current UI culture changed to pt-BR
    //     Application thread is thread 9
    //     UI Culture of task 2 on thread 11 is pt-BR
    //     UI Culture of task 1 on thread 10 is pt-BR
    //     UI Culture of task 3 on thread 11 is pt-BR
    //     UI Culture of task 5 on thread 11 is pt-BR
    //     UI Culture of task 6 on thread 11 is pt-BR
    //     UI Culture of task 4 on thread 10 is pt-BR
    
    Imports System.Collections.Generic
    Imports System.Globalization
    Imports System.Runtime.Versioning
    Imports System.Threading
    Imports System.Threading.Tasks
    
    <assembly:TargetFramework(".NETFramework,Version=v4.6")>
    
    Module Example
       Public Sub Main()
          Dim tasks As New List(Of Task)
          Console.WriteLine("The current UI culture is {0}", 
                            Thread.CurrentThread.CurrentUICulture.Name)
          Thread.CurrentThread.CurrentUICulture = New CultureInfo("pt-BR")
          ' Change the current UI culture to Portuguese (Brazil).
          Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentUICulture.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.CurrentUICulture.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
    

    Per altre informazioni, vedere la sezione "Impostazioni cultura e operazioni asincrone basate su attività" CultureInfo nell'argomento .

  • Chiamando la funzione GetUserDefaultUILanguage Windows.

Nota

Nel .NET Compact Framework la proprietà CurrentUICulture è di sola lettura. Le impostazioni cultura correnti dell'interfaccia utente sono determinate dalle impostazioni internazionali del sistema e non possono essere modificate a livello di codice.

A partire dalla .NET Framework 4.6, per modificare le impostazioni cultura dell'interfaccia utente usate da un thread, impostare la proprietà Thread.CurrentUICulture sulle nuove impostazioni cultura. Se si modificano in modo esplicito le impostazioni cultura dell'interfaccia utente di un thread in questo modo, tale modifica viene mantenuta se il thread supera i limiti del dominio applicazione.

Nota

Nella versione .NET Framework 4.5.2 e versioni precedenti, la CurrentUICulture proprietà è di sola lettura. in altri, è possibile recuperare il valore della proprietà, ma non impostarlo. Per modificare le impostazioni cultura correnti dell'interfaccia utente, assegnare alla proprietà l'oggetto che rappresenta le nuove CultureInfo impostazioni cultura Thread.CurrentThread.CurrentUICulture dell'interfaccia utente. A partire dalla .NET Framework 4.6, la proprietà è di lettura/scrittura. È possibile impostare e recuperare il CultureInfo.CurrentUICulture valore della proprietà. Se si imposta il valore della proprietà su un oggetto che rappresenta nuove impostazioni cultura, cambia anche CultureInfo il valore della proprietà Thread.CurrentThread.CurrentCulture .

Contenuto della sezione:

Recupero delle impostazioni cultura correnti dell'interfaccia utente
Impostazione esplicita delle impostazioni cultura correnti dell'interfaccia utente
Impostazione implicita delle impostazioni cultura correnti dell'interfaccia utente
Considerazioni sulla sicurezza
Impostazioni cultura e impostazioni cultura dell'interfaccia Windows correnti\

Recupero delle impostazioni cultura correnti dell'interfaccia utente

La CultureInfo.CurrentUICulture proprietà è un'impostazione per thread, in altre caso ogni thread può avere impostazioni cultura dell'interfaccia utente specifiche. È possibile ottenere le impostazioni cultura dell'interfaccia utente del thread corrente recuperando il valore della CultureInfo.CurrentUICulture proprietà , come illustrato nell'esempio seguente.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentUICulture;
      Console.WriteLine("The current UI culture is {0} [{1}]",
                        culture.NativeName, culture.Name);
   }
}
// The example displays output like the following:
//       The current UI culture is English (United States) [en-US]
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim culture As CultureInfo = CultureInfo.CurrentCulture
      Console.WriteLine("The current UI culture is {0} [{1}]",
                        culture.NativeName, culture.Name)
   End Sub
End Module
' The example displays output like the following:
'     The current UI culture is English (United States) [en-US]

È anche possibile recuperare il valore delle impostazioni cultura dell'interfaccia utente del thread corrente dalla Thread.CurrentUICulture proprietà .

Impostazione esplicita delle impostazioni cultura correnti dell'interfaccia utente

A partire dalla .NET Framework 4.6, è possibile modificare le impostazioni cultura correnti dell'interfaccia utente assegnando un oggetto che rappresenta le nuove impostazioni CultureInfo cultura alla CultureInfo.CurrentUICulture proprietà . Le impostazioni cultura correnti dell'interfaccia utente possono essere impostate su impostazioni cultura specifiche (ad esempio en-US o de-DE) o su impostazioni cultura neutre (ad esempio en o de). L'esempio seguente imposta le impostazioni cultura correnti dell'interfaccia utente su fr-FR o francese (Francia).

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("The current UI culture: {0}",
                        CultureInfo.CurrentUICulture.Name);

      CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      Console.WriteLine("The current UI culture: {0}",
                        CultureInfo.CurrentUICulture.Name);
   }
}
// The example displays output like the following:
//       The current UI culture: en-US
//       The current UI culture: fr-FR
Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Console.WriteLine("The current UI culture: {0}", 
                        CultureInfo.CurrentUICulture.Name)
      
      CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR")
      Console.WriteLine("The current UI culture: {0}", 
                        CultureInfo.CurrentUICulture.Name)
   End Sub
End Module
' The example displays output like the following:
'       The current UI culture: en-US
'       The current UI culture: fr-FR

In un'applicazione multithreading è possibile impostare in modo esplicito le impostazioni cultura dell'interfaccia utente di qualsiasi thread assegnando un oggetto che rappresenta le impostazioni cultura alla CultureInfo proprietà del Thread.CurrentUICulture thread. Se il thread di cui si desidera impostare le impostazioni cultura è il thread corrente, è possibile assegnare le nuove impostazioni cultura alla CultureInfo.CurrentUICulture proprietà . Quando le impostazioni cultura dell'interfaccia utente di un thread sono impostate in modo esplicito, tale thread mantiene le stesse impostazioni cultura anche se supera i limiti del dominio applicazione ed esegue il codice in un altro dominio applicazione.

Impostazione implicita delle impostazioni cultura correnti dell'interfaccia utente

Quando un thread, incluso il thread principale dell'applicazione, viene creato per la prima volta, per impostazione predefinita le impostazioni cultura correnti dell'interfaccia utente vengono impostate come segue:

  • Utilizzando le impostazioni cultura definite dalla proprietà DefaultThreadCurrentUICulture per il dominio applicazione corrente se il valore della proprietà non è null .

  • Usando le impostazioni cultura predefinite del sistema. Nei sistemi che usano il sistema Windows, Common Language Runtime chiama la funzione Windows GetUserDefaultUILanguage per impostare le impostazioni cultura correnti dell'interfaccia utente. GetUserDefaultUILanguage restituisce le impostazioni cultura predefinite dell'interfaccia utente impostate dall'utente. Se l'utente non ha impostato una lingua predefinita dell'interfaccia utente, restituisce le impostazioni cultura originariamente installate nel sistema.

Se il thread supera i limiti dell'applicazione ed esegue codice in un altro dominio applicazione, le impostazioni cultura vengono determinate nello stesso modo di un thread appena creato.

Si noti che se si impostano impostazioni cultura dell'interfaccia utente specifiche diverse dalle impostazioni cultura dell'interfaccia utente installate dal sistema o dalle impostazioni cultura dell'interfaccia utente preferite dell'utente e l'applicazione avvia più thread, le impostazioni cultura correnti dell'interfaccia utente di tali thread saranno quelle restituite dalla funzione, a meno che non si assegnino impostazioni cultura alla proprietà nel dominio applicazione in cui è in esecuzione il GetUserDefaultUILanguage DefaultThreadCurrentUICulture thread.

Considerazioni relative alla sicurezza

La modifica delle impostazioni cultura del thread corrente richiede SecurityPermission un'autorizzazione con il ControlThread valore impostato.

Attenzione

La modifica dei thread è pericolosa a causa dello stato di sicurezza associato ai thread. Pertanto, questa autorizzazione deve essere concessa solo al codice attendibile e quindi solo se necessario. Non è possibile modificare le impostazioni cultura del thread nel codice semi-attendibile.

Impostazioni cultura dell'interfaccia utente correnti e app UWP

Nelle app UWP (Universal Windows Platform), la proprietà è di lettura/scrittura, così come si trova nelle app .NET Framework e .NET Core. È possibile usarla sia per ottenere che per impostare le impostazioni cultura CurrentUICulture correnti. Tuttavia, le app UWP non fanno distinzione tra le impostazioni cultura correnti e le impostazioni cultura correnti dell'interfaccia utente. Le CurrentCulture proprietà e vengono CurrentUICulture mappate al primo valore nell'Windows. Raccolta ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages.

Nelle .NET Framework e nelle app .NET Core, le impostazioni cultura correnti dell'interfaccia utente sono un'impostazione per thread e la proprietà riflette solo le impostazioni cultura dell'interfaccia CurrentUICulture utente del thread corrente. Nelle app UWP le impostazioni cultura correnti vengono mappate Windows. Proprietà ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages, che è un'impostazione globale. CurrentCultureL'impostazione della proprietà modifica le impostazioni cultura dell'intera app. Le impostazioni cultura non possono essere impostate per ogni thread.

Si applica a

Vedi anche