CultureInfo.CurrentCulture Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает CultureInfo объект, представляющий язык и региональные параметры, используемые текущим потоком и асинхронными операциями на основе задач.
public:
static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentCulture { get; set; }
public static System.Globalization.CultureInfo CurrentCulture { get; }
member this.CurrentCulture : System.Globalization.CultureInfo with get, set
member this.CurrentCulture : System.Globalization.CultureInfo
Public Shared Property CurrentCulture As CultureInfo
Public Shared ReadOnly Property CurrentCulture As CultureInfo
Значение свойства
Язык и региональные параметры, используемые текущим потоком и асинхронными операциями на основе задач.
Исключения
Для свойства задано значение null
.
Примеры
В следующем примере показано, как изменить CurrentCulture и CurrentUICulture текущий поток.
using namespace System;
using namespace System::Globalization;
using namespace System::Threading;
int main()
{
// Display the name of the current thread culture.
Console::WriteLine("CurrentCulture is {0}.", CultureInfo::CurrentCulture->Name);
// Change the current culture to th-TH.
CultureInfo::CurrentCulture = gcnew CultureInfo("th-TH",false);
Console::WriteLine("CurrentCulture is now {0}.", CultureInfo::CurrentCulture->Name);
// Displays the name of the CurrentUICulture of the current thread.
Console::WriteLine("CurrentUICulture is {0}.", CultureInfo::CurrentCulture->Name);
// Changes the CurrentUICulture of the current thread to ja-JP.
CultureInfo::CurrentUICulture = gcnew CultureInfo("ja-JP",false);
Console::WriteLine("CurrentUICulture is now {0}.", CultureInfo::CurrentCulture->Name);
}
// The example displays the following output:
// CurrentCulture is en-US.
// CurrentCulture is now th-TH.
// CurrentUICulture is en-US.
// CurrentUICulture is now ja-JP.
using System;
using System.Globalization;
using System.Threading;
public class Example0
{
public static void Main()
{
// Display the name of the current culture.
Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);
// Change the current culture to th-TH.
CultureInfo.CurrentCulture = new CultureInfo("th-TH", false);
Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name);
// Display the name of the current UI culture.
Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);
// Change the current UI culture to ja-JP.
CultureInfo.CurrentUICulture = new CultureInfo( "ja-JP", false );
Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name);
}
}
// The example displays the following output:
// CurrentCulture is en-US.
// CurrentCulture is now th-TH.
// CurrentUICulture is en-US.
// CurrentUICulture is now ja-JP.
Imports System.Globalization
Imports System.Threading
Public Module Example
Public Sub Main()
' Display the name of the current culture.
Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name)
' Change the current culture to th-TH.
CultureInfo.CurrentCulture = New CultureInfo("th-TH", False)
Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name)
' Display the name of the current UI culture.
Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name)
' Change the current UI culture to ja-JP.
CultureInfo.CurrentUICulture = New CultureInfo("ja-JP", False)
Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name)
End Sub
End Module
' The example displays the following output:
' CurrentCulture is en-US.
' CurrentCulture is now th-TH.
' CurrentUICulture is en-US.
' CurrentUICulture is now ja-JP.
Комментарии
Объект CultureInfo , возвращаемый этим свойством и связанными с ним объектами, определяет формат по умолчанию для дат, времени, чисел, значений валют, порядка сортировки текста, соглашений о регистре и сравнения строк.
Текущий язык и региональные параметры — это свойство выполняемого потока. При присвоении этому свойству CultureInfo объекта, представляющего новый язык и региональные параметры, значение Thread.CurrentThread.CurrentCulture
свойства также изменяется. Однако мы рекомендуем всегда использовать CultureInfo.CurrentCulture свойство для получения и задания текущего языка и региональных параметров.
Объект CultureInfo
, возвращаемый этим свойством, доступен только для чтения. Это означает, что вы не можете изменить существующий объект, например путем изменения DateTimeFormat
. Чтобы изменить формат даты и времени или другой аспект текущего языка и региональных параметров, создайте новый CultureInfo
объект и назначьте его свойству.
Примечание
В платформа .NET Framework версии 4.5.2 и более ранних CultureInfo.CurrentCulture версий свойство доступно только для чтения; то есть можно получить значение свойства, но его нельзя задать.
Содержание
Определение языка и региональных параметров потока
Получение текущего языка и региональных параметров
Явное установка свойства CurrentCulture
Переопределения пользователей
Язык и региональные параметры и приложения Windows
Определение языка и региональных параметров потока
При запуске потока его язык и региональные параметры изначально определяются следующим образом:
Извлекая язык и региональные параметры, заданные свойством DefaultThreadCurrentCulture в домене приложения, в котором выполняется поток, если значение свойства не
null
равно.Если поток является потоком пула потоков, выполняющим асинхронную операцию на основе задач, и приложение предназначено для платформа .NET Framework 4.6 или более поздней версии платформа .NET Framework, его язык и региональные параметры определяются языком и региональными параметрами вызывающего потока. Следующий пример изменяет текущий язык и региональные параметры на португальский (Бразилия) и запускает шесть задач, каждая из которых отображает идентификатор потока, идентификатор задачи и текущий язык и региональные параметры. Каждая из задач (и потоков) унаследовала язык и региональные параметры вызывающего потока.
using System; using System.Collections.Generic; using System.Globalization; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; public class Example14 { public static async Task Main() { var tasks = new List<Task>(); Console.WriteLine("The current culture is {0}", Thread.CurrentThread.CurrentCulture.Name); Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR"); // Change the current culture to Portuguese (Brazil). Console.WriteLine("Current culture changed to {0}", Thread.CurrentThread.CurrentCulture.Name); Console.WriteLine("Application thread is thread {0}", Thread.CurrentThread.ManagedThreadId); // Launch six tasks and display their current culture. for (int ctr = 0; ctr <= 5; ctr++) tasks.Add(Task.Run(() => { Console.WriteLine("Culture of task {0} on thread {1} is {2}", Task.CurrentId, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.CurrentCulture.Name); })); await Task.WhenAll(tasks.ToArray()); } } // The example displays output like the following: // The current culture is en-US // Current culture changed to pt-BR // Application thread is thread 9 // Culture of task 2 on thread 11 is pt-BR // Culture of task 1 on thread 10 is pt-BR // Culture of task 3 on thread 11 is pt-BR // Culture of task 5 on thread 11 is pt-BR // Culture of task 6 on thread 11 is pt-BR // Culture of task 4 on thread 10 is pt-BR
Imports System.Collections.Generic Imports System.Globalization Imports System.Runtime.Versioning Imports System.Threading Imports System.Threading.Tasks <assembly:TargetFramework(".NETFramework,Version=v4.6")> Module Example Public Sub Main() Dim tasks As New List(Of Task) Console.WriteLine("The current culture is {0}", Thread.CurrentThread.CurrentCulture.Name) Thread.CurrentThread.CurrentCulture = New CultureInfo("pt-BR") ' Change the current culture to Portuguese (Brazil). Console.WriteLine("Current culture changed to {0}", Thread.CurrentThread.CurrentCulture.Name) Console.WriteLine("Application thread is thread {0}", Thread.CurrentThread.ManagedThreadId) ' Launch six tasks and display their current culture. For ctr As Integer = 0 to 5 tasks.Add(Task.Run(Sub() Console.WriteLine("Culture of task {0} on thread {1} is {2}", Task.CurrentId, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.CurrentCulture.Name) End Sub)) Next Task.WaitAll(tasks.ToArray()) End Sub End Module ' The example displays output like the following: ' The current culture is en-US ' Current culture changed to pt-BR ' Application thread is thread 9 ' Culture of task 2 on thread 11 is pt-BR ' Culture of task 1 on thread 10 is pt-BR ' Culture of task 3 on thread 11 is pt-BR ' Culture of task 5 on thread 11 is pt-BR ' Culture of task 6 on thread 11 is pt-BR ' Culture of task 4 on thread 10 is pt-BR
Дополнительные сведения см. в разделе "Язык и асинхронные операции на основе задач" раздела CultureInfo .
Вызывая функцию
GetUserDefaultLocaleName
Windows илиuloc_getDefault
функцию из ICU, которая в настоящее время вызывает функцию POSIXsetlocale
с категориейLC_MESSAGES
в системах unix-like.
Обратите внимание, что если задать определенный язык и региональные параметры, отличные от установленного системой языка и региональных параметров или предпочитаемого пользователем языка и региональных параметров, а приложение запускает несколько потоков, текущий язык и региональные параметры этих потоков будут языком GetUserDefaultLocaleName
и региональными параметрами, возвращаемыми функцией, если только вы не назначите DefaultThreadCurrentCulture свойство в домене приложения, в котором выполняется поток.
Дополнительные сведения о том, как определяется язык и региональные параметры потока, см. в разделе "Язык и региональные параметры и потоки" на справочной CultureInfo странице.
Получение текущего языка и региональных параметров
Свойство CultureInfo.CurrentCulture является параметром для каждого потока, то есть каждый поток может иметь собственный язык и региональные параметры. Вы получите язык и региональные параметры текущего CultureInfo.CurrentCulture потока, извлекая значение свойства, как показано в следующем примере.
using System;
using System.Globalization;
public class Example5
{
public static void Main()
{
CultureInfo culture = CultureInfo.CurrentCulture;
Console.WriteLine("The current culture is {0} [{1}]",
culture.NativeName, culture.Name);
}
}
// The example displays output like the following:
// The current culture is English (United States) [en-US]
Imports System.Globalization
Module Example
Public Sub Main()
Dim culture As CultureInfo = CultureInfo.CurrentCulture
Console.WriteLine("The current culture is {0} [{1}]",
culture.NativeName, culture.Name)
End Sub
End Module
' The example displays output like the following:
' The current culture is English (United States) [en-US]
Явное установка свойства CurrentCulture
Чтобы изменить язык и региональные параметры, используемые существующим потоком, задайте CultureInfo.CurrentCulture для свойства новый язык и региональные параметры. Если явно изменить язык и региональные параметры потока таким образом, это изменение сохраняется, если поток пересекает границы домена приложения. В следующем примере изменяется текущий язык и региональные параметры потока на голландский (Нидерланды). Также показано, что, когда текущий поток пересекает границы домена приложения, его текущий язык и региональные параметры остаются измененными.
using System;
using System.Globalization;
using System.Threading;
public class Info11 : MarshalByRefObject
{
public void ShowCurrentCulture()
{
Console.WriteLine("Culture of {0} in application domain {1}: {2}",
Thread.CurrentThread.Name,
AppDomain.CurrentDomain.FriendlyName,
CultureInfo.CurrentCulture.Name);
}
}
public class Example11
{
public static void Main()
{
Info11 inf = new Info11();
// Set the current culture to Dutch (Netherlands).
Thread.CurrentThread.Name = "MainThread";
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL");
inf.ShowCurrentCulture();
// Create a new application domain.
AppDomain ad = AppDomain.CreateDomain("Domain2");
Info11 inf2 = (Info11) ad.CreateInstanceAndUnwrap(typeof(Info11).Assembly.FullName, "Info11");
inf2.ShowCurrentCulture();
}
}
// The example displays the following output:
// Culture of MainThread in application domain ChangeCulture1.exe: nl-NL
// Culture of MainThread in application domain Domain2: nl-NL
Imports System.Globalization
Imports System.Threading
Public Class Info : Inherits MarshalByRefObject
Public Sub ShowCurrentCulture()
Console.WriteLine("Culture of {0} in application domain {1}: {2}",
Thread.CurrentThread.Name,
AppDomain.CurrentDomain.FriendlyName,
CultureInfo.CurrentCulture.Name)
End Sub
End Class
Module Example
Public Sub Main()
Dim inf As New Info()
' Set the current culture to Dutch (Netherlands).
Thread.CurrentThread.Name = "MainThread"
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL")
inf.ShowCurrentCulture()
' Create a new application domain.
Dim ad As AppDomain = AppDomain.CreateDomain("Domain2")
Dim inf2 As Info = CType(ad.CreateInstanceAndUnwrap(GetType(Info).Assembly.FullName, "Info"),
Info)
inf2.ShowCurrentCulture()
End Sub
End Module
' This example displays the following output:
' Culture of MainThread in application domain Example.exe: nl-NL
' Culture of MainThread in application domain Domain2: nl-NL
Примечание
Для изменения языка и региональных параметров с помощью CultureInfo.CurrentCulture свойства требуется SecurityPermission разрешение с заданным значением ControlThread . Управление потоками опасно из-за состояния безопасности, связанного с потоками. Таким образом, это разрешение должно быть предоставлено только надежному коду, а затем только при необходимости. Нельзя изменить язык и региональные параметры потока в полунадежном коде.
Начиная с платформа .NET Framework 4, можно явно изменить текущий язык и региональные параметры на определенный язык и региональные параметры (например, французский (Канада)) или нейтральный язык и региональные параметры (например, французский). CultureInfo Если объект представляет нейтральный язык и региональные параметры, значения свойств, таких CultureInfo как Calendar, CompareInfo, DateTimeFormatNumberFormatи TextInfo отражают конкретный язык и региональные параметры, связанные с нейтральным языком и региональными параметрами. Например, доминирующей культурой для английской нейтральной культуры является английский (США); доминирующей культурой для немецкой культуры является немецкий (Германия). В следующем примере показано различие в форматировании, если текущий язык и региональные параметры заданы для определенного языка и региональных параметров, французского языка (Канада) и нейтрального языка и региональных параметров, французского языка.
using System;
using System.Globalization;
using System.Threading;
public class Example12
{
public static void Main()
{
double value = 1634.92;
CultureInfo.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine("Current Culture: {0}",
CultureInfo.CurrentCulture.Name);
Console.WriteLine("{0:C2}\n", value);
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
Console.WriteLine("Current Culture: {0}",
CultureInfo.CurrentCulture.Name);
Console.WriteLine("{0:C2}", value);
}
}
// The example displays the following output:
// Current Culture: fr-CA
// 1 634,92 $
//
// Current Culture: fr
// 1 634,92 €
Imports System.Globalization
Imports System.Threading
Module Example
Public Sub Main()
Dim value As Double = 1634.92
CultureInfo.CurrentCulture = New CultureInfo("fr-CA")
Console.WriteLine("Current Culture: {0}",
CultureInfo.CurrentCulture.Name)
Console.WriteLine("{0:C2}", value)
Console.WriteLine()
Thread.CurrentThread.CurrentCulture = New CultureInfo("fr")
Console.WriteLine("Current Culture: {0}",
CultureInfo.CurrentCulture.Name)
Console.WriteLine("{0:C2}", value)
End Sub
End Module
' The example displays the following output:
' Current Culture: fr-CA
' 1 634,92 $
'
' Current Culture: fr
' 1 634,92 €
Вы также можете использовать CultureInfo.CurrentCulture свойство вместе со свойствомHttpRequest.UserLanguages, чтобы задать CurrentCulture свойство приложения ASP.NET предпочитаемым языком и региональными параметрами пользователя, как показано в следующем примере.
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(Request13.UserLanguages[0]);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))
Текущие язык и региональные параметры и переопределения пользователей
Windows позволяет пользователям переопределять стандартные значения CultureInfo свойств объекта и связанных с ним объектов с помощью региональных и языковых параметров в панель управления. Объект, CultureInfo возвращаемый свойством CurrentCulture , отражает эти переопределения пользователей в следующих случаях:
Если текущий язык и региональные параметры потока задаются неявно функцией Windows
GetUserDefaultLocaleName
.Если текущий язык и региональные параметры потока, определенные свойствомDefaultThreadCurrentCulture, соответствуют текущему Windows системным языку и региональным параметрам.
Если текущий язык и региональные параметры потока явно заданы для языка и региональных параметров, возвращаемых методомCreateSpecificCulture, и этот язык и региональные параметры соответствуют текущему Windows системным языком и региональным параметрам.
Если текущий язык и региональные параметры потока заданы явным образом в качестве экземпляра CultureInfo(String) языка и региональных параметров, созданных конструктором, и этот язык и региональные параметры соответствуют текущему Windows системным языку и региональным параметрам.
В некоторых случаях, особенно для серверных приложений, установка текущего CultureInfo языка и региональных параметров для объекта, который отражает переопределения пользователей, может оказаться нежелательным. Вместо этого можно задать текущий CultureInfo язык и региональные параметры для объекта, который не отражает переопределения пользователей следующими способами:
Вызывая CultureInfo(String, Boolean) конструктор со значением аргумента
false
useUserOverride
.Вызывая GetCultureInfo метод, который возвращает кэшированный объект, доступный только для CultureInfo чтения.
Текущие региональные параметры и приложения UWP
В приложениях CurrentCulture универсальная платформа Windows (UWP) свойство считывается и записывается так же, как в приложениях платформа .NET Framework и .NET Core. Его можно использовать как для получения, так и для задания текущего языка и региональных параметров. Однако приложения UWP не различают текущий язык и региональные параметры и текущие региональные параметры пользовательского интерфейса. CurrentUICulture Свойства CurrentCulture сопоставляют первое значение в Windows. Коллекция ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages.
В приложениях платформа .NET Framework и .NET Core текущий язык и региональные параметры — это параметр для каждого потока, а CurrentCulture свойство отражает только язык и региональные параметры текущего потока. В приложениях UWP текущий язык и региональные параметры сопоставляется с Windows. Свойство ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages, которое является глобальным параметром. Задание свойства изменяет язык и региональные CurrentCulture параметры всего приложения. Язык и региональные параметры нельзя задать для каждого потока.