傳統做法為每種語言維護獨立專案,導致程式碼同步維護負擔沉重。本文揭示 Visual C++ 6.0 單一專案管理多語言資源的完整技巧:雙資源檔 (.rc) 共存、建置組態隔離、DSP 檔案條件編譯修改,實現零程式碼重複的多語言建置流程。
Example,AppWizard 步驟 1 選擇「Chinese (Traditional)」,完成專案Example.rc(僅移除專案參考,檔案保留)Example.rc → Example_Ch.rcExample_Ch.rcExample_En(不同目錄),AppWizard 選擇「English」Example_En\Example.rc 至中文專案目錄,重命名為 Example_En.rcExample_En.rc(忽略警告)Debug Chinese,Copy settings from DebugDebug English,Copy settings from DebugDebug 組態Release Chinese、Release English
Debug Chinese 組態Debug ChineseChineseDebug Chinese\Example_Ch.resDebug English 組態:
Debug EnglishEnglishDebug English\Example_En.res
記事本開啟 Example.dsp,尋找資源檔區段:
# 原始內容
SOURCE=.\Example_ch.rc
# End Source File
# Begin Source File
SOURCE=.\Example_en.rc
# PROP Exclude_From_Build 1
# End Source File
修改為條件排除邏輯:
SOURCE=.\Example_ch.rc
!IF "$(CFG)" == "Example - Win32 Debug English"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "Example - Win32 Debug Chinese"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\Example_en.rc
!IF "$(CFG)" == "Example - Win32 Debug English"
!ELSEIF "$(CFG)" == "Example - Win32 Debug Chinese"
# PROP Exclude_From_Build 1
!ENDIF
# End Source File
Win32 Debug EnglishEnglish\Example.exe (英文介面)Win32 Debug Chinese → Rebuild → 產出 Chinese\Example.exe (中文介面)Resource.h 中定義新資源 ID (如 IDC_NEW_BUTTON 1001)Example_Ch.rc 加入中文字串/對話框/選單定義Example_En.rc 加入對應英文資源
// Example_Ch.rc 片段
STRINGTABLE
BEGIN
IDC_NEW_BUTTON "新增記錄"
IDC_SAVE_BUTTON "儲存變更"
END
// Example_En.rc 片段
STRINGTABLE
BEGIN
IDC_NEW_BUTTON "New Record"
IDC_SAVE_BUTTON "Save Changes"
END
Example_Jp.rc、Example_De.rc 等Debug Japanese、Debug German
!IF "$(CFG)" == "Example - Win32 Debug English"
!ELSEIF "$(CFG)" == "Example - Win32 Debug Chinese"
!ELSEIF "$(CFG)" == "Example - Win32 Debug Japanese"
!ELSEIF "$(CFG)" == "Example - Win32 Debug German"
!ENDIF
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 本文 DSP 條件編譯 | VC6 原生支援、零外部工具、專案結構清晰 | 手動維護 DSP、資源編輯器不可用、擴充語言需改 DSP | VC6 維護專案、語言數固定(2-3種) |
| 衛星 DLL (Satellite DLL) | 標準化、支援 MUI、執行期動態切換、Visual Studio 完整支援 | 需重構資源架構、VC6 支援有限 | 新專案、需執行期切換語言、支援 10+ 語言 |
| 資源字串表 + 程式碼邏輯 | 單一 .rc、程式碼控制語言邏輯 | 字串 ID 管理複雜、非標準做法 | 簡單專案、極少量字串 |
VC6 時代的單專案多語言方案,核心在於「資源檔物理分離」+「建置組態邏輯隔離」+「DSP 條件編譯排除」。雖然維護成本高於現代衛星 DLL 架構,但在無法升級工具鏈的舊專案維護場景下,仍是極具性價比的解決方案。關鍵紀律:資源 ID 統一管理、手工編輯 .rc 檔、嚴格對應建置組態。