CultureInfo Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Innehåller information om en specifik kultur (kallas nationella inställningar för ohanterad kodutveckling). Informationen innehåller namnen på kulturen, skrivsystemet, kalendern som används, sorteringsordningen för strängar och formatering för datum och siffror.
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
- Arv
-
CultureInfo
- Attribut
- Implementeringar
Kommentarer
Klassen CultureInfo innehåller information som är associerad med en specifik kultur, till exempel språk, underspråk, land/region, kalender och konventioner. Den här klassen ger också åtkomst till kulturspecifika instanser av objekten DateTimeFormatInfo, NumberFormatInfo, CompareInfooch TextInfo . Dessa objekt innehåller den information som krävs för kulturspecifika åtgärder, till exempel hölje, formateringsdatum och tal och jämförelse av strängar. Klassen CultureInfo används antingen direkt eller indirekt av klasser som formaterar, parsar eller manipulerar kulturspecifika data, till exempel String, DateTime, DateTimeOffsetoch de numeriska typerna.
Kulturnamn och identifierare
Klassen CultureInfo anger ett unikt namn för varje kultur, baserat på RFC 4646. Namnet är en kombination av en ISO 639-kod med två bokstäver eller tre bokstäver som är associerad med ett språk och en ISO 3166-kod med två bokstäver med versaler som är associerad med ett land eller en region. För appar som körs under Windows 10 eller senare stöds dessutom kulturnamn som motsvarar giltiga BCP-47-språktaggar.
Note
När ett kulturnamn skickas till en klasskonstruktor eller en metod som CreateSpecificCulture eller CultureInfo, är dess fall inte betydande.
Formatet för kulturnamnet baserat på RFC 4646 är languagecode2-country/regioncode2, där languagecode2 är språkkoden med två bokstäver och country/regioncode2 är subkulturkoden med två bokstäver. Exempel är ja-JP japanska (Japan) och en-US engelska (USA). I de fall där en språkkod med två bokstäver inte är tillgänglig används en kod med tre bokstäver enligt definitionen i ISO 639-3.
Vissa kulturnamn anger också ett ISO 15924-skript. Cyrl anger till exempel det kyrilliska skriptet och Latn anger det latinska skriptet. Ett kulturnamn som innehåller ett skript använder mönstret languagecode2-scripttag-country/regioncode2. Ett exempel på den här typen av kulturnamn är uz-Cyrl-UZ för uzbekiska (kyrilliska, Uzbekistan). I Windows-operativsystem före Windows Vista använder ett kulturnamn som innehåller ett skript mönstret languagecode2-country/regioncode2-scripttag, till exempel uz-UZ-Cyrl för uzbekiska (kyrilliska, Uzbekistan).
En neutral kultur anges genom endast den tvåbokstaviga, gement skrivna språkkoden. Till exempel fr anger den neutrala kulturen för franska och de anger den neutrala kulturen för tyska.
Note
Det finns två kulturnamn som strider mot den här regeln. Kulturerna kinesiska (förenklad), med namnet zh-Hans, och kinesiska (traditionell), med namnet zh-Hant, är neutrala kulturer. Kulturnamnen representerar den aktuella standarden och bör användas om du inte har en anledning att använda de äldre namnen zh-CHS och zh-CHT.
En kulturidentifierare är en internationell standardförkortning och har de komponenter som krävs för att unikt identifiera en av de installerade kulturerna. Ditt program kan använda fördefinierade kulturidentifierare eller definiera anpassade identifierare.
Vissa fördefinierade kulturnamn och identifierare används av den här och andra klasser i System.Globalization namnområdet. Detaljerad kulturinformation för Windows-system finns i kolumnen Språktagg i listan över språk-/regionnamn som stöds av Windows. Kulturnamn följer standarden som definieras av BCP 47.
Kulturnamnen och identifierarna representerar endast en delmängd av kulturer som finns på en viss dator. Windows-versioner eller servicepaket kan ändra tillgängliga kulturer. Program kan lägga till anpassade kulturer med hjälp av CultureAndRegionInfoBuilder klassen. Användare kan lägga till egna anpassade kulturer med hjälp av verktyget Microsoft Locale Builder . Microsoft Locale Builder skrivs i hanterad kod med hjälp av CultureAndRegionInfoBuilder klassen .
Flera distinkta namn är nära associerade med en kultur, särskilt namnen som är associerade med följande klassmedlemmar:
Invarianta, neutrala och specifika kulturer
Kulturerna är vanligtvis grupperade i tre uppsättningar: invarianta kulturer, neutrala kulturer och specifika kulturer.
En kultur som är invariant är okänslig för kulturella influenser. Ditt program anger den invarianta kulturen efter namn med hjälp av en tom sträng ("") eller dess identifierare.
InvariantCulture definierar en instans av den invarianta kulturen. Det är associerat med det engelska språket men inte med något land/region. Det används i nästan alla metoder i Globalization namnområdet som kräver en kultur.
En neutral kultur är en kultur som är associerad med ett språk men inte med ett land/en region. En specifik kultur är en kultur som är associerad med ett språk och ett land/en region. Till exempel fr är det neutrala namnet för den franska kulturen och fr-FR är namnet på den specifika franska kulturen (Frankrike). Observera att kinesiska (förenklad) och kinesiska (traditionell) också betraktas som neutrala kulturer.
Att skapa en instans av en CompareInfo klass för en neutral kultur rekommenderas inte eftersom de data som den innehåller är godtyckliga. Om du vill visa och sortera data anger du både språk och region. Dessutom Name returnerar egenskapen för ett CompareInfo objekt som skapats för en neutral kultur endast landet och inkluderar inte regionen.
De definierade kulturerna har en hierarki där föräldern till en viss kultur är en neutral kultur och föräldern till en neutral kultur är den invarianta kulturen. Egenskapen Parent innehåller den neutrala kultur som är associerad med en specifik kultur. Anpassade kulturer bör definiera egenskapen Parent i enlighet med det här mönstret.
Om resurserna för en specifik kultur inte är tillgängliga i operativsystemet används resurserna för den associerade neutrala kulturen. Om resurserna för den neutrala kulturen inte är tillgängliga används de resurser som är inbäddade i huvudsammansättningen. Mer information om reservprocessen för resurser finns i Paketera och distribuera resurser.
Listan över nationella inställningar i Windows API skiljer sig något från listan över kulturer som stöds av .NET. Om samverkan med Windows till exempel krävs via p/invoke-mekanismen bör programmet använda en specifik kultur som har definierats för operativsystemet. Användningen av den specifika kulturen säkerställer konsekvens med motsvarande Windows-språk, som identifieras med en språkidentifierare som är samma som LCID.
En DateTimeFormatInfo eller en NumberFormatInfo kan endast skapas för den invarianta kulturen eller för specifika kulturer, inte för neutrala kulturer.
Om DateTimeFormatInfo.Calendar är TaiwanCalendar men Thread.CurrentCulture är inte inställt på zh-TW, sedan DateTimeFormatInfo.NativeCalendarName, DateTimeFormatInfo.GetEraNameoch DateTimeFormatInfo.GetAbbreviatedEraName returnerar en tom sträng ("").
Anpassade kulturer
I Windows kan du skapa anpassade nationella inställningar. Mer information finns i Anpassade nationella inställningar.
CultureInfo och kulturella data
.NET härleder sina kulturella data från två olika källor, beroende på operativsystemet:
- På Unix-plattformar eller Windows 10 och senare versioner tillhandahålls kulturella data av International Components for Unicode (ICU) Library. Den specifika versionen av ICU-biblioteket beror på det enskilda operativsystemet.
- På Windows 8.1 och tidigare versioner tillhandahålls kulturella data av Windows operativsystem.
På grund av detta kanske en kultur som är tillgänglig på en viss .NET-implementering, plattform eller version inte är tillgänglig på en annan .NET-implementering, plattform eller version.
Vissa CultureInfo objekt skiljer sig åt beroende på den underliggande plattformen. I synnerhet zh-CN, eller kinesiska (förenklad, Kina) och zh-TW, eller kinesiska (traditionell, Taiwan), är tillgängliga kulturer på Windows-system, men de är aliaskulturer på Unix-system. "zh-CN" är ett alias för kulturen "zh-Hans-CN" och "zh-TW" är ett alias för kulturen "zh-Hant-TW". Aliaskulturer returneras inte av anrop till GetCultures metoden och kan ha olika egenskapsvärden, inklusive olika Parent kulturer, än deras Windows-motsvarigheter. För kulturerna zh-CN och zh-TW omfattar dessa skillnader följande:
På Windows-system är den överordnade kulturen för "zh-CN" "zh-Hans", och den överordnade kulturen för "zh-TW" är "zh-Hant". Den överordnade kulturen i båda dessa kulturer är "zh". I Unix-system är föräldrarna till båda kulturer "zh". Det innebär att om du inte tillhandahåller kulturspecifika resurser för kulturkulturerna "zh-CN" eller "zh-TW", men tillhandahåller resurser för den neutrala "zh-Hans" eller "zh-Hant"-kulturen, kommer ditt program att läsa in resurserna för den neutrala kulturen i Windows men inte på Unix. På Unix-system måste du uttryckligen ange trådens CurrentUICulture till antingen "zh-Hans" eller "zh-Hant".
På Windows-system, när man anropar CultureInfo.Equals på en instans som representerar "zh-CN"-kulturen och passerar en "zh-Hans-CN"-instans, returnerar den
true. I Unix-system returnerarfalsemetodanropet . Det här beteendet gäller även för att anropa Equals en "zh-TW" CultureInfo -instans och skicka den en "zh-Hant-Tw"-instans.
Dynamiska kulturdata
Förutom den invarianta kulturen är kulturdata dynamiska. Detta gäller även för de fördefinierade kulturerna. Länder eller regioner använder till exempel nya valutor, ändrar stavningen av ord eller ändrar önskad kalender och kulturdefinitioner ändras för att spåra detta. Anpassade kulturer kan ändras utan föregående meddelande, och en viss kultur kan åsidosättas av en anpassad ersättningskultur. Som beskrivs nedan kan en enskild användare åsidosätta kulturella inställningar. Applikationer ska alltid hämta kulturdata vid körning.
Caution
När du sparar data bör ditt program använda den invarianta kulturen, ett binärt format eller ett specifikt kulturoberoende format. Data som sparas enligt aktuella värden som är associerade med en viss kultur, förutom den invarianta kulturen, kan bli olästa eller ändras i betydelse om kulturen ändras.
Den aktuella kulturen och den aktuella användargränssnittskulturen
Varje tråd i ett .NET-program har en aktuell kultur och en aktuell användargränssnittskultur. Den aktuella kulturen bestämmer formateringskonventionerna för datum, tider, tal och valutavärden, sorteringsordningen för text, höljekonventioner och hur strängar jämförs. Den aktuella användargränssnittskulturen används för att vid körningstid hämta kulturspecifika resurser.
Note
Information om hur den aktuella och aktuella användargränssnittskulturen bestäms per tråd finns i avsnittet Kultur och trådar . Information om hur den aktuella och aktuella användargränssnittskulturen bestäms för trådar som utför aktivitetsbaserade asynkrona åtgärder finns i avsnittet Kultur och aktivitetsbaserade asynkrona åtgärder .
Mer detaljerad information om den aktuella kulturen finns i egenskapen CultureInfo.CurrentCulture . Mer detaljerad information om den aktuella användargränssnittskulturen finns i egenskapsavsnittet CultureInfo.CurrentUICulture .
Hämta aktuella och aktuella användargränssnittskulturer
Du kan hämta ett CultureInfo objekt som representerar den aktuella kulturen på något av två sätt:
- Genom att hämta värdet för egenskapen CultureInfo.CurrentCulture.
- Genom att hämta värdet för egenskapen Thread.CurrentThread.CurrentCulture .
I följande exempel hämtas båda egenskapsvärdena, jämför dem för att visa att de är lika och visar namnet på den aktuella kulturen.
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
Du kan hämta ett CultureInfo objekt som representerar den aktuella användargränssnittskulturen på något av två sätt:
Genom att hämta värdet för egenskapen CultureInfo.CurrentUICulture.
Genom att hämta värdet för egenskapen Thread.CurrentThread.CurrentUICulture .
I följande exempel hämtas båda egenskapsvärdena, jämför dem för att visa att de är lika och visar namnet på den aktuella användargränssnittskulturen.
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
Ange aktuella och aktuella användargränssnittskulturer
Om du vill ändra kulturen och användargränssnittskulturen i en tråd gör du följande:
Instansiera ett CultureInfo objekt som representerar den kulturen genom att anropa en CultureInfo klasskonstruktor och skicka namnet på kulturen. Konstruktorn CultureInfo(String) instansierar ett CultureInfo objekt som återspeglar användarens åsidosättningar om den nya kulturen är densamma som den aktuella Windows-kulturen. Med CultureInfo(String, Boolean) konstruktorn kan du ange om det nyligen instansierade CultureInfo objektet återspeglar användarens åsidosättningar om den nya kulturen är densamma som den aktuella Windows-kulturen.
CultureInfo Tilldela objektet till CultureInfo.CurrentCulture egenskapen ellerCultureInfo.CurrentUICulture.
I följande exempel hämtas den aktuella kulturen. Om det är något annat än den franska kulturen (Frankrike) ändrar det den nuvarande kulturen till franska (Frankrike). Annars ändras den nuvarande kulturen till franska (Luxemburg).
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
I följande exempel hämtas den aktuella kulturen. Om det är något annat den slovenska kulturen (Slovenien) ändrar den nuvarande kulturen till slovenska (Slovenien). Annars ändras den nuvarande kulturen till kroatiska (Kroatien).
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
Hämta alla kulturer
Du kan hämta en matris med specifika kategorier av kulturer eller alla kulturer som är tillgängliga på den lokala datorn genom att anropa GetCultures metoden. Du kan till exempel hämta anpassade kulturer, specifika kulturer eller neutrala kulturer antingen ensamma eller i kombination.
I följande exempel anropas GetCultures metoden två gånger, först med System.Globalization.CultureTypes uppräkningsmedlemmen för att hämta alla anpassade kulturer och sedan med System.Globalization.CultureTypes uppräkningsmedlemmen för att hämta alla ersättningskulturer.
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.
Kultur och trådar
När en ny programtråd startas definieras dess aktuella kultur och aktuella användargränssnittskultur av den aktuella systemkulturen och inte av den aktuella trådkulturen. I följande exempel visas skillnaden. Den ställer in den nuvarande kulturen och den nuvarande UI-kulturen för en applikationstråd till den franska (Frankrike) kulturen (fr-FR). Om den aktuella kulturen redan är fr-FR, ändrar exemplet den till engelska kulturen (USA) (en-US). Den visar tre slumpmässiga tal som valutavärden och skapar sedan en ny tråd, som i sin tur visar ytterligare tre slumpmässiga tal som valutavärden. Men som utdata från exemplet visar återspeglar valutavärdena som visas av den nya tråden inte formateringskonventionerna för den franska kulturen (Frankrike), till skillnad från utdata från huvudprogramtråden.
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
Du kan ange kulturen och UI-kulturen för alla trådar i en programdomän genom att tilldela ett CultureInfo objekt som representerar den DefaultThreadCurrentCulture kulturen till egenskaperna och DefaultThreadCurrentUICulture . I följande exempel används dessa egenskaper för att säkerställa att alla trådar i standardprogramdomänen delar samma kultur.
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 €
När du tilldelar värden till DefaultThreadCurrentCulture egenskaperna och DefaultThreadCurrentUICulture ändras även kulturen och användargränssnittskulturen för trådarna i programdomänen om de inte uttryckligen har tilldelats en kultur. De här trådarna återspeglar dock bara de nya kulturinställningarna när de körs i den aktuella programdomänen. Om dessa trådar körs i en annan programdomän blir deras kultur den standardkultur som definierats för programdomänen. Därför rekommenderar vi att du alltid ställer in kulturen i huvudprogramtråden och inte förlitar dig på DefaultThreadCurrentCulture egenskaperna och DefaultThreadCurrentUICulture för att ändra den.
Kultur- och aktivitetsbaserade asynkrona åtgärder
Det aktivitetsbaserade asynkrona programmeringsmönstret använder Task och Task<TResult> objekt för att asynkront köra delegater på trådar i trådpoolen. Den specifika tråd som en viss aktivitet körs på är inte känd i förväg, men bestäms endast vid körning.
Kultur är en del av en asynkron åtgärds kontext. Med andra ord ärver asynkrona åtgärder som standard värdena av egenskaperna CurrentCulture och CurrentUICulture från den tråd som de startas från. Om den aktuella kulturen eller den aktuella användargränssnittskulturen skiljer sig från systemkulturen korsar den aktuella kulturen trådgränserna och blir den aktuella kulturen i trådpoolstråden som kör en asynkron åtgärd.
I följande exempel visas en enkel bild. I exemplet definieras ett Func<TResult> ombud, formatDelegate, som returnerar vissa tal som är formaterade som valutavärden. Exemplet ändrar den nuvarande systemkulturen till antingen Franska (Frankrike), eller om franska (Frankrike) redan är den nuvarande kulturen, till Engelska (USA). Då:
- Anropar ombudet direkt så att det körs synkront på huvudtråden i appen.
- Skapar en uppgift som kör delegaten asynkront i en tråd i trådpoolen.
- Skapar en uppgift som kör delegaten synkront på huvudapptråden genom att anropa metoden Task.RunSynchronously.
Som utdata från exemplet visar, när den aktuella kulturen ändras till franska (Frankrike), blir den aktuella kulturen i tråden från vilken uppgifter anropas asynkront den aktuella kulturen för den asynkrona åtgärden.
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 €
CultureInfo-objektserialisering
När ett CultureInfo-objekt serialiseras lagras faktiskt bara Name och UseUserOverride. Det deserialiseras endast i en miljö där Name har samma betydelse. Följande tre exempel visar varför detta inte alltid är fallet:
Om egenskapsvärdet CultureTypes är CultureTypes.InstalledWin32Cultures, och om den kulturen först introducerades i en viss version av Windows-operativsystemet, går det inte att deserialisera den på en tidigare version av Windows. Om en kultur till exempel introducerades i Windows 10 kan den inte deserialiseras i Windows 8.
CultureTypes Om värdet är CultureTypes.UserCustomCulture, och den dator där det deserialiseras inte har den här användaranpassade kulturen installerad, går det inte att deserialisera det.
CultureTypes Om värdet är CultureTypes.ReplacementCultures, och den dator där det deserialiseras inte har den här ersättningskulturen, deserialiseras det till samma namn, men inte med alla samma egenskaper. Om till exempel
en-USär en ersättningskultur på dator A, men inte på dator B, och om ett CultureInfo objekt som refererar till den här kulturen serialiseras på dator A och deserialiseras på dator B, överförs ingen av kulturens anpassade egenskaper. Kulturen deserialiserar framgångsrikt, men med en förändrad betydelse.
Kontrollpanelen åsidosättningar
Användaren kan välja att åsidosätta några av de värden som är associerade med den aktuella kulturen i Windows via den regionala delen och språkalternativen i Kontrollpanelen. Användaren kan till exempel välja att visa datumet i ett annat format eller använda en annan valuta än standardvärdet för kulturen. I allmänhet bör dina applikationer respektera dessa användarinställningar.
Om UseUserOverride är true och den angivna kulturen matchar den aktuella kulturen i Windows, CultureInfo använder dessa åsidosättningar, inklusive användarinställningar för egenskaperna för den DateTimeFormatInfo instans som returneras av DateTimeFormat egenskapen och egenskaperna för den NumberFormatInfo instans som returneras av NumberFormat egenskapen. Om användarinställningarna inte är kompatibla med kulturen som är associerad med CultureInfo, till exempel om den valda kalendern inte är en av OptionalCalendarsmetoderna , är resultatet av metoderna och värdena för egenskaperna odefinierat.
Alternativa sorteringsordningar
Vissa kulturer stöder mer än en sorteringsordning. Ett exempel:
- Den spanska kulturen (Spanien) har två sorteringsordningar: standardordningen för internationell sortering och den traditionella sorteringsordningen. När du instansierar ett CultureInfo objekt med
es-ESkulturnamnet används den internationella sorteringsordningen. När du instansierar ett CultureInfo objekt medes-ES-tradnlkulturnamnet används den traditionella sorteringsordningen. - Kulturen
zh-CN(förenklad kinesiska, Kina) stöder två sorteringsordningar: efter uttal (standard) och efter antal streck. När du instansierar ett CultureInfo objekt medzh-CNkulturnamnet används standardsorteringsordningen. När du instansierar ett CultureInfo objekt med en lokal identifierare för 0x00020804 sorteras strängar efter antal linjer.
I följande tabell visas de kulturer som stöder alternativa sorteringsordningar och identifierarna för standardordningarna och alternativa sorteringsordningar.
| Kulturnamn | Kultur | Standardsorteringsnamn och identifierare | Alternativt sorteringsnamn och identifierare |
|---|---|---|---|
| es-ES | Spanska (Spanien) | Internationell: 0x00000C0A | Traditionell: 0x0000040A |
| zh-TW | Kinesiska (Taiwan) | Antal linjer: 0x00000404 | Bopomofo: 0x00030404 |
| zh-CN | Kinesiska (Folkrepubliken Kina) | Uttal: 0x00000804 | Antal slag: 0x00020804 |
| zh-HK | Kinesiska (Hong Kongs särskilda administrativa region) | Antal streck: 0x00000c04 | Antal slag: 0x00020c04 |
| zh-SG | Kinesiska (Singapore) | Uttal: 0x00001004 | Antal streck: 0x00021004 |
| zh-MO | Kina (Macao SAR) | Uttal: 0x00001404 | Antal slag: 0x00021404 |
| ja-JP | Japanska (Japan) | Standard: 0x00000411 | Unicode: 0x00010411 |
| ko-KR | koreanska (Korea) | Standardvärde: 0x00000412 | Koreanska Xwansung – Unicode: 0x00010412 |
| de-DE | Tyska (Tyskland) | Ordlista: 0x00000407 | Sortera telefonbok DIN: 0x00010407 |
| hu-HU | Ungerska (Ungern) | Standard: 0x0000040e | Teknisk sortering: 0x0001040e |
| ka-GE | Georgiska (Georgien) | Traditionell: 0x00000437 | Modern sortering: 0x00010437 |
Example
I följande exempel visas hur du skapar ett CultureInfo objekt för spanska (Spanien) med den internationella sorteringen och ett annat CultureInfo objekt med den traditionella sorteringen.
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
Konstruktorer
| Name | Description |
|---|---|
| CultureInfo(Int32, Boolean) |
Initierar en ny instans av klassen CultureInfo baserat på kulturen som anges av kulturidentifieraren och på ett värde som anger om de användarvalda kulturinställningarna ska användas från Windows. |
| CultureInfo(Int32) |
Initierar en ny instans av CultureInfo klassen baserat på den kultur som anges av kulturidentifieraren. |
| CultureInfo(String, Boolean) |
Initierar en ny instans av klassen CultureInfo baserat på den kultur som anges med namn och på ett värde som anger om du vill använda de användarvalda kulturinställningarna från Windows. |
| CultureInfo(String) |
Initierar en ny instans av CultureInfo klassen baserat på den kultur som anges med namn. |
Egenskaper
| Name | Description |
|---|---|
| Calendar |
Hämtar standardkalendern som används av kulturen. |
| CompareInfo |
CompareInfo Hämtar som definierar hur du jämför strängar för kulturen. |
| CultureTypes |
Hämtar de kulturtyper som hör till det aktuella CultureInfo objektet. |
| CurrentCulture |
Hämtar eller anger det CultureInfo objekt som representerar den kultur som används av den aktuella tråden och uppgiftsbaserade asynkrona åtgärder. |
| CurrentUICulture |
Hämtar eller anger objektet CultureInfo som representerar den aktuella användargränssnittskulturen som används av Resource Manager för att leta upp kulturspecifika resurser vid körning. |
| DateTimeFormat |
Hämtar eller anger ett DateTimeFormatInfo som definierar det kulturellt lämpliga formatet för att visa datum och tider. |
| DefaultThreadCurrentCulture |
Hämtar eller anger standardkulturen för trådar i den aktuella programdomänen. |
| DefaultThreadCurrentUICulture |
Hämtar eller anger standardgränssnittskulturen för trådar i den aktuella programdomänen. |
| DisplayName |
Hämtar det fullständiga lokaliserade kulturnamnet. |
| EnglishName |
Hämtar kulturnamnet i formatet languagefull [country/regionfull] på engelska. |
| IetfLanguageTag |
Inaktuell. Hämtar standardidentifieringen RFC 4646 för ett språk. |
| InstalledUICulture |
Hämtar den CultureInfo kultur som är installerad med operativsystemet. |
| InvariantCulture |
Hämtar objektet CultureInfo som är kulturoberoende (invariant). |
| IsNeutralCulture |
Hämtar ett värde som anger om strömmen CultureInfo representerar en neutral kultur. |
| IsReadOnly |
Hämtar ett värde som anger om den aktuella är CultureInfo skrivskyddad. |
| KeyboardLayoutId |
Hämtar den aktiva nationella indataidentifieraren. |
| LCID |
Hämtar kulturidentifieraren för den aktuella CultureInfo. |
| Name |
Hämtar kulturnamnet i formatet languagecode2-country/regioncode2. |
| NativeName |
Hämtar kulturnamnet, som består av språket, landet/regionen och det valfria skriptet, som kulturen är inställd på att visas. |
| NumberFormat |
Hämtar eller anger ett NumberFormatInfo som definierar det kulturellt lämpliga formatet för att visa tal, valuta och procent. |
| OptionalCalendars |
Hämtar listan över kalendrar som kan användas av kulturen. |
| Parent |
CultureInfo Hämtar som representerar den överordnade kulturen för den aktuella CultureInfo. |
| TextInfo |
TextInfo Hämtar det som definierar skrivsystemet som är associerat med kulturen. |
| ThreeLetterISOLanguageName |
Hämtar iso 639-2-koden med tre bokstäver för språket för den aktuella CultureInfo. |
| ThreeLetterWindowsLanguageName |
Hämtar koden med tre bokstäver för språket enligt definitionen i Windows-API:et. |
| TwoLetterISOLanguageName |
Hämtar iso 639-1-koden med två bokstäver eller ISO 639-3 med tre bokstäver för språket i den aktuella CultureInfo. |
| UseUserOverride |
Hämtar ett värde som anger om det aktuella CultureInfo objektet använder de användarvalda kulturinställningarna. |
Metoder
| Name | Description |
|---|---|
| ClearCachedData() |
Uppdaterar cachelagrad kulturrelaterad information. |
| Clone() |
Skapar en kopia av den aktuella CultureInfo. |
| CreateSpecificCulture(String) |
Skapar en CultureInfo som representerar den specifika kultur som är associerad med det angivna namnet. |
| Equals(Object) |
Avgör om det angivna objektet är samma kultur som det aktuella CultureInfo. |
| GetConsoleFallbackUICulture() |
Hämtar en alternativ användargränssnittskultur som är lämplig för konsolprogram när standardkulturen för grafiskt användargränssnitt är olämplig. |
| GetCultureInfo(Int32) |
Hämtar en cachelagrad, skrivskyddad instans av en kultur med hjälp av den angivna kulturidentifieraren. |
| GetCultureInfo(String, Boolean) |
Hämtar en cachelagrad, skrivskyddad instans av en kultur. |
| GetCultureInfo(String, String) |
Hämtar en cachelagrad, skrivskyddad instans av en kultur. Parametrar anger en kultur som initieras med objekten TextInfo och CompareInfo som anges av en annan kultur. |
| GetCultureInfo(String) |
Hämtar en cachelagrad, skrivskyddad instans av en kultur med det angivna kulturnamnet. |
| GetCultureInfoByIetfLanguageTag(String) |
Inaktuell. Hämtar ett skrivskyddat CultureInfo objekt med språkegenskaper som identifieras av den angivna språktaggen RFC 4646. |
| GetCultures(CultureTypes) |
Hämtar listan över kulturer som stöds filtrerade efter den angivna CultureTypes parametern. |
| GetFormat(Type) |
Hämtar ett objekt som definierar hur du formaterar den angivna typen. |
| GetHashCode() |
Fungerar som en hash-funktion för den aktuella CultureInfo, lämplig för hash-algoritmer och datastrukturer, till exempel en hash-tabell. |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ReadOnly(CultureInfo) |
Returnerar en skrivskyddad omslutning runt det angivna CultureInfo objektet. |
| ToString() |
Returnerar en sträng som innehåller namnet på den aktuella CultureInfo i formatet languagecode2-country/regioncode2. |