2013-10-31 2 views
-3

현재 입력 언어를 C++ 시스템 전체에서 가져 오는 방법은 무엇입니까? 다른 창으로 전환하여 입력 언어를 변경하면 언어가 변경되고 언어가 변경되었음을 어떻게 알 수 있습니까?현재 입력 언어 C++을 얻는 방법?

+0

시스템 디자인과 달성하려는 목표에 따라 달라질 수 있습니다. – StoryTeller

+1

사용중인 운영 체제를 알지 못하면 알려 드릴 수 없습니다. 어쨌든 OS에 맞는 API 함수를 호출해야합니다. "언어"는 C++ 자체에 어떤 개념도 없습니다. – benjymous

+0

@benjymous C++ _does_에는 언어를 포함하는 로캘이라는 개념이 있습니다. –

답변

1

나는 그것을 OS에 따라 생각하고 창에서, 다음과 같은 코드를 시도 :

char szBuf[25]; 
double thId; 
HANDLE hCurrentKBLayout; 

hCurrentKBLayout = GetKeyboardLayout(0); 
memset(szBuf, 0x00, 25); 

ImmGetDescription(hCurrentKBLayout, szBuf, 50); 
if(String(szBuf).Length()==0) 
    strcpy(szBuf,"系统默认"); 
ShowMessage("current input language is:" + String(szBuf)); 
+0

키보드 레이아웃은 사람이 사용하는 언어와 어떤 관련이 있습니까? –

1

공식적으로 로케일 ""는 일반적으로 을 일치해야 구현 정의 된 로케일에 대응하도록되어를 무엇 사용자는 자신의 언어를 원합니다. 작동 여부는 이 실제 구현에 많이 의존합니다. std::locale().name()는 항상 (내가하지 윈도우의 미국 버전을 실행 을 해요 비록) 내 Windows 시스템에서 "C"를 반환하는 것 같다.

더 일반적으로, 하나의 "언어"가 없을 수도 있습니다. 예를 들어 입력은 시스템 레벨에서 일반적으로 언어 중립적입니다. 주요 요소는 키보드가 설정되는 방법이지만 문자가 프로그램에 있으면 문자를 입력하고 을 입력하는 방법입니다 (아마도 당신이 알고 싶어하는 것). 무슨 관습에 따라 그들을 해석하는 방법입니다). 다른 프로그램 또는 OS 사용법을 알고 싶다면 OS 특정 수단을 찾아야합니다. 이것은 과 같은 환경 변수가 LANG, LC_CTYPE 등이 정보를 포함하지만 다른 규약이 어떻게 인코딩되는지는 알 수 있습니다. (최근 버전의 Windows도 역시 Posix 표준 양식을 지원한다고 생각하지만) OS의 버전은 입니다. 유닉스 이외의 다른 수단으로는 을 자주 사용하기 때문에 여기에 뭔가 특별한 OS가 필요할 것이다.

관련 문제