[WinAPI] 현재 언어 설정 읽기 – GetUserDefaultUILanguage

오늘은 언어 설정값을 읽어오는 방법을 알아보겠습니다.

배포하는 프로그램이 다국어를 지원하는 경우, 현재 System Locale 무엇인지 알아야 합니다.

이것은 제어판 -> 시계 및 국가 -> 국가 또는 지역 -> 관리자 옵션 탭에서 시스템 로캘 변경을 눌러 알 수 있습니다.

해당 Locale 값을 GetUserDefaultUILanguage 함수를 통해 알아 볼 수 있습니다.

GetUserDefaultUILanguage를 사용하기 위해선 아래 조건을 만족해야합니다.

Minimum supported clientWindows 2000 Professional [desktop apps | UWP apps]
Minimum supported serverWindows 2000 Server [desktop apps | UWP apps]
Headerwinnls.h (include Windows.h)
LibraryKernel32.lib
DLLKernel32.dll

함수 원형은 아래와 같습니다.

LANGID GetUserDefaultUILanguage();

파라미터는 없으면 LANGID 형식으로 반환이 됩니다.

이렇게 반환된 LANGID에서 Primary Language ID(0 ~ 8)에 현재 로캘이 저장되어 있습니다.

PRIMARYLANGID를 사용하여 해당 위치의 값만 빠르게 얻을 수 있습니다.

전체 코드는 아래와 같습니다.

#include <iostream>
#include <windows.h>

using namespace std;

void main()
{
	LANGID lang_id = GetUserDefaultUILanguage();
	cout << "language id : 0x" << hex << lang_id << endl;

	LANGID pri_lang_id = PRIMARYLANGID( lang_id );
	cout << "primary language id : 0x" << hex << pri_lang_id << endl;
	if ( pri_lang_id == LANG_KOREAN )
		cout << "LANG_KOREAN" << endl;
	else if ( pri_lang_id == LANG_JAPANESE )
		cout << "LANG_JAPANESE" << endl;
}

출력 결과는 아래와 같습니다.