C# 팁: CurrentCulture를 일시적으로 변경하는 방법
현재 문화권은
Thread.CurrentThread.CurrentCulture
전역 속성에 정의되어 있습니다. 어떻게 일시적으로 변경할 수 있습니까?IDisposable
인터페이스를 구현하는 클래스를 만들어 using
블록으로 구분된 섹션을 만들고 새로운 Culture를 사용하는 것이 좋습니다.public class TemporaryThreadCulture : IDisposable
{
CultureInfo _oldCulture;
public TemporaryThreadCulture(CultureInfo newCulture)
{
_oldCulture = CultureInfo.CurrentCulture;
Thread.CurrentThread.CurrentCulture = newCulture;
}
public void Dispose()
{
Thread.CurrentThread.CurrentCulture = _oldCulture;
}
}
생성자에서 현재 Culture를 개인 필드에 저장합니다. 그런 다음
Dispose
메서드(using
블록을 닫을 때 암시적으로 호출됨)를 호출하면 해당 값을 사용하여 원래 Culture를 복원합니다.사용 방법
우리는 그것을 어떻게 시도할 수 있습니까? 예를 들어 통화 기호를 확인하는 것입니다.
Thread.CurrentThread.CurrentCulture = new CultureInfo("ja-jp");
Console.WriteLine(Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol); //¥
using (new TemporaryThreadCulture(new CultureInfo("it-it")))
{
Console.WriteLine(Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol);//€
}
Console.WriteLine(Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol); //¥
통화 기호가 ¥가 되도록 현재 스레드의 문화권을 일본어로 설정하는 것으로 시작합니다. 그런 다음 일시적으로 이탈리아 문화로 이동하고 유로 기호를 인쇄합니다. 마지막으로
using
블록 밖으로 이동하면 ¥로 돌아갑니다.다음은 사용법을 보여주는 테스트입니다.
[Fact]
void TestChangeOfCurrency()
{
using (new TemporaryThreadCulture(new CultureInfo("it-it")))
{
var euro = CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol;
Assert.Equal(euro, "€");
using (new TemporaryThreadCulture(new CultureInfo("en-us")))
{
var dollar = CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol;
Assert.NotEqual(euro, dollar);
}
Assert.Equal(euro, "€");
}
}
결론
IDisposable
를 구현하는 클래스를 사용하는 것은 기본 환경과 다른 특성을 가진 임시 환경을 만드는 좋은 방법입니다.저는 영어(또는 보다 일반적으로 서양) 문화를 사용하지 않을 때 코드가 어떻게 작동하는지 이해하기 위해 다른 문화를 실험하고 싶을 때 이 접근 방식을 많이 사용합니다.
동일한 목표를 달성하기 위한 다른 접근 방식이 있습니까? 그렇다면 의견 섹션에서 자유롭게 공유하십시오!
즐거운 코딩하세요!
🐧
Reference
이 문제에 관하여(C# 팁: CurrentCulture를 일시적으로 변경하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bellonedavide/c-tip-how-to-temporarily-change-the-currentculture-2bp7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)