C# 팁: CurrentCulture를 일시적으로 변경하는 방법

6898 단어 dotnetcsharp
일부 기능을 테스트하기 위해서라도 애플리케이션이 실행 중인 스레드의 Culture를 변경하려는 경우가 발생할 수 있습니다.

현재 문화권은 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를 구현하는 클래스를 사용하는 것은 기본 환경과 다른 특성을 가진 임시 환경을 만드는 좋은 방법입니다.

저는 영어(또는 보다 일반적으로 서양) 문화를 사용하지 않을 때 코드가 어떻게 작동하는지 이해하기 위해 다른 문화를 실험하고 싶을 때 이 접근 방식을 많이 사용합니다.

동일한 목표를 달성하기 위한 다른 접근 방식이 있습니까? 그렇다면 의견 섹션에서 자유롭게 공유하십시오!

즐거운 코딩하세요!

🐧

좋은 웹페이지 즐겨찾기