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 Example
{
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; [assembly:TargetFramework(".NETFramework,Version=v4.6")] public class Example { 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.
Обратите внимание, что при задании определенного языка и региональных параметров, отличающегося от установленной системой языка и региональных параметров пользователя, и приложение запускает несколько потоков, текущий язык и региональные параметры этих потоков будут представлять собой культуру, возвращаемую GetUserDefaultLocaleName
функцией, если только вы не назначите язык и региональные параметры для DefaultThreadCurrentCulture свойства в домене приложения, в котором выполняется поток.
Дополнительные сведения о том, как определяется язык и региональные параметры потока, см. в разделе "Культура и потоки" на CultureInfo странице справки.
Получить текущий язык и региональные параметры
CultureInfo.CurrentCultureСвойство является параметром для каждого потока, то есть каждый поток может иметь свой собственный язык и региональные параметры. Вы получаете язык и региональные параметры текущего потока, извлекая значение CultureInfo.CurrentCulture свойства, как показано в следующем примере.
using System;
using System.Globalization;
public class Example
{
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 Info : 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 Example
{
public static void Main()
{
Info inf = 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.
AppDomain ad = AppDomain.CreateDomain("Domain2");
Info inf2 = (Info) ad.CreateInstanceAndUnwrap(typeof(Info).Assembly.FullName, "Info");
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 DateTimeFormat NumberFormat , и TextInfo отражать конкретную культуру, связанную с нейтральным языком и региональными параметрами. Например, главным языком и региональными параметрами для нейтрального английского языка является английский (США); главным языком и региональными параметрами для немецкого языка является немецкий (Германия). В следующем примере показано различие в форматировании, когда текущий язык и региональные параметры заданы для определенного языка и региональных параметров, французского (Канада) и нейтрального языка и региональных параметров французский.
using System;
using System.Globalization;
using System.Threading;
public class Example
{
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(Request.UserLanguages[0]);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))
Текущий язык и региональные параметры и пользовательские переопределения
Windows позволяет пользователям переопределять стандартные значения свойств CultureInfo объекта и связанных с ним объектов с помощью языковых и региональных параметров на панели управления. CultureInfoОбъект, возвращаемый CurrentCulture свойством, отражает переопределяемые пользователем переопределения в следующих случаях:
если язык и региональные параметры текущего потока задаются неявно
GetUserDefaultLocaleName
функцией Windows.если язык и региональные параметры текущего потока, определенные DefaultThreadCurrentCulture свойством, соответствуют текущему языку и региональным параметрам системы Windows.
если язык и региональные параметры текущего потока заданы явно для языка и региональных параметров, возвращаемых CreateSpecificCulture методом, а этот язык и региональные параметры соответствуют текущему языку и региональным параметрам системы Windows.
если язык и региональные параметры текущего потока заданы явно для языка и региональных параметров CultureInfo(String) , созданных конструктором, а этот язык и региональные параметры соответствуют текущей культуре системы Windows.
В некоторых случаях, особенно для серверных приложений, установка текущего языка и региональных параметров для CultureInfo объекта, отражающего переопределенные пользователем переопределения, может быть нежелательной. Вместо этого можно задать текущий язык и региональные параметры для CultureInfo объекта, который не отражает переопределяемые пользователем, следующим образом.
Путем вызова CultureInfo(String, Boolean) конструктора со значением
false
дляuseUserOverride
аргумента.Путем вызова GetCultureInfo метода, который возвращает кэшированный объект, предназначенный только для чтения CultureInfo .
Текущие язык и региональные параметры и приложения UWP
в приложениях универсальная платформа Windows (UWP) CurrentCulture свойство доступно для чтения и записи так же, как и в платформа .NET Framework и в приложениях .net Core. его можно использовать для получения и установки текущего языка и региональных параметров. Однако приложения UWP не различают текущий язык и региональные параметры пользовательского интерфейса. CurrentCultureСвойства и CurrentUICulture сопоставляются с первым значением в Windows. Коллекция ApplicationModel. Resources. Core. ResourceManager. Дефаултконтекст. Languages .
в платформа .NET Framework и приложениях .net Core текущий язык и региональные параметры — это параметр для каждого потока, а CurrentCulture свойство отражает язык и региональные параметры текущего потока. В приложениях UWP текущий язык и региональные параметры сопоставлены с Windows. Свойство ApplicationModel. Resources. Core. ResourceManager. Дефаултконтекст. Languages является глобальным параметром. Установка CurrentCulture свойства изменяет язык и региональные параметры для всего приложения; язык и региональные параметры не могут устанавливаться отдельно для каждого потока.