- 숫자 또는 날짜 정보는 응용 프로그램을 실행하는 컴퓨터의 특정 언어 설정에 기반해 자동으로 변환된다.
- 하지만 이러한 기능이 항상 동작하진 않기 때문에 이럴 경우 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 코드 부분을 생략해도 무방하다.
'WPF' 카테고리의 다른 글
[WPF] WPF 기본 컨트롤(2) - Label (0) | 2022.09.07 |
---|---|
[WPF] WPF 기본 컨트롤(1) - TextBlock (0) | 2022.09.07 |
[WPF] WPF Application(3) - 리소스 (0) | 2022.09.06 |
[WPF] WPF Application(2) - App.xaml 과의 연동 (0) | 2022.09.06 |
[WPF] WPF Application(1) - Window 클래스 (0) | 2022.09.01 |