2009-04-15 51 views
1

我是MFC的新手,我需要構建一個多語言應用程序,該應用程序應該能夠在運行時更改語言。從資源DLL加載控件的標題

AFAIK使用MFC進行國際化的常用方法是創建純資源DLL。但似乎沒有簡單的方法(即加載DLL,調用某個函數,MFC自動更新所有東西或類似的東西)在運行時切換資源DLL,對吧?因此我將不得不手動更新所有控件等。我已經設法從DLL的字符串表中加載字符串,但由於像按鈕這樣的控件的標題存儲在相應的對話框中(如果我相信我的資源黑客:)),我認爲必須有一種方法來加載它們並避免手動存儲字符串表中的附加字符串。

還是有另一種我不知道的方式?

如果這有什麼差別......我不得不使用MS嵌入式VISUAL C++ 4

回答

1

我在一個大的本地化的MFC項目。這裏是我們的策略:

  1. 一個關鍵字 - >本地化的字符串,特定於每種語言的字典。有幾種方法可以實現這一點,稍後再說。在對話框資源

  2. 控制ID或字幕在初始化呼叫::EnumChildWindows設置用於查找翻譯

  3. 創建基礎的CDialog,CFormView的,等鍵和英寸在回調中,查找翻譯並用翻譯替換控件的標題。

對於你的字典,你可以走幾條路。

  • 如果您想要依賴內置的本地化資源選擇和字符串表,您必須以某種方式將控件匹配到字符串ID。您可以小心確保控件ID與字符串ID匹配,或者您可以在標題中對ID進行ASCII編碼,然後使用atoi解析int值。

  • 您可以放棄內置的本地化字符串表處理併爲每種語言維護您自己的字符串 - >字符串字典。這使您可以將資源標題設置爲資源中的非本地化字符串,這使得佈局更容易(儘管您仍然需要以所有語言進行測試)。它需要您自己執行「依賴注入」以確保加載打開正確的字典。您希望能夠發佈更新的/附加的語言,而無需重建核心二進制文件。

1

如果你不想要求應用程序重新啓動(由最簡單的解決方案,您應該使用IMO的),你可以使用資源的DLL並重新創建主窗口時,用戶切換語言。這樣MFC將以新語言重新創建菜單等。無論如何,從您切換資源句柄的那一刻起,新對話框都將以新語言顯示。

我不知道這是如何涉及到嵌入式世界,我的經驗是從桌面MFC。