[배움]/C++

ini 파일을 활용한 다국어 프로그램 예제

도영수 2016. 11. 11. 10:28

//------------------------------------------------------------------------

// # 관련 변수

//------------------------------------------------------------------------

static TCHAR *m_szLangPack[] =

{

"<MAIN>" ,

"IDC_BTN_CONNECTION" ,

"IDC_BTN_PROCESS" ,

"IDC_BTN_PREVIEW" ,

"IDC_BTN_DATA" ,

"IDC_BTN_MAINT" ,

"IDC_BTN_PARAMETER" ,

"IDC_BTN_ENMERGENCY" ,

"IDC_BTN_CLOSE" ,

"<HISTORY>" ,

"IDC_RDO_MAIN" ,

"IDC_RDO_PROC" ,

"IDC_RDO_SYSTEM" ,

"IDC_RDO_ERROR" ,

"IDC_RDO_SCANNER" ,

"IDC_BTN_CELL_SAVE"

};


static int m_nLangDigNum[] =

{

0,

IDC_BTN_CONNECTION,

IDC_BTN_PROCESS,

IDC_BTN_PREVIEW,

IDC_BTN_DATA,

IDC_BTN_MAINT,

IDC_BTN_PARAMETER,

IDC_BTN_ENMERGENCY,

IDC_BTN_CLOSE,

0,

IDC_RDO_MAIN,

IDC_RDO_PROC,

IDC_RDO_SYSTEM,

IDC_RDO_ERROR,

IDC_RDO_SCANNER,

IDC_BTN_CELL_SAVE

};

// 다음과 같이 이름을 나타내는 문자 배열과 다이얼로그의 번호를 나타내는 정수 배열의 요소 순서가 동일해야 한다.


//------------------------------------------------------------------------

// # 함수

//------------------------------------------------------------------------


// 현재 배열의 갯수 확인

int CPadCutApp::LangInit()

{

return _countof(m_szLangPack);

}

// Ini  파일 읽어서 다이얼로그 이름 변경

void CPadCutApp::ReadLangFile(CString strLang)

{

CString key, str, section;

CString filename;

char inBuf[80];

CString strTemp;

TCHAR szReadData[255];


//------------------------------------------------------------------------

// # 언어 설정에 따른 Ini 파일 경로 선택

//------------------------------------------------------------------------

if(strLang == _T("KOR"))

{

filename = g_sAppPath + LANG_PACK_KOR;

}

else if(strLang == _T("ENG"))

{

filename = g_sAppPath + LANG_PACK_ENG;

}


//------------------------------------------------------------------------

// # ini 파일의 Section 선택

//------------------------------------------------------------------------

for(int i = 0; i < nItemCount; i++)

{

if(m_szLangPack[i] == "<MAIN>")

{

section.Format( _T("MAIN") );

continue;

}

else if(m_szLangPack[i] == "<HISTORY>")

{

section.Format( _T("HISTORY") );

continue;

}

else if(m_szLangPack[i] == "<PARA>")

{

section.Format( _T("PARA") );

continue;

}

//------------------------------------------------------------------------

// # Ini 파일의 내용 Read

//------------------------------------------------------------------------

GetPrivateProfileString (section, m_szLangPack[i], _T("-"), inBuf, 80, filename);

strTemp.Format(_T("%s"), inBuf);


//------------------------------------------------------------------------

// # 다이얼로그의 항목 변경

//------------------------------------------------------------------------

  Temp = theApp.m_pMainDlg->m_dlgParameter;

  Temp.SetDlgItemTextA(m_nLangDigNum[i],inBuf);


}

}


// 언어 변경 ini 파일의 양식을 출력하기 위해 사용 ( Write 기능 )

void CPadCutApp::WriteLangFile(CString strLang)

{


CString key, str, section;

CString filename;

//------------------------------------------------------------------------

// # 언어 설정에 따른 Ini 파일 경로 선택

//------------------------------------------------------------------------

if(strLang == _T("KOR"))

{

filename = g_sAppPath + LANG_PACK_KOR;

}

else if(strLang == _T("ENG"))

{

filename = g_sAppPath + LANG_PACK_ENG;

}


for(int i = 0; i < nItemCount; i++)

{

if(m_szLangPack[i] == "<MAIN>")

{

section.Format( _T("MAIN") );

continue;

}

else if(m_szLangPack[i] == "<HISTORY>")

{

section.Format( _T("HISTORY") );

continue;

}

else if(m_szLangPack[i] == "<PARA>")

{

section.Format( _T("PARA") );

continue;

}

//------------------------------------------------------------------------

// # ini 파일에 내용 Write

//------------------------------------------------------------------------

str.Format( _T("%s"), m_szLangPack[i] );

WritePrivateProfileString(section, str, _T(""), filename);

}

}



// 수정해야 될 점

  1. 다이얼로그의 내용을 갱신하는 부분에서 해당 다이얼로그에 접근 할 수 있도록 구현해야 한다.

     -> Section을 통해 if문으로 선택되는 다이얼로그 변수 변경

 

'[배움] > C++' 카테고리의 다른 글

ULONG_PTR  (0) 2017.11.09
C++ 문자열 조작[펌]  (0) 2016.11.21
C++ MFC 유니코드, 멀티바이트 변환 [ 펌 ]  (0) 2016.11.10
CString을 TCHAR로 변환하는 예제  (0) 2016.11.10
MFC 프로그램 아이콘 변경하기[펌]  (0) 2016.11.08