WPF

[WPF] WPF Application(4) - Application Culture / UICulture

귀뚜래미 2022. 9. 6. 17:25
728x90

 

- 숫자 또는 날짜 정보는 응용 프로그램을 실행하는 컴퓨터의 특정 언어 설정에 기반해 자동으로 변환된다.

- 하지만 이러한 기능이 항상 동작하진 않기 때문에 이럴 경우 CultureInfo 클래스를 사용한다.

 

 

Ad-hoc formatting

- 만약 특정 정보, 특히 단일 Label의 내용에 서식을 지정해야하는 경우라면 ToString() 함수와 CultureInfo 클래스를 조합해 바로 쉽게 적용할 수 있다.

double largeNumber = 123456789.42;

CultureInfo usCulture = new CultureInfo("en-US");
CultureInfo deCulture = new CultureInfo("de-DE");
CultureInfo seCulture = new CultureInfo("sv-SE");

lblNumberUs.Content = largeNumber.ToString("N2", usCulture);
lblNumberDe.Content = largeNumber.ToString("N2", deCulture);
lblNumberSe.Content = largeNumber.ToString("N2", seCulture);

- 위와 같은 방식으로 직접 특정 서식을 지정할 수 있다.

 

 

CurrentCulture & CurrentUICulture

- 다른 문화권의 표현 방식을 WPF 응용 프로그램에 적용하는 것은 Thread 클래스의 CurrentThread 속성 내부에서 CurrentCulture 속성과 CurrentUICulture 속성을 통해 처리할 수 있다.

 

- CurrentCulture 속성은 숫자와 날짜를 어떻게 표현할지 제어한다. 

- 기본값은 응용 프로그램을 실행하는 운영체제로부터 결정되며 운영체제에서 사용하는 언어와 별개로 변경할 수 있다.

- 독일 사람이 영어를 가지고 윈도우를 설치하더라도 날짜와 숫자는 독일식으로 표기되기를 원할 경우 CurrentCulture 속성은 독일어가 기본 설정이 된다.

 

- CurrentUICulture 속성은 인터페이스로 사용할 언어를 특정한다.

- 예로 언어별 자원 파일을 통해 응용 프로그램이 다중 언어를 지원할 경우 해당된다.

- 위의 예를 이어 숫자나 날짜 정보의 입출력을 처리할 때 독일어 대신 영어를 사용할 수 있게된다.

 

- CurrentCulture와 CurrentUICulture는 원하는 시점에 변경 가능하지만 이전 문화권 설정으로 일부 처리될 수도 있기 때문에 응용 프로그램이 시작할 때 수행하는 것이 좋다.

 

Culture, UICulture 변경 예시

using System.Threading;
using System.Globalization;
// Thread 클래스와 CultureInfo 클래스를 사용하기 위해 필요한 네임스페이스를 파일에 꼭 추가해야함

namespace HelloWPF
{    
    public partial class App : Application
    {        
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
        }
    }
}

- 위 코드를 통해 숫자와 날짜 정보는 선택한 독일 문화권에 따라 표현된다.

- 다중 언어를 지원하는 응용 프로그램이 아닌 경우 UICulture 코드 부분을 생략해도 무방하다.

728x90