VC開發多語言界面 多種方法(很是easy) 有源代碼

源代碼地址(專業定製程序:MCU,Windows,Android 。VC串口,Android藍牙等不限。)
css

(需源代碼先留郵箱)先上圖html




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翻譯post



3.控件使用窗體遍歷從語言配置文件裏讀ID號相應的TEXT 並替換spa

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翻譯

設定電壓:=設定電壓:code

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

B.在英文配置文件裏。English.ini增長htm

設定電壓:=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

相關文章
相關標籤/搜索