CultureInfo Classe

Definizione

Fornisce informazioni su impostazioni cultura specifiche ,denominate impostazioni locali per lo sviluppo di codice non gestito. Le informazioni includono i nomi delle impostazioni cultura, il sistema di scrittura, il calendario usato, l'ordinamento delle stringhe e la formattazione per date e numeri.

public ref class CultureInfo : IFormatProvider
public ref class CultureInfo : ICloneable, IFormatProvider
public class CultureInfo : IFormatProvider
public class CultureInfo : ICloneable, IFormatProvider
[System.Serializable]
public class CultureInfo : ICloneable, IFormatProvider
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class CultureInfo : ICloneable, IFormatProvider
type CultureInfo = class
    interface IFormatProvider
type CultureInfo = class
    interface ICloneable
    interface IFormatProvider
[<System.Serializable>]
type CultureInfo = class
    interface ICloneable
    interface IFormatProvider
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type CultureInfo = class
    interface ICloneable
    interface IFormatProvider
Public Class CultureInfo
Implements IFormatProvider
Public Class CultureInfo
Implements ICloneable, IFormatProvider
Ereditarietà
CultureInfo
Attributi
Implementazioni

Commenti

La CultureInfo classe fornisce informazioni associate a impostazioni cultura specifiche, ad esempio lingua, sottolanguage, paese/area geografica, calendario e convenzioni. Questa classe fornisce anche l'accesso a istanze specifiche culturali degli oggetti DateTimeFormatInfo, NumberFormatInfo, CompareInfo e TextInfo. Questi oggetti contengono le informazioni necessarie per operazioni specifiche culturali, come gestione delle lettere maiuscole e minuscole, formattare date e numeri, e confrontare stringhe. La CultureInfo classe viene usata direttamente o indirettamente dalle classi che formattano, analizzano o modificano dati specifici della cultura, ad esempio String, DateTime, DateTimeOffset e i tipi numerici.

Nomi e identificatori delle culture

La CultureInfo classe specifica un nome univoco per ogni lingua, in base a RFC 4646. Il nome è una combinazione di un codice culturale ISO 639 a due o tre lettere minuscole associato a una lingua e di un codice culturale in maiuscolo ISO 3166 associato a un paese o regione. Inoltre, per le app in esecuzione su Windows 10 o versioni successive, sono supportati i nomi di cultura che corrispondono ai validi tag di lingua BCP-47.

Note

Quando un nome delle impostazioni cultura viene passato a un costruttore di classe o a un metodo come CreateSpecificCulture o CultureInfo, il relativo caso non è significativo.

Il formato per il nome della cultura basato su RFC 4646 è languagecode2-country/regioncode2, dove languagecode2 è il codice di lingua a due lettere e country/regioncode2 è il codice del sottocodice a due lettere. Esempi includono ja-JP per il giapponese (Giappone) e en-US per l'inglese (Stati Uniti). Nei casi in cui non è disponibile un codice linguistico a due lettere, viene usato un codice di tre lettere definito in ISO 639-3.

Alcuni nomi di cultura specificano anche un alfabeto ISO 15924. Ad esempio, Cyrl specifica lo script cirillico e Latn specifica lo script latino. Un nome delle impostazioni cultura che include uno script usa il modello languagecode2-scripttag-country/regioncode2. Un esempio di questo tipo di nome di cultura è uz-Cyrl-UZ per uzbeko (cirillico, Uzbekistan). Nei sistemi operativi Windows precedenti a Windows Vista, un nome di cultura che include uno script utilizza il modello languagecode2-country/regioncode2-scripttag, ad esempio uz-UZ-Cyrl per l'uzbeko (cirillico, Uzbekistan).

Le impostazioni cultura neutre vengono specificate solo dal codice lingua minuscolo a due lettere. Ad esempio, fr specifica le impostazioni cultura neutre per il francese e de specifica le impostazioni cultura neutre per il tedesco.

Note

Esistono due nomi di cultura che contraddicono questa regola. Le culture cinesi (semplificate), chiamate zh-Hans, e cinesi (tradizionali), chiamate zh-Hant, sono culture neutre. I nomi delle culture rappresentano lo standard corrente e devono essere usati a meno che non si abbia un motivo per usare i nomi zh-CHS e zh-CHT precedenti.

Un identificatore di cultura è un'abbreviazione numerica internazionale standard e include i componenti necessari per identificare univocamente una delle culture installate. L'applicazione può utilizzare identificatori cultura predefiniti o definire identificatori personalizzati.

Alcuni nomi e identificatori culturali predefiniti vengono utilizzati da questa e altre classi nello spazio dei nomi System.Globalization. Per informazioni dettagliate sulle informazioni culturali per i sistemi Windows, vedere la colonna Tag lingua nell'elenco dei nomi di lingua/area geografica supportati da Windows. I nomi delle culture seguono lo standard definito da BCP 47.

I nomi e gli identificatori delle culture rappresentano solo un sottoinsieme di culture che possono essere trovati in un particolare computer. Le versioni di Windows o i service pack possono modificare le impostazioni culturali disponibili. Le applicazioni possono aggiungere impostazioni cultura personalizzate usando la CultureAndRegionInfoBuilder classe . Gli utenti possono aggiungere impostazioni cultura personalizzate usando lo strumento Microsoft Locale Builder . Microsoft Locale Builder viene scritto in codice gestito usando la CultureAndRegionInfoBuilder classe .

Diversi nomi distinti sono strettamente associati a una cultura, in particolare i nomi associati ai seguenti membri della classe:

Culture invarianti, neutrali e specifiche

Le impostazioni cultura sono in genere raggruppate in tre set: culture invarianti, culture neutre e impostazioni cultura specifiche.

Una cultura invariante è indipendente dalle impostazioni cultura. L'applicazione specifica la cultura invariante per nome, usando una stringa vuota ("") o il relativo identificatore. InvariantCulture definisce un'istanza della cultura invariante. È associato alla lingua inglese, ma non a nessun paese o area geografica. Viene usato in quasi tutti i metodi nello spazio dei Globalization nomi che richiede impostazioni cultura.

Una cultura neutra è una cultura che è associata a una lingua ma non a un paese/regione. Una cultura specifica è una cultura associata a una lingua e a un paese/area geografica. Ad esempio, fr è il nome neutro per la cultura francese, e fr-FR è il nome della cultura francese (Francia) specifica. Si noti che anche il cinese (semplificato) e il cinese (tradizionale) sono considerati culture neutre.

Creare un'istanza di una classe CompareInfo per una cultura neutrale non è consigliato perché i dati che contiene sono arbitrari. Per visualizzare e ordinare i dati, specificare sia la lingua che l'area geografica. Inoltre, la Name proprietà di un CompareInfo oggetto creato per una cultura neutra restituisce solo la nazione e non include la regione.

Le culture definite hanno una gerarchia in cui il padre di una cultura specifica è una cultura neutra e il padre di una cultura neutra è la cultura invariante. La proprietà Parent contiene la cultura neutra associata a una cultura specifica. Le culture personalizzate dovrebbero definire la proprietà Parent in conformità con questo modello.

Se le risorse per impostazioni cultura specifiche non sono disponibili nel sistema operativo, vengono usate le risorse per le impostazioni cultura neutre associate. Se le risorse per la cultura neutra non sono disponibili, vengono usate le risorse incorporate nell'assembly principale. Per altre informazioni sul processo di fallback delle risorse, vedere Creazione di pacchetti e distribuzione di risorse.

L'elenco dei locali nell'API di Windows è leggermente diverso dall'elenco delle culture supportate da .NET. Se è necessaria l'interoperabilità con Windows, ad esempio tramite il meccanismo p/invoke, l'applicazione deve usare impostazioni cultura specifiche definite per il sistema operativo. L'uso della cultura specifica garantisce la coerenza con il locale di Windows equivalente, identificato con un indicatore locale uguale a LCID.

Un oggetto DateTimeFormatInfo o NumberFormatInfo può essere creato solo per la cultura invariante o per culture specifiche, non per culture neutre.

Se DateTimeFormatInfo.Calendar è il TaiwanCalendar ma Thread.CurrentCulture non è impostato su zh-TW, allora DateTimeFormatInfo.NativeCalendarName, DateTimeFormatInfo.GetEraName e DateTimeFormatInfo.GetAbbreviatedEraName restituiscono una stringa vuota ("").

Culture personalizzate

In Windows è possibile creare impostazioni locali personalizzate. Per altre informazioni, vedere Localizzazioni personalizzate.

CultureInfo e dati culturali

.NET deriva i dati culturali da due origini diverse, a seconda del sistema operativo:

  • Nelle piattaforme Unix o Windows 10 e versioni successive, i dati culturali vengono forniti dalla libreria International Components for Unicode (ICU) library. La versione specifica della libreria di ICU dipende dal singolo sistema operativo.
  • In Windows 8.1 e versioni precedenti, i dati culturali vengono forniti dal sistema operativo Windows.

Per questo motivo, le impostazioni cultura disponibili in una determinata implementazione, piattaforma o versione di .NET potrebbero non essere disponibili in un'implementazione, una piattaforma o una versione .NET diversa.

Alcuni CultureInfo oggetti variano a seconda della piattaforma sottostante. In particolare, zh-CN, ovvero cinese (Semplificato, Cina) e zh-TW, ovvero cinese (Tradizionale, Taiwan), sono culture disponibili nei sistemi Windows, ma nei sistemi Unix sono definiti come culture con alias. "zh-CN" è un alias per la cultura "zh-Hans-CN" e "zh-TW" è un alias per la cultura "zh-Hant-TW". Le impostazioni cultura con alias non vengono restituite dalle chiamate al metodo GetCultures e possono avere valori di proprietà diversi, incluse culture diverse Parent rispetto alle rispettive controparti di Windows. Per le zh-CN e zh-TW culture, queste differenze includono quanto segue:

  • Nei sistemi Windows, la cultura principale della cultura "zh-CN" è "zh-Hans" e la cultura principale della cultura "zh-TW" è "zh-Hant". La cultura madre di entrambe queste culture è "zh". Nei sistemi Unix, i genitori di entrambe le culture sono "zh". Ciò significa che, se non si forniscono risorse specifiche per le culture "zh-CN" o "zh-TW", ma si fornisce una risorsa per la cultura neutra "zh-Hans" o "zh-Hant", l'applicazione caricherà le risorse per la cultura neutra su Windows ma non su Unix. Nei sistemi Unix è necessario impostare in modo esplicito il thread CurrentUICulture su "zh-Hans" o "zh-Hant".

  • Nei sistemi Windows, chiamando CultureInfo.Equals su un'istanza che rappresenta le impostazioni cultura "zh-CN" e passandola un'istanza "zh-Hans-CN" restituisce true. Nei sistemi Unix la chiamata al metodo restituisce false. Questo comportamento si applica anche alla chiamata Equals a un'istanza "zh-TW" CultureInfo e al passaggio di un'istanza "zh-Hant-Tw".

Dati culturali dinamici

Tranne la cultura invariante, i dati culturali sono dinamici. Questo vale anche per le culture predefinite. Ad esempio, i paesi o le aree geografiche adottano nuove valute, modificano l'ortografia delle parole o modificano il calendario preferito e le definizioni delle impostazioni cultura cambiano per tenere traccia di questo. Le impostazioni culturali personalizzate sono soggette a modifiche senza preavviso e qualsiasi impostazione culturale specifica potrebbe essere sostituita da un'impostazione culturale di sostituzione personalizzata. Inoltre, come illustrato di seguito, un singolo utente può sostituire le preferenze culturali. Le applicazioni devono sempre ottenere i dati culturali in fase di esecuzione.

Caution

Quando si salvano i dati, l'applicazione deve usare la cultura invariante, un formato binario o un formato specifico indipendente dalla cultura. I dati salvati in base ai valori correnti associati a impostazioni cultura specifiche, diverse dalle impostazioni cultura invarianti, potrebbero diventare illeggibili o cambiare significato se tali impostazioni cultura cambiano.

La cultura corrente e la cultura corrente dell'interfaccia utente

Ogni thread in un'applicazione .NET ha una cultura corrente e una cultura dell'interfaccia utente corrente. La cultura attuale determina le convenzioni di formattazione per date, ore, numeri e valori di valuta, l'ordinamento del testo, le convenzioni di capitalizzazione e i metodi di confronto delle stringhe. La cultura dell'interfaccia utente corrente viene utilizzata per recuperare risorse specifiche della cultura in fase di esecuzione.

Note

Per informazioni su come la cultura corrente e la cultura dell'interfaccia utente corrente siano determinate su base per-thread, vedere la sezione Cultura e thread. Per informazioni su come vengono determinate la cultura corrente e la cultura corrente dell'interfaccia utente nei thread che eseguono operazioni asincrone basate su attività, consultare la sezione Cultura e operazioni asincrone basate su attività.

Per informazioni più dettagliate sulla cultura corrente, vedere la proprietà CultureInfo.CurrentCulture. Per informazioni più dettagliate sulla cultura dell'interfaccia utente corrente, vedere l'argomento della proprietà CultureInfo.CurrentUICulture.

Recuperare le impostazioni di cultura e interfaccia utente correnti.

È possibile ottenere un oggetto CultureInfo che rappresenta la cultura corrente in uno dei due modi seguenti:

Nell'esempio seguente, vengono recuperati i valori di entrambe le proprietà, confrontati per dimostrare che sono uguali e viene visualizzato il nome della cultura attuale.

using System;
using System.Globalization;
using System.Threading;

public class CurrentCultureEx
{
    public static void Main()
    {
        CultureInfo culture1 = CultureInfo.CurrentCulture;
        CultureInfo culture2 = Thread.CurrentThread.CurrentCulture;
        Console.WriteLine($"The current culture is {culture1.Name}");
        Console.WriteLine($"The two CultureInfo objects are equal: {culture1 == culture2}");
    }
}
// The example displays output like the following:
//     The current culture is en-US
//     The two CultureInfo objects are equal: True

È possibile ottenere un CultureInfo oggetto che rappresenta le impostazioni cultura correnti dell'interfaccia utente in uno dei due modi seguenti:

L'esempio seguente recupera i valori di entrambe le proprietà, li confronta per mostrare che sono uguali e visualizza il nome della cultura dell'interfaccia utente corrente.

using System;
using System.Globalization;
using System.Threading;

public class CurrentUIEx
{
    public static void Main()
    {
        CultureInfo uiCulture1 = CultureInfo.CurrentUICulture;
        CultureInfo uiCulture2 = Thread.CurrentThread.CurrentUICulture;
        Console.WriteLine($"The current UI culture is {uiCulture1.Name}");
        Console.WriteLine($"The two CultureInfo objects are equal: {uiCulture1 == uiCulture2}");
    }
}
// The example displays output like the following:
//     The current UI culture is en-US
//     The two CultureInfo objects are equal: True

Impostare le culture correnti e le culture correnti dell'interfaccia utente

Per modificare la cultura e la cultura dell'interfaccia utente di un thread, seguire queste istruzioni:

  1. Creare un'istanza di un CultureInfo oggetto che rappresenta quella cultura chiamando un costruttore di classe CultureInfo e passandogli il nome della cultura. Il CultureInfo(String) costruttore crea un'istanza di un CultureInfo oggetto che riflette gli override dell'utente se la nuova cultura corrisponde alla cultura corrente di Windows. Il costruttore CultureInfo(String, Boolean) consente di specificare se l'oggetto CultureInfo appena creato riflette le sostituzioni utente se la nuova cultura corrisponde alla cultura corrente di Windows.

  2. Assegnare l'oggetto CultureInfo alla CultureInfo.CurrentCulture proprietà o CultureInfo.CurrentUICulture .

Nell'esempio seguente viene recuperata la cultura corrente. Se è qualcosa di diverso dalla lingua francese (Francia), cambia la lingua attuale in francese (Francia). In caso contrario, le impostazioni culturali correnti vengono impostate su francese (Lussemburgo).

using System;
using System.Globalization;

public class ChangeEx1
{
    public static void Main()
    {
        CultureInfo current = CultureInfo.CurrentCulture;
        Console.WriteLine("The current culture is {0}", current.Name);
        CultureInfo newCulture;
        if (current.Name.Equals("fr-FR"))
            newCulture = new CultureInfo("fr-LU");
        else
            newCulture = new CultureInfo("fr-FR");

        CultureInfo.CurrentCulture = newCulture;
        Console.WriteLine("The current culture is now {0}",
                          CultureInfo.CurrentCulture.Name);
    }
}
// The example displays output like the following:
//     The current culture is en-US
//     The current culture is now fr-FR

Nell'esempio seguente viene recuperata la cultura corrente. Se si tratta di qualcosa di diverso dalla cultura slovena (Slovenia), la cultura corrente verrà cambiata in cultura slovena (Slovenia). In caso contrario, cambia la cultura corrente in Croato (Croazia).

using System;
using System.Globalization;

public class ChangeUICultureEx
{
    public static void Main()
    {
        CultureInfo current = CultureInfo.CurrentUICulture;
        Console.WriteLine($"The current UI culture is {current.Name}");
        CultureInfo newUICulture;
        if (current.Name.Equals("sl-SI"))
            newUICulture = new CultureInfo("hr-HR");
        else
            newUICulture = new CultureInfo("sl-SI");

        CultureInfo.CurrentUICulture = newUICulture;
        Console.WriteLine($"The current UI culture is now {CultureInfo.CurrentUICulture.Name}");
    }
}
// The example displays output like the following:
//     The current UI culture is en-US
//     The current UI culture is now sl-SI

Ottenere tutte le impostazioni cultura

È possibile recuperare una matrice di categorie specifiche di impostazioni cultura o di tutte le impostazioni cultura disponibili nel computer locale chiamando il GetCultures metodo . Ad esempio, è possibile recuperare culture personalizzate, specifiche o neutre, sia singolarmente che in combinazione.

Nell'esempio seguente, il metodo GetCultures viene chiamato due volte: prima con il membro di enumerazione System.Globalization.CultureTypes per recuperare tutte le culture personalizzate, e poi con il membro di enumerazione System.Globalization.CultureTypes per recuperare tutte le culture di sostituzione.

using System;
using System.Globalization;

public class GetCulturesEx
{
    public static void Main()
    {
        // Get all custom cultures.
        CultureInfo[] custom = CultureInfo.GetCultures(CultureTypes.UserCustomCulture);
        if (custom.Length == 0)
        {
            Console.WriteLine("There are no user-defined custom cultures.");
        }
        else
        {
            Console.WriteLine("Custom cultures:");
            foreach (var culture in custom)
                Console.WriteLine($"   {culture.Name} -- {culture.DisplayName}");
        }
        Console.WriteLine();

        // Get all replacement cultures.
        CultureInfo[] replacements = CultureInfo.GetCultures(CultureTypes.ReplacementCultures);
        if (replacements.Length == 0)
        {
            Console.WriteLine("There are no replacement cultures.");
        }
        else
        {
            Console.WriteLine("Replacement cultures:");
            foreach (var culture in replacements)
                Console.WriteLine($"   {culture.Name} -- {culture.DisplayName}");
        }
        Console.WriteLine();
    }
}
// The example displays output like the following:
//     Custom cultures:
//        x-en-US-sample -- English (United States)
//        fj-FJ -- Boumaa Fijian (Viti)
//
//     There are no replacement cultures.

Cultura e thread

Quando viene avviato un nuovo thread dell'applicazione, la cultura corrente e la cultura dell'interfaccia utente corrente sono definite dalla cultura corrente del sistema e non dalla cultura corrente del thread. Nell'esempio che segue viene illustrata la differenza. Imposta le impostazioni cultura correnti e le impostazioni cultura correnti dell'interfaccia utente di un thread applicazione sulle impostazioni cultura francese (Francia) (fr-FR). Se la cultura corrente è già fr-FR, l'esempio la imposta sulla cultura inglese (Stati Uniti) (en-US). Visualizza tre numeri casuali come valori di valuta e quindi crea un nuovo thread, che a sua volta visualizza tre numeri casuali più come valori di valuta. Tuttavia, come mostra l'output dell'esempio, i valori di valuta visualizzati dal nuovo thread non riflettono le convenzioni di formattazione della cultura francese (Francia), a differenza dell'output del thread dell'applicazione principale.

using System;
using System.Globalization;
using System.Threading;

public class DefaultThreadEx
{
    static Random rnd = new Random();

    public static void Main()
    {
        if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR")
        {
            // If current culture is not fr-FR, set culture to fr-FR.
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        }
        else
        {
            // Set culture to en-US.
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
        }
        ThreadProc();

        Thread worker = new Thread(ThreadProc);
        worker.Name = "WorkerThread";
        worker.Start();
    }

    private static void DisplayThreadInfo()
    {
        Console.WriteLine($"\nCurrent Thread Name: '{Thread.CurrentThread.Name}'");
        Console.WriteLine($"Current Thread Culture/UI Culture: {Thread.CurrentThread.CurrentCulture.Name}/{Thread.CurrentThread.CurrentUICulture.Name}");
    }

    private static void DisplayValues()
    {
        // Create new thread and display three random numbers.
        Console.WriteLine("Some currency values:");
        for (int ctr = 0; ctr <= 3; ctr++)
            Console.WriteLine($"   {rnd.NextDouble() * 10:C2}");
    }

    private static void ThreadProc()
    {
        DisplayThreadInfo();
        DisplayValues();
    }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          8,11 €
//          1,48 €
//          8,99 €
//          9,04 €
//
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: en-US/en-US
//       Some currency values:
//          $6.72
//          $6.35
//          $2.90
//          $7.72

È possibile impostare la cultura e la cultura dell'interfaccia utente di tutti i thread in un dominio applicazione assegnando un oggetto CultureInfo che rappresenta tale cultura alle proprietà DefaultThreadCurrentCulture e DefaultThreadCurrentUICulture. Nell'esempio seguente vengono usate queste proprietà per assicurarsi che tutti i thread nel dominio dell'applicazione predefinito condividano la stessa cultura.

using System;
using System.Globalization;
using System.Threading;

public class SetThreadsEx
{
    static Random rnd = new Random();

    public static void Main()
    {
        if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR")
        {
            // If current culture is not fr-FR, set culture to fr-FR.
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
            CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        }
        else
        {
            // Set culture to en-US.
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
            CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
        }
        ThreadProc();

        Thread worker = new Thread(SetThreadsEx.ThreadProc);
        worker.Name = "WorkerThread";
        worker.Start();
    }

    private static void DisplayThreadInfo()
    {
        Console.WriteLine($"\nCurrent Thread Name: '{Thread.CurrentThread.Name}'");
        Console.WriteLine($"Current Thread Culture/UI Culture: {Thread.CurrentThread.CurrentCulture.Name}/{Thread.CurrentThread.CurrentUICulture.Name}");
    }

    private static void DisplayValues()
    {
        // Create new thread and display three random numbers.
        Console.WriteLine("Some currency values:");
        for (int ctr = 0; ctr <= 3; ctr++)
            Console.WriteLine($"   {rnd.NextDouble() * 10:C2}");
    }

    private static void ThreadProc()
    {
        DisplayThreadInfo();
        DisplayValues();
    }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          6,83 €
//          3,47 €
//          6,07 €
//          1,70 €
//
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          9,54 €
//          9,50 €
//          0,58 €
//          6,91 €

Quando si assegnano valori alle proprietà DefaultThreadCurrentCulture e DefaultThreadCurrentUICulture, la cultura e la cultura dell'interfaccia utente dei thread nel dominio dell'applicazione cambiano anche se non è stata loro assegnata esplicitamente alcuna cultura. Tuttavia, questi thread riflettono le nuove impostazioni della cultura solo durante l'esecuzione nel dominio dell'applicazione corrente. Se questi thread vengono eseguiti in un altro dominio applicativo, la loro cultura diventa la cultura predefinita definita per tale dominio applicativo. Di conseguenza, è consigliabile impostare sempre la cultura del thread dell'applicazione principale e non basarsi sulle proprietà DefaultThreadCurrentCulture e DefaultThreadCurrentUICulture per modificarle.

Cultura e operazioni asincrone basate su attività

Il modello di programmazione asincrona basato su attività utilizza Task e Task<TResult> oggetti per eseguire delegati in modo asincrono nei thread del pool di thread. Il thread specifico in cui viene eseguita una determinata attività non è noto in anticipo, ma viene determinato solo in fase di esecuzione.

Le impostazioni cultura fanno parte del contesto di un'operazione asincrona. In altre parole, le operazioni asincrone ereditano per impostazione predefinita i valori delle CurrentCulture proprietà e CurrentUICulture del thread da cui vengono avviate. Se la cultura corrente o la cultura dell'interfaccia utente corrente differisce dalla cultura di sistema, la cultura corrente attraversa i confini del thread e diventa la cultura corrente del thread del pool di thread che esegue operazioni asincrone.

Nell'esempio seguente viene fornita una semplice illustrazione. L'esempio definisce un Func<TResult> delegato, formatDelegate, che restituisce alcuni numeri formattati come valori di valuta. Nell'esempio, la cultura di sistema viene modificata in francese (Francia) oppure, se la cultura attuale è già impostata su francese (Francia), in inglese (Stati Uniti). Quindi:

  • Richiama direttamente il delegato affinché venga eseguito sincronicamente nel thread principale dell'applicazione.
  • Crea un'attività che esegue il delegato in modo asincrono in un thread del pool di thread.
  • Crea un'attività che esegue il delegato in modo sincrono nel thread principale dell'applicazione chiamando il metodo Task.RunSynchronously.

Come mostra l'output dell'esempio, quando la cultura corrente viene impostata su Francese (Francia), la cultura corrente del thread da cui le attività sono avviate in modo asincrono diventa la cultura corrente per quell'operazione asincrona.

using System;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;

public class AsyncCultureEx1
{
    public static void Main()
    {
        decimal[] values = { 163025412.32m, 18905365.59m };
        string formatString = "C2";

        string FormatDelegate()
        {
            string output = $"Formatting using the {CultureInfo.CurrentCulture.Name} " +
                $"culture on thread {Thread.CurrentThread.ManagedThreadId}.\n";
            foreach (decimal value in values)
                output += $"{value.ToString(formatString)}   ";

            output += Environment.NewLine;
            return output;
        }

        Console.WriteLine($"The example is running on thread {Thread.CurrentThread.ManagedThreadId}");
        // Make the current culture different from the system culture.
        Console.WriteLine($"The current culture is {CultureInfo.CurrentCulture.Name}");
        if (CultureInfo.CurrentCulture.Name == "fr-FR")
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
        else
            Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

        Console.WriteLine($"Changed the current culture to {CultureInfo.CurrentCulture.Name}.\n");

        // Execute the delegate synchronously.
        Console.WriteLine("Executing the delegate synchronously:");
        Console.WriteLine(FormatDelegate());

        // Call an async delegate to format the values using one format string.
        Console.WriteLine("Executing a task asynchronously:");
        var t1 = Task.Run(FormatDelegate);
        Console.WriteLine(t1.Result);

        Console.WriteLine("Executing a task synchronously:");
        var t2 = new Task<string>(FormatDelegate);
        t2.RunSynchronously();
        Console.WriteLine(t2.Result);
    }
}
// The example displays the following output:
//         The example is running on thread 1
//         The current culture is en-US
//         Changed the current culture to fr-FR.
//
//         Executing the delegate synchronously:
//         Formatting using the fr-FR culture on thread 1.
//         163 025 412,32 €   18 905 365,59 €
//
//         Executing a task asynchronously:
//         Formatting using the fr-FR culture on thread 3.
//         163 025 412,32 €   18 905 365,59 €
//
//         Executing a task synchronously:
//         Formatting using the fr-FR culture on thread 1.
//         163 025 412,32 €   18 905 365,59 €

Serializzazione di oggetti CultureInfo

Quando un CultureInfo oggetto viene serializzato, tutto ciò che viene effettivamente archiviato è Name e UseUserOverride. Viene deserializzato correttamente solo in un ambiente in cui Name ha lo stesso significato. I tre esempi seguenti illustrano perché questo non è sempre il caso:

  • Se il valore della CultureTypes proprietà è CultureTypes.InstalledWin32Cultures e se la cultura è stata introdotta per la prima volta in una determinata versione del sistema operativo Windows, non è possibile deserializzarlo in una versione precedente di Windows. Ad esempio, se una cultura è stata introdotta in Windows 10, essa non può essere deserializzata in Windows 8.

  • Se il valore CultureTypes è CultureTypes.UserCustomCulture e il computer in cui è deserializzato non dispone della cultura personalizzata dell'utente installata, non è possibile deserializzarlo.

  • Se il CultureTypes valore è CultureTypes.ReplacementCultures e il computer in cui viene deserializzato non dispone di questa cultura di sostituzione, deserializza con lo stesso nome, ma non tutte le caratteristiche sono le stesse. Ad esempio, se en-US è una cultura di sostituzione nel computer A, ma non nel computer B, e se un oggetto CultureInfo che fa riferimento a questa cultura viene serializzato nel computer A e deserializzato nel computer B, nessuna delle caratteristiche personalizzate della cultura viene trasmessa. La cultura viene deserializzata correttamente, ma con un significato diverso.

Pannello di controllo delle priorità

L'utente potrebbe scegliere di eseguire l'override di alcuni dei valori associati alle impostazioni culturali correnti di Windows tramite la sezione Opzioni internazionali e della lingua del Pannello di Controllo. Ad esempio, l'utente potrebbe scegliere di visualizzare la data in un formato diverso o di usare una valuta diversa da quella predefinita per le impostazioni cultura. In generale, le applicazioni dovrebbero rispettare le modifiche imposte dagli utenti.

Se UseUserOverride è true e la cultura specificata corrisponde alla cultura corrente di Windows, CultureInfo utilizza quegli override, incluse le impostazioni utente per le proprietà dell'istanza DateTimeFormatInfo restituita dalla proprietà DateTimeFormat, e le proprietà dell'istanza NumberFormatInfo restituita dalla proprietà NumberFormat. Se le impostazioni utente non sono compatibili con le impostazioni cultura associate a CultureInfo, ad esempio, se il calendario selezionato non è uno dei OptionalCalendars, i risultati dei metodi e i valori delle proprietà non sono definiti.

Ordinamento alternativo

Alcune culture supportano più di un ordine di ordinamento. Per esempio:

  • La cultura spagnola (Spagna) ha due ordini di sequenza: l'ordine di sequenza internazionale predefinito e l'ordine di sequenza tradizionale. Quando si crea un'istanza di un CultureInfo oggetto con il nome delle es-ES impostazioni cultura, viene utilizzato l'ordinamento internazionale. Quando si crea un'istanza dell'oggetto CultureInfo con il nome cultura es-ES-tradnl, viene utilizzato l'ordinamento tradizionale.
  • La cultura zh-CN (cinese semplificato, PRC) supporta due ordinamenti: per pronuncia (predefinito) e per conteggio dei tratti. Quando si crea un'istanza di un oggetto CultureInfo con il nome cultura zh-CN, viene usato l'ordinamento predefinito. Quando si istanzia un oggetto CultureInfo con un identificatore locale pari a 0x00020804, le stringhe vengono ordinate in base al numero di tratti.

Nella tabella seguente sono elencate le culture che supportano gli ordinamenti alternativi e gli identificatori per gli ordinamenti di default e alternativi.

Nome cultura Cultura Nome e identificatore di ordinamento predefiniti Nome e identificatore di ordinamento alternativi
es-ES Spagnolo (Spagna) Internazionale: 0x00000C0A Tradizionale: 0x0000040A
zh-TW Cinese (Taiwan) Conteggio tratti: 0x00000404 Bopomofo: 0x00030404
zh-CN Cinese (Repubblica Popolare Cinese) Pronuncia: 0x00000804 Conteggio tratti: 0x00020804
zh-HK Cinese (RAS di Hong Kong) Conteggio tratti: 0x00000c04 Conteggio tratti: 0x00020c04
zh-SG Cinese (Singapore) Pronuncia: 0x00001004 Conteggio tratti: 0x00021004
zh-MO Cinese (RAS di Macao) Pronuncia: 0x00001404 Conteggio tratti: 0x00021404
ja-JP Giapponese (Giappone) Impostazione predefinita: 0x00000411 Unicode: 0x00010411
ko-KR Coreano (Corea) Impostazione predefinita: 0x00000412 Coreano Xwansung - Unicode: 0x00010412
de-DE Tedesco (Germania) Dizionario: 0x00000407 Ordinamento rubrica DIN: 0x00010407
hu-HU Ungherese (Ungheria) Impostazione predefinita: 0x0000040e Ordinamento tecnico: 0x0001040e
ka-GE Lingua georgiana (Georgia) Tradizionale: 0x00000437 Ordinamento moderno: 0x00010437

Example

Nell'esempio seguente viene illustrato come creare un CultureInfo oggetto per spagnolo (Spagna) con l'ordinamento internazionale e un altro CultureInfo oggetto con l'ordinamento tradizionale.

using System;
using System.Globalization;

public class SamplesCultureInfo
{
    public static void Main()
    {
        // Creates and initializes the CultureInfo which uses the international sort.
        CultureInfo myCIintl = new CultureInfo("es-ES", false);

        // Creates and initializes the CultureInfo which uses the traditional sort.
        CultureInfo myCItrad = new CultureInfo(0x040A, false);

        // Displays the properties of each culture.
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "PROPERTY", "INTERNATIONAL", "TRADITIONAL");
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "CompareInfo", myCIintl.CompareInfo, myCItrad.CompareInfo);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "DisplayName", myCIintl.DisplayName, myCItrad.DisplayName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "EnglishName", myCIintl.EnglishName, myCItrad.EnglishName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsNeutralCulture", myCIintl.IsNeutralCulture, myCItrad.IsNeutralCulture);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsReadOnly", myCIintl.IsReadOnly, myCItrad.IsReadOnly);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "LCID", myCIintl.LCID, myCItrad.LCID);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Name", myCIintl.Name, myCItrad.Name);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "NativeName", myCIintl.NativeName, myCItrad.NativeName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Parent", myCIintl.Parent, myCItrad.Parent);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TextInfo", myCIintl.TextInfo, myCItrad.TextInfo);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterISOLanguageName", myCIintl.ThreeLetterISOLanguageName, myCItrad.ThreeLetterISOLanguageName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterWindowsLanguageName", myCIintl.ThreeLetterWindowsLanguageName, myCItrad.ThreeLetterWindowsLanguageName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TwoLetterISOLanguageName", myCIintl.TwoLetterISOLanguageName, myCItrad.TwoLetterISOLanguageName);
        Console.WriteLine();

        // Compare two strings using myCIintl.
        Console.WriteLine("Comparing \"llegar\" and \"lugar\"");
        Console.WriteLine("   With myCIintl.CompareInfo.Compare: {0}", myCIintl.CompareInfo.Compare("llegar", "lugar"));
        Console.WriteLine("   With myCItrad.CompareInfo.Compare: {0}", myCItrad.CompareInfo.Compare("llegar", "lugar"));
    }
}

/*
This code produces the following output.

PROPERTY                       INTERNATIONAL                                  TRADITIONAL
CompareInfo                    CompareInfo - es-ES                            CompareInfo - es-ES_tradnl
DisplayName                    Spanish (Spain)                                Spanish (Spain)
EnglishName                    Spanish (Spain, International Sort)            Spanish (Spain, Traditional Sort)
IsNeutralCulture               False                                          False
IsReadOnly                     False                                          False
LCID                           3082                                           1034
Name                           es-ES                                          es-ES
NativeName                     Español (España, alfabetización internacional) Español (España, alfabetización tradicional)
Parent                         es                                             es
TextInfo                       TextInfo - es-ES                               TextInfo - es-ES_tradnl
ThreeLetterISOLanguageName     spa                                            spa
ThreeLetterWindowsLanguageName ESN                                            ESP
TwoLetterISOLanguageName       es                                             es

Comparing "llegar" and "lugar"
   With myCIintl.CompareInfo.Compare: -1
   With myCItrad.CompareInfo.Compare: 1

*/
Imports System.Collections
Imports System.Globalization

Module Module1

    Public Sub Main()

        ' Creates and initializes the CultureInfo which uses the international sort.
        Dim myCIintl As New CultureInfo("es-ES", False)

        ' Creates and initializes the CultureInfo which uses the traditional sort.
        Dim myCItrad As New CultureInfo(&H40A, False)

        ' Displays the properties of each culture.
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "PROPERTY", "INTERNATIONAL", "TRADITIONAL")
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "CompareInfo", myCIintl.CompareInfo, myCItrad.CompareInfo)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "DisplayName", myCIintl.DisplayName, myCItrad.DisplayName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "EnglishName", myCIintl.EnglishName, myCItrad.EnglishName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsNeutralCulture", myCIintl.IsNeutralCulture, myCItrad.IsNeutralCulture)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsReadOnly", myCIintl.IsReadOnly, myCItrad.IsReadOnly)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "LCID", myCIintl.LCID, myCItrad.LCID)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Name", myCIintl.Name, myCItrad.Name)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "NativeName", myCIintl.NativeName, myCItrad.NativeName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Parent", myCIintl.Parent, myCItrad.Parent)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TextInfo", myCIintl.TextInfo, myCItrad.TextInfo)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterISOLanguageName", myCIintl.ThreeLetterISOLanguageName, myCItrad.ThreeLetterISOLanguageName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterWindowsLanguageName", myCIintl.ThreeLetterWindowsLanguageName, myCItrad.ThreeLetterWindowsLanguageName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TwoLetterISOLanguageName", myCIintl.TwoLetterISOLanguageName, myCItrad.TwoLetterISOLanguageName)
        Console.WriteLine()

        ' Compare two strings using myCIintl.
        Console.WriteLine("Comparing ""llegar"" and ""lugar""")
        Console.WriteLine("   With myCIintl.CompareInfo.Compare: {0}", myCIintl.CompareInfo.Compare("llegar", "lugar"))
        Console.WriteLine("   With myCItrad.CompareInfo.Compare: {0}", myCItrad.CompareInfo.Compare("llegar", "lugar"))

    End Sub



'This code produces the following output.
'
'PROPERTY                       INTERNATIONAL                                  TRADITIONAL              
'CompareInfo                    CompareInfo - es-ES                            CompareInfo - es-ES_tradnl
'DisplayName                    Spanish (Spain)                                Spanish (Spain)          
'EnglishName                    Spanish (Spain, International Sort)            Spanish (Spain, Traditional Sort)
'IsNeutralCulture               False                                          False                    
'IsReadOnly                     False                                          False                    
'LCID                           3082                                           1034                     
'Name                           es-ES                                          es-ES                    
'NativeName                     Español (España, alfabetización internacional) Español (España, alfabetización tradicional)
'Parent                         es                                             es                       
'TextInfo                       TextInfo - es-ES                               TextInfo - es-ES_tradnl  
'ThreeLetterISOLanguageName     spa                                            spa                      
'ThreeLetterWindowsLanguageName ESN                                            ESP                      
'TwoLetterISOLanguageName       es                                             es                       
'
'Comparing "llegar" and "lugar"
'   With myCIintl.CompareInfo.Compare: -1
'   With myCItrad.CompareInfo.Compare: 1

End Module

Costruttori

Nome Descrizione
CultureInfo(Int32, Boolean)

Inizializza una nuova istanza della CultureInfo classe in base alle impostazioni cultura specificate dall'identificatore delle impostazioni cultura e a un valore che specifica se utilizzare le impostazioni cultura selezionate dall'utente da Windows.

CultureInfo(Int32)

Inizializza una nuova istanza della CultureInfo classe in base alle impostazioni cultura specificate dall'identificatore delle impostazioni cultura.

CultureInfo(String, Boolean)

Inizializza una nuova istanza della CultureInfo classe in base alle impostazioni cultura specificate per nome e a un valore che specifica se utilizzare le impostazioni cultura selezionate dall'utente da Windows.

CultureInfo(String)

Inizializza una nuova istanza della CultureInfo classe in base alle impostazioni cultura specificate per nome.

Proprietà

Nome Descrizione
Calendar

Ottiene il calendario predefinito utilizzato dalle impostazioni cultura.

CompareInfo

Ottiene l'oggetto CompareInfo che definisce come confrontare le stringhe per le impostazioni cultura.

CultureTypes

Ottiene i tipi di impostazioni cultura relativi all'oggetto corrente CultureInfo .

CurrentCulture

Ottiene o imposta l'oggetto CultureInfo che rappresenta le impostazioni cultura utilizzate dal thread corrente e dalle operazioni asincrone basate su attività.

CurrentUICulture

Ottiene o imposta l'oggetto CultureInfo che rappresenta le impostazioni cultura dell'interfaccia utente correnti utilizzate dal Resource Manager per cercare risorse specifiche delle impostazioni cultura in fase di esecuzione.

DateTimeFormat

Ottiene o imposta un oggetto DateTimeFormatInfo che definisce il formato culturalmente appropriato per la visualizzazione di date e ore.

DefaultThreadCurrentCulture

Ottiene o imposta le impostazioni cultura predefinite per i thread nel dominio applicazione corrente.

DefaultThreadCurrentUICulture

Ottiene o imposta le impostazioni cultura predefinite dell'interfaccia utente per i thread nel dominio applicazione corrente.

DisplayName

Ottiene il nome completo delle impostazioni cultura localizzate.

EnglishName

Ottiene il nome delle impostazioni cultura nel formato lingua [country/regionfull] in inglese.

IetfLanguageTag

Deprecated. Ottiene l'identificazione standard RFC 4646 per una lingua.

InstalledUICulture

Ottiene l'oggetto CultureInfo che rappresenta le impostazioni cultura installate con il sistema operativo.

InvariantCulture

Ottiene l'oggetto CultureInfo indipendente dalle impostazioni cultura (invariante).

IsNeutralCulture

Ottiene un valore che indica se l'oggetto corrente CultureInfo rappresenta impostazioni cultura neutre.

IsReadOnly

Ottiene un valore che indica se l'oggetto corrente CultureInfo è di sola lettura.

KeyboardLayoutId

Ottiene l'identificatore delle impostazioni locali di input attivo.

LCID

Ottiene l'identificatore delle impostazioni cultura per l'oggetto corrente CultureInfo.

Name

Ottiene il nome delle impostazioni cultura nel formato languagecode2-country/regioncode2.

NativeName

Ottiene il nome delle impostazioni cultura, costituito dalla lingua, dal paese o dall'area geografica e dallo script facoltativo, che le impostazioni cultura sono impostate per la visualizzazione.

NumberFormat

Ottiene o imposta un oggetto NumberFormatInfo che definisce il formato culturalmente appropriato per la visualizzazione di numeri, valuta e percentuale.

OptionalCalendars

Ottiene l'elenco di calendari che possono essere utilizzati dalle impostazioni cultura.

Parent

Ottiene l'oggetto CultureInfo che rappresenta le impostazioni cultura padre dell'oggetto corrente CultureInfo.

TextInfo

Ottiene l'oggetto TextInfo che definisce il sistema di scrittura associato alle impostazioni cultura.

ThreeLetterISOLanguageName

Ottiene il codice ISO 639-2 a tre lettere per la lingua dell'oggetto corrente CultureInfo.

ThreeLetterWindowsLanguageName

Ottiene il codice a tre lettere per la lingua definita nell'API Windows.

TwoLetterISOLanguageName

Ottiene il codice ISO 639-1 a due lettere o ISO 639-3 a tre lettere per la lingua dell'oggetto corrente CultureInfo.

UseUserOverride

Ottiene un valore che indica se l'oggetto corrente CultureInfo utilizza le impostazioni cultura selezionate dall'utente.

Metodi

Nome Descrizione
ClearCachedData()

Aggiorna le informazioni correlate alle impostazioni cultura memorizzate nella cache.

Clone()

Crea una copia del CultureInfocorrente.

CreateSpecificCulture(String)

Crea un oggetto CultureInfo che rappresenta le impostazioni cultura specifiche associate al nome specificato.

Equals(Object)

Determina se l'oggetto specificato corrisponde alle stesse impostazioni cultura dell'oggetto corrente CultureInfo.

GetConsoleFallbackUICulture()

Ottiene impostazioni cultura dell'interfaccia utente alternative adatte per le applicazioni console quando le impostazioni cultura predefinite dell'interfaccia utente grafica non sono adatte.

GetCultureInfo(Int32)

Recupera un'istanza memorizzata nella cache di sola lettura di impostazioni cultura utilizzando l'identificatore delle impostazioni cultura specificato.

GetCultureInfo(String, Boolean)

Recupera un'istanza memorizzata nella cache di sola lettura di impostazioni cultura.

GetCultureInfo(String, String)

Recupera un'istanza memorizzata nella cache di sola lettura di impostazioni cultura. I parametri specificano impostazioni cultura inizializzate con gli TextInfo oggetti e CompareInfo specificati da altre impostazioni cultura.

GetCultureInfo(String)

Recupera un'istanza memorizzata nella cache di sola lettura di impostazioni cultura usando il nome delle impostazioni cultura specificato.

GetCultureInfoByIetfLanguageTag(String)

Deprecated. Recupera un oggetto di sola CultureInfo lettura con caratteristiche linguistiche identificate dal tag di lingua RFC 4646 specificato.

GetCultures(CultureTypes)

Ottiene l'elenco delle impostazioni cultura supportate filtrate in base al parametro specificato CultureTypes .

GetFormat(Type)

Ottiene un oggetto che definisce come formattare il tipo specificato.

GetHashCode()

Funge da funzione hash per l'oggetto corrente CultureInfo, adatto per algoritmi hash e strutture di dati, ad esempio una tabella hash.

GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ReadOnly(CultureInfo)

Restituisce un wrapper di sola lettura intorno all'oggetto specificato CultureInfo .

ToString()

Restituisce una stringa contenente il nome dell'oggetto corrente CultureInfo nel formato languagecode2-country/regioncode2.

Si applica a

Vedi anche