1. 程式人生 > >VC開發多語言介面 多種方法(非常easy) 有原始碼

VC開發多語言介面 多種方法(非常easy) 有原始碼

原始碼地址(專業定製程式:MCU,Windows,Android 。VC串列埠,Android藍芽等不限。)

(需原始碼先留郵箱)先上圖




1.通過遍歷 得到全部控制元件ID號與TEXT,得到一箇中文語言配置檔案

void CVV_485Dlg::getCaptionForWindow()   //做程式時用,其他時間不用
{
	//列舉對話方塊中全部元件
	CWnd *pCtrl = GetWindow(GW_CHILD);
	while(pCtrl!=NULL)
	{
		UINT ctrlID = pCtrl->GetDlgCtrlID();
	//	setControlCaption(pCtrl,ctrlID);
		CString str_id,str_text;
		str_id.Format("%u",ctrlID);
		GetDlgItem(ctrlID)->GetWindowText(str_text);
		WritePrivateProfileString("Form", str_id, str_text,lfname);
		pCtrl = pCtrl->GetNextWindow();
	}
}

得到檔案 Chinese.ini

1003=轉換儲存併發送
1005=轉換並儲存
4294967295=傳送
1012=待機
1013=工作
1022=接收
1004=待機
1008=工作
1023=讀故障記錄
1024=讀執行時間
1025=讀客戶資料
1027=讀出廠資料
1028=讀實時資料
1026=儲存為TXT
1029=清空接收
1030=English
1042=接收解析
1031=設定
1032=功能引數
1033=佔空比
1034=設定電流
1035=設定電壓
1036=設定功率
1037=脈衝頻率
1038=脈衝電流
1039=預電離
1043=串  口
1044=波特率
1040=串列埠設定
1041=經常使用快捷鍵


2.手動增加其他語言檔案 ,能夠直接Google翻譯



3.控制元件使用窗體遍歷從語言配置檔案裡讀ID號相應的TEXT 並替換

void CVV_485Dlg::setCaptionForWindow()  //遍歷設定指定窗體全部元件Caption屬性程式碼:
{
	//列舉對話方塊中全部元件
	CWnd *pCtrl = GetWindow(GW_CHILD);
	while(pCtrl!=NULL)
	{
		UINT ctrlID = pCtrl->GetDlgCtrlID();
	//	setControlCaption(pCtrl,ctrlID);
		CString str_id,str_text;
		str_id.Format("%u",ctrlID);
		GetPrivateProfileString("Form",str_id, "", str_text.GetBuffer(MAX_PATH), MAX_PATH ,lfname);
		if(""!=str_text)
			GetDlgItem(ctrlID)->SetWindowText(str_text);

		pCtrl = pCtrl->GetNextWindow();
	}
}

4.語言切換

void CVV_485Dlg::languagezh()  //與檔名稱轉換  \\不好存
{
	if(language=="Chinese")
		lfname=".\\Chinese.ini";
	else
		lfname=".\\English.ini";
}

5.以上為控制元件切換語言時有效。非控制元件時,使用以下方法

A.在配置檔案裡增加key相及相應的翻譯 Chinese.ini

設定電壓:=設定電壓:

設定電流:=設定電流:
設定功率:=設定功率:
下位機未響應=下位機未響應
已經讀完=已經讀完
接收解析為空!=接收解析為空!
執行時間:%02u%02u%02u:%02u=執行時間:%02u%02u%02u:%02u
-%d 串列埠已開啟=-%d 串列埠已開啟
串列埠已關閉=串列埠已關閉
title=工業電源控制系統

B.在英文配置檔案裡。English.ini增加

設定電壓:=set vol:
設定電流:=set cur:
設定功率:=set pow:
下位機未響應=lower machine does not respond
已經讀完=Finished reading 
接收解析為空!=Receive resolve is empty !
執行時間:%02u%02u%02u:%02u=Run time:%02u%02u%02u:%02u
-%d 串列埠已開啟=-%d open
串列埠已關閉=Serial port closed
title=Industrial Power Control Systems

C.轉換函式 

CString CVV_485Dlg::translateCString(CString str)
{
		
		GetPrivateProfileString("Form",str, "", str.GetBuffer(MAX_PATH), MAX_PATH ,lfname);
		return str;	
}

D.演示樣例

MessageBox(translateCString("接收解析為空!"));


str_temp.Format(translateCString("執行時間:%02u%02u%02u:%02u"),js[3+3],js[3+2],js[3+1],js[3+0]);



6.假設以上方法不行。直接用if else推斷


我的淘寶店(專業定製程式):http://item.taobao.com/item.htm?

spm=a1z10.1.w4801-6324333243.10.CUj1sr&scm=1007.327.0.0&id=37627387931&pvid=759e0470-a75b-4411-bb53-08cb28cbc88f