Временно изменяем CurrentCulture¶
Иногда для тестирования некоторых функций вам требуется изменить культуру потока, в котором работает приложение. Текущая культура определяется в глобальном свойстве Thread.CurrentThread.CurrentCulture.
Создадим класс, который реализует интерфейс IDisposable, чтобы иметь ограниченный блок кода, в котором будет использоваться новая культура:
public class TempCulture : IDisposable
{
CultureInfo _old;
public TempCulture(CultureInfo culture)
{
_old = CultureInfo.CurrentCulture;
Thread.CurrentThread.CurrentCulture = culture;
}
public void Dispose()
{
Thread.CurrentThread.CurrentCulture = _old;
}
}
В конструкторе сохраняем текущую культуру в приватном поле. Затем, когда мы вызываем метод
Dispose (который неявно вызывается при закрытии блока using), мы используем это значение для восстановления исходной культуры.
Например, проверим символ валюты:
Thread.CurrentThread.CurrentCulture =
new CultureInfo("ja-jp");
Console.WriteLine(
Thread.CurrentThread.CurrentCulture
.NumberFormat.CurrencySymbol
);
//¥
using (new TempCulture(new CultureInfo("ru-ru")))
{
Console.WriteLine(
Thread.CurrentThread.CurrentCulture
.NumberFormat.CurrencySymbol
);
//₽
}
Console.WriteLine(
Thread.CurrentThread.CurrentCulture
.NumberFormat.CurrencySymbol
);
//¥
Сначала мы устанавливаем культуру текущего потока на японскую, и получаем символ валюты — йену ¥. Затем временно переходим на русскую культуру и в консоль выводится рубль ₽. Наконец, когда мы выходим за пределы блока
using, мы снова получаем йену.
Итого¶
Использование класса, реализующего IDisposable — хороший способ создать временную среду с характеристиками, отличными от характеристик основной среды.
Ссылки¶
https://dev.to/bellonedavide/c-tip-how-to-temporarily-change-the-currentculture-2bp7
Последнее обновление :
9 июля 2023 г.
Дата создания : 1 августа 2022 г.
Дата создания : 1 августа 2022 г.