VC2008以資源形式實現多語言版本

2021-05-25 01:20:53 字數 2970 閱讀 3539

越來越多的程式支援多語言切換,或者能自動適應當前系統語言,讓自己開發的程式支援多語言不僅可以讓自己的程式被國人使用,也能讓外國程式愛好者使用。vc開發多語言程式有多種方法,或讀取配置檔案,或使用不同資源dll等等。這裡介紹以資源形式實現多語言版本。

1.開啟visual studio 2008,新建乙個基於對話方塊工程,名稱為languagetest,不使用unicode庫 ,資源語言一共有十種(當前作業系統為windows 7簡體中文版),如下圖所示:

在此選擇「中文(簡體,中國)」,單擊「完成」按鈕。

2.在對話方塊設計介面上,放置乙個按鈕(id號idc_show_button)、乙個靜態文字(id號idc_text_static,必須改其預設id號)和乙個編輯框(id號idc_text_edit),資源檢視如下所示:

可以看到資源檢視裡面都是簡體中文的資源檔案,現在在「string table」字串表型別下,雙擊開啟其子項「string table」,預設只有一條字串,是視窗選單裡的「關於 languagetest(&a)...」,如圖所示:

現在點一下第二行(以黑色外框標誌),新建一條字串(值會預設增長,注意不要與已有的衝突),「標題」是「id」號所代表的字串內容,我們增加字串如下圖所示:

3.在「解決方案管理器」下雙擊開啟「languagetestdlg.cpp」檔案,在其初始化函式oninitdialog()增加如下紅色**:

bool clanguagetestdlg::oninitdialog()   

} // 設定此對話方塊的圖示。當應用程式主視窗不是對話方塊時,框架將自動 

//  執行此操作 

seticon(m_hicon, true);            // 設定大圖示 

seticon(m_hicon, false);        // 設定小圖示 

// todo: 在此新增額外的初始化** 

cstring strtemp; 

strtemp.loadstring(ids_showbutton);    //loadstring讀取乙個id號定義的字串資源 

setdlgitemtext(idc_show_button,strtemp); 

strtemp.loadstring(ids_textstatic); 

setdlgitemtext(idc_text_static,strtemp); 

strtemp.loadstring(ids_textedit); 

setdlgitemtext(idc_text_edit,strtemp); 

return true;  // 除非將焦點設定到控制項,否則返回 true  } 

編譯執行,結果如下圖所示:

4.製作英文版的「string table」。右擊「資源檢視」下的「string table」子項,選擇「插入副本」,在彈出的對話方塊選擇「英語(美國)」,如下圖所示:

「確定」按下之後,就會多出乙個字串資源來,並且在後面名稱多了標記「[英語(美國)]」,雙擊開啟其內容與簡體中文本串資源一樣,如下圖所示:

將所有字串修改「標題」內容為英文,如下圖所示:

再編譯生成,此時應用程式就能適應簡體中文作業系統和英文美國作業系統了,會自動顯示為預設作業系統語言。可是由於此時沒有英文版系統可以驗證,無法確定是否完全正確,待以後驗證。

5.接下去,欲使用setthreadlocale自由切換程式介面語言,在應用程式類初始化函式initinstance()新增如下**:

setthreadlocale(makelcid(makelangid(lang_english,sublang_english_us),sort_default)); 

執行程式,出現問號亂碼情況,當前windows 7系統的顯示語言只有「中文(簡體)」,而「當前系統區域設定」為「中文(簡體,中國)」,如下圖所示:

自由切換語言失敗,參考msdn幫助文件,對的介紹說明:

另有一篇文章討論setthreadlocale no longer changes gui language in vista

替換成如下**:

setthreaduilanguage(makelangid(lang_english,sublang_english_us)); 

執行發現可以顯示「英文」資源字串,如下圖所示:

可以使用getuserdefaultuilanguage()判斷當前使用者介面語言,如下當使用者介面語言為「簡體中文」時,設定為「英文(美國)」:

if  (getuserdefaultuilanguage() == makelangid(lang_chinese,sublang_chinese_simplified))   

在windows xp簡體中文版下,非unicode程式的語言為「中文(中國)」,**頁轉換表有包含「us-ascii」,在windows 7下未找到「**頁轉換表」,使用setthreadlocale和setthreaduilanguage(注:靜態鏈結然後到xp下測試的 )都能將使用者介面語言設定成「英文(美國)」,如下圖所示:

改變「控制面板」裡面的「區域選項」語言為「英語(美國)」,則顯示成問號,原因在於setthreadlocale設定的語言與「區域選項」裡面的語言一樣,若是一樣,則不操作,如下圖所示:

在此中英文版本資源下,在中英文系統語言環境下,就會自動切換不同語言資源,然後在另外系統語言環境下(如:日語),就設定程式語言為英文(英文在大多數系統下都支援),**如下:(未能完全測試)

if ((getsystemdefaultlangid() != makelangid(lang_chinese, sublang_chinese_simplified)) &&

(getsystemdefaultlangid() != makelangid(lang_english, sublang_english_us)))

else

setthreadlocale(makelcid(makelangid(lang_english, sublang_english_us), sort_default));}}

VC 2008 常用操作

1 恢復預設布局 有時vs2008會出現介面worksapce在右邊,toolbox在左邊的情況,這樣看起來很不舒服,也不習慣,通過以下方法即可改變 tools import and export settings wizard,選擇reset all settings 下一步,儲存設定,下一步,選...

Vc 2008托盤氣泡程式

新建乙個mfc 對話方塊程式 新增成員變數 notifyicondata m 新增方法 bool setuptrayicon hwnd hwnd 上面的 新建乙個圖示在系統托盤處。當推出系統時刪除托盤圖示 bool removetrayicon 新增顯示氣泡方法 bool showtooltip l...

vc2008程式發布指南

vc2008程式發布指南 2008 05 03 17 46 vc2008開發的程式的發布方式可以有5種方式 1 不必重新發布vc2008基礎庫vcredist x86.exe 安裝到winsxs 2 不必產生,嵌入manifest.3 也不把vc2008基礎庫放在程式所在目錄.2.exe 嵌入man...