mfc에서 언어별 리소스 관리하기
Posted on 2014. 1. 2. 15:50
Filed Under IT/mfc
mfc 프로젝트에서 다양한 언어를 지원해야할 경우에 사용하는 방법입니다.
dll로 분리하여 관리하면 한 프로젝트에서 리소스를 관리하는것 보다 조금 더 정리된 상태에서 관리가 가능합니다.
그리고 개발자가 직접 코드를 수정하지 않고 외부 인력이 번역하여 수정할 수 있기 때문에 개발자가 조금 더 편할수 있습니다.ㅎㅎ
이 예제는 vs2012에서 작성하였습니다.
1. dll 프로젝트를 생성합니다.
저는 아래와 같이 MFC DLL을 선택하였습니다.
쭉쭉 진행~
2. 원본 프로젝트의 resource.h, *.rc, res폴더를 새로 만든 프로젝트에 복사합니다.
3. 파일을 복사한 후 새로만든 프로젝트의 *.rc파일을 삭제하고 덮어 씌운 원래 프로젝트의 *.rc파일을 새로만들어진 프로젝트의 *.rc파일로 변경합니다.
이렇게 변경하면 원래 프로젝트의 리소스를 그대로 가져올 수 있습니다.
4. 가져온 리소스를 변경을 원하는 언어로 변경합니다.
변경 방법은 리소스에 마우스 우클릭하여 복사본 삽입메뉴를 선택하면 됩니다.
5. 원하는 언어를 선택합니다.
저는 영어를 선택했네요.
6. 아래와 같이 IDD_ABOUTBOX가 영어 버전이 추가되었습니다.
원래의 IDD_ABOUTBOX는 필요없으므로 이제 삭제합니다. 영어버전만 남깁니다.
프로젝트 이름이 이상하지만 무시하고 계속 진행.
7. 빌드하면 dll파일이 생깁니다.
8. 전 최종적으로 이런식으로 프로젝트를 생성하였습니다.
9. 아래와 같이 코드에 적용하면 끝.
코드는 사용자 설정 언어를 파악하여 원하는 언어를 선택하는 부분입니다.
LoadLibrary호출 후 AfxSetResourceHandle을 통해서 리소스를 선택하면 적용됩니다.
최근에 확인했는데 GetUserDefaultLangID()가 시스템 언어는 읽지만 표시언어는 제대로 못읽는거 같네요. GetSystemDefaultLangID()도 마찬가지구요. 이게 윈도우 특성을 탈지도 모르겠네요. 해본 사람마다 말이 달라서...
일단 저는 GetUserDefaultUILanguage()로 해결했습니다.