2014-01-08 3 views
4

크로스 플랫폼 C++ 응용 프로그램에서 작업 중입니다. 그것은 다국어이며 모든 메시지를 사용자 언어로 표시해야합니다. 로케일을 감지하기 위해서 나는 setlocale (LC_ALL, "") 호출을 사용하고있다. 현재의 언어와 국가를 반환합니다 (예 : "ru_RU.UTF-8").Mac OS X에서 setlocale이 작동하지 않습니다.

터미널에서 응용 프로그램을 시작할 때 모든 것이 MacOS 10.9.1에서 문제없이 작동합니다. Finder에서 응용 프로그램을 실행할 때 setlocale은 항상 기본 로케일 ("C")을 리턴합니다. 필자는 LANG 환경 변수가 Finder에 의해 설정되지 않았기 때문에 그런 것 같습니다.

C++ 응용 프로그램의 MacOS X에서 사용자 로케일을 감지하는 올바른 방법은 무엇입니까?

답변

2

마치 MacOS에서 setlocale 함수가 깨져서 작동하는 대체 방법이 없습니다.

std::string localeStr([[[NSLocale currentLocale] localeIdentifier] UTF8String]); 

나중에 내가 내 C++ 대신에 setlocale에 결과 코드에 localeStr을 전달 해요 : 나는 NSLocale 객체를 사용하여 내 응용 프로그램에 목표 - C++ 모듈을 추가하여 문제를 해결했다.

완벽하게 작동하지만 Objective-C++을 한 줄만 사용하는 것을 좋아하지 않으므로 100 % 만족하지 못합니다. 누군가가 더 나은 해결 방법을 알고 있다면 환영합니다.

+0

CoreFoundation에 해당하는 CFLocale을 사용할 수 있습니다. – rdb