C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[50795] Re:Re:Re:Re:Re:[질문] Translation Manager의 다국어 지원...
장성호 [nasilso] 1438 읽음    2007-10-10 01:22
exe는 당연히 하나입니다.

원래 exe파일안에 아이콘을 비롯한 text 및 이미지 등의 리소스들이 같이 들어가게 있습니다.

window프로그램은  WinMain이 호출되기 전에
GetModuleHandle이라는 api로  HInstance를 얻어서 WinMain을 호출하면서 넘겨줍니다.

만약  HInstance 에 다른 리소스 dll을 load해뒀다면 어떻게 될까요?
아마 Form을 생성하거나 Icon을 생성할때 HInstance 에서 리소스 정보를 가져와서 생성하는데..
그것이 모양은 똑 같지만 다른것으로 대체되어있다면 여러가지 언어 지원이 불가능할것 없겠죠

실제로 첨부한 파일에 보면  .exe는 하나에  같은 이름의 .ENU파일과 .KOR파일이 있습니다.
Software\\Borland\\Locales 의 레지스터리 설정에 따라
exe가 running될때 해당되는 .ENU나 .KOR가 로드 되어서 HInstance에 할당되는것 같습니다.

짧은 지식으로 설명하기 어렵네요

여기 강좌 자료실에있는 
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=64

C++Builder6.0 한글 메뉴얼에서 16장 국제적인 애플리케이션 생성의
    16-10  리소스 DLL 생성
    16-12  리소스 DLL의 동적 전환

부분을 참조하세요

첨부한 자료는 예전에  5.0으로 샘플 만들어 둔것을 6.0으로 다시 컴파일 해서 올린것입니다.

그럼....



이렇게 하면
exe가 메모리에  mapping될때  리소스 자료를 해당 언어로

땅주인 님이 쓰신 글 :
: 감사합니다.
:
: 이것 하나만 더 답해주실 수 있는 지?
:
: 하나의 프로그램(바이너리)이 두 개의 언어 리소스를 다 가지고 있다는 건데..
:
: Translation Manager로 만들어서 어쩌구저쩌구 하니까..
: 한글 버젼, 영어 버젼 따로 바이너리가 만들어지던데..
: 하나의 바이너리가 두 언어의 리소스를 다 가지고 있는 건가요? 아닌 것 같던데.. -.-;;;;;
:
:
: 장성호 님이 쓰신 글 :
: : 제어판에 언어설정이 아니구요
: :
: : 윈도우 레지스터리 Software\\Borland\\Locales 에 설정을 그냥 바꿔주는것입니다.
: :
: : 아래 함수로  지역 설정을 변경할수 있습니다.
: : void SetLocalOverrides(char* FileName,char* LocaleOverride)
: : {
: :     HKEY Key;
: :     const char* LocaleOverrideKey="Software\\Borland\\Locales";
: :     if( RegOpenKeyEx(HKEY_CURRENT_USER,LocaleOverrideKey,0,KEY_ALL_ACCESS,&Key)== ERROR_SUCCESS )
: :     {
: :         if(lstrlen(LocaleOverride)==3)
: :             RegSetValueEx(Key,FileName,0,REG_SZ,(const BYTE*)LocaleOverride,4);
: :         RegCloseKey(Key);
: :     }
: : }
: : //---------------------------------------------------------------------------
: :
: : 사용예
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: :      SetLocalOverrides((Application->ExeName).c_str(),"KOR"); //한글로 설정
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TForm1::Button2Click(TObject *Sender)
: : {
: :       SetLocalOverrides((Application->ExeName).c_str(),"ENU");  //영어로 설정
: : }
: :
: : 그런데 위와같이 변경하면 프로그램을 재시작해야 적용됩니다.
: :
: : 프로그램을 재시작하지 않고 run-time에 하는 방법도 있는 걸로 알고 있는데...
: : LoadNewResourceModule , ReinitializeForms 로 google에서 검색해보세요
: :
: :
: : 저도 Resource Dll Wizard를 사용해본지 너무 오래 되어서 기억이 가물가물 합니다.
: : 프로그램을 재시작하지 않고 run-time에 바로 변경하는것은 해보지 않은 기능이구요
: :
: : 더 자세한것은 다른분들께..
: :
: : 그럼..
: :
: :
: :
: : 땅주인 님이 쓰신 글 :
: : : 답변 감사합니다.
: : : 그런데, 언어설정만 하면 된다고 하셨는데..제어판에서 언어 설정하는 걸 의미하나요?
: : : (어쨌거나 영어로 컴파일한 건 영어버젼, 한국어로 컴파일하면 한국어 버젼인 거죠? )
: : :
: : : 제가 해야 할 것은..
: : : 운영체재의 언어설정이나 이런 것에 상관없이....
: : : 가령 프로그램이 사용하는 레지스트리에다가 영어 또는 말레이어로 설정해 놓고,
: : : 동일한 프로그램으로 영어 또는 말레이어로 사용하는 것을 원하는 것입니다.
: : :
: : : 동일한 프로그램이 설정(레지스트리 또는 ini file)에 따라 영어 /한국어 등으로
: : : 표현되어야 한다는 것입니다.
: : :
: : : 그냥 레지스트리 밖에 없는건가?
: : :
: : : 장성호 님이 쓰신 글 :
: : : : 오래되서 잘 기억이 나지 않는데요..
: : : :
: : : : 메뉴의 File->New에 보면 Resource Dll Wizard라는 것이 있습니다.
: : : :
: : : :
: : : : 이걸로 만들면 언어 설정만 하면 Design - Time에 결정 Caption들은 다 자동으로 가능합니다.
: : : : 문론 Resurece Dll 만들때  영어 , 한국어 각 언어에 해당하는 string 리소스를 다 만들어 줘야하죠
: : : :
: : : : 안되는것도 있습니다.
: : : : 코딩에서 직접 string을 입력되어있는것은 안됩니다.
: : : :
: : : : 개인적으로  코딩에 있는 string은  ini 파일을 이용했습니다.
: : : :
: : : : 그럼..
: : : :
: : : :
: : : : 땅주인 님이 쓰신 글 :
: : : : : 다국어 지원 프로그램을 제작해야 하는데..
: : : : : 이리저리 뒤져서 Translation Manager를 찾아냈는데요..
: : : : :
: : : : : 한가지 의문,
: : : : :
: : : : : 해당 언어로 Compile하면 땡인거 아닌가요?
: : : : : Build한 프로그램 자체가 한글버젼, 영어버젼,일본어 버젼 이렇게 되는 것이지요?
: : : : :
: : : : : 제가 필요한 것은 하나의 빌드에서 한글/영어가 동시에 지원되어야 하는데요..
: : : : : 레지스트리나 기타 설정에서 이 프로그램을 한글로 쓰겠다고 하면 한글로 지원,
: : : : : 영문으로 쓰겠다면 영문으로 지원하는 기능입니다.
: : : : :
: : : : : 말레이지아가 대상 국가인데.. 영어와 말레이어를 공통으로 쓰는데..
: : : : : 웬만한 사람들은 영어와 말레이어를 같이 쓸 줄 알더군요. O/S도 영문을 쓰고요..
: : : : :
: : : : : 그래서, 하나의 빌드가지고 설정에 따라 말레이/영어로 전환하는 기능이
: : : : : 필요합니다.
: : : : :
: : : : : 어떻게 해야 하나요?
: : : : :
: : : : : 리소스 파일(텍스트 파일이건, MDB던..)에 영어/말레이어 등록시키고,
: : : : : 프로그램 실행 될 때 리소스 한꺼번에 다 읽어 들이고,
: : : : : 설정에 따라 폼의 모든 컨트롤들의 켑션을 영어/말레이로 바꾸고,
: : : : : 런타임 메세지도 설정에 따라 영어/말레이어로 표시하는 그런 식일 것으로 예상되는데..
: : : : : 이 방법이 맞는 지? 상당히 노가다라....
: : : : :
: : : : : 좀 효율적인 방법은 ?
: : : : :
: : : : : 도와주세요..

+ -

관련 글 리스트
50786 [질문] Translation Manager의 다국어 지원... 땅주인 1214 2007/10/09
50788     Re:[질문] Translation Manager의 다국어 지원... 장성호 1340 2007/10/09
50789         Re:Re:[질문] Translation Manager의 다국어 지원... 땅주인 1786 2007/10/09
50790             Re:Re:Re:[질문] Translation Manager의 다국어 지원... 장성호 1683 2007/10/09
50791                 Re:Re:Re:Re:[질문] Translation Manager의 다국어 지원... 땅주인 1360 2007/10/09
50795                     Re:Re:Re:Re:Re:[질문] Translation Manager의 다국어 지원... 장성호 1438 2007/10/10
50799                         Re:Re:Re:Re:Re:Re:감사합니다.(냉무) 땅주인 1241 2007/10/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.