8

我是一個.NET人,他不得不在MFC應用程序上做一些工作。該應用程序是我已轉換爲VS2010的VS2008 MFC可執行文件。原始開發人員通過在應用程序命令行中指定具有鍵值對的.txt文件的名稱進行了本地化。安裝到可執行文件的快捷方式指定一個不同的.txt文件,具體取決於應用程序安裝在哪個國家。如果您直接運行.exe,這當然不起作用。這對我來說似乎是一種奇怪的方式。VC++ 10 MFC:什麼是正確的本地化方法

我想這樣做pro​​pper MFC的方式,但我很難在谷歌上找到明確的答案。我的理解是,.rc文件中的字符串表應該用於本地化?這是目前MFC的最佳做法嗎?

對於字符串表,我已經讀過,實踐是爲不同的語言創建多個字符串表。 MFC應用程序如何選擇使用哪種語言?它是基於機器當前的語言設置還是我可以控制它(可能是我們希望語言由我們也在構建的Wix .msi安裝程序指定)?

我也讀過將MFC應用程序中的所有資源嵌入已經失寵,現在你應該編譯單獨的資源.dlls?這是真的不好調查如何做到這一點...

最後,我必須做一些特別的事情來獲得MFC支持Unicode或默認情況下是MFC的Unicode?

感謝

+1

MFC和Unicode是獨立的,你可以使用一個沒有其他。如果您使用嚮導來構建項目,Unicode將是其中一個選項(它應該是默認值)。否則,您可以在項目設置中找到它。 – 2012-01-05 15:44:01

+0

另一個CP文章:http://www.codeproject.com/Articles/11040/Multiple-language-support-for-MFC-applications-wit – 2013-04-26 07:59:53

回答

10

這個想法是所有可本地化的項目都應該存儲在資源中。標準UI對象(如菜單和對話框)會自動存儲在那裏(資源),但應該從源代碼中將字符串文本(例如:錯誤消息,消息框提示符等)提取到字符串表中。我的這個簡短的codeproject article演示瞭如何從代碼中的字符串表中輕鬆地拖出字符串。

注意:您的資源腳本(.rc)中應只有一個字符串表。

從那裏開始,您可以翻譯您的資源並創建資源DLL(又名衛星DLL)。這個想法是,你爲每種語言保留一個不同的.rc文件副本。每個翻譯被編譯成一個無代碼 DLL,充當資源的容器。

This other codeproject article讓你輕鬆根據系統設置或用戶喜好加載資源DLL:代碼看起來你的資源DLL其中可用的語言最匹配的用戶設置(基於用戶的UI語言和區域設置)。該代碼還可讓您輕鬆構建包含所有可用語言的菜單。這樣,您的用戶可以覆蓋默認選項。

免責聲明:我的廣告如下。隨意跳過:-)

關於資源翻譯,翻譯管理和資源DLL的創建,您可能想要查看appTranslator。 :-)

關於Unicode中,MFC附帶代碼的ANSI和Unicode版本廣告

END。如果您想構建ANSI或Unicode應用程序,您可以選擇:只需在項目設置的第一頁中選擇即可。當然,如果你是從頭開始,你一定要去Unicode。但是,如果遺留原因迫使您保持ANSI/MBCS,請不要太擔心:它不會阻止您本地化您的應用程序。

6

年前,當我曾與MFC多種語言的工作中,我們使用單獨的資源DLL。你所需要做的就是進行一次調用,以切換資源功能將使用哪個句柄,並且從這一點開始,所有句柄都是自動的。

你需要做的不僅僅是改變字符串。特別是對話框中會有字符串,如果這些字符串在翻譯後變得太長,您可能需要更改佈局。

+0

因此,MFC不提供從對話框中分離字符串的方法? – OneWorld 2017-02-17 10:18:36

+0

@OneWorld它不僅僅是MFC,創建對話框的Windows API依賴於嵌入字符串的對話框資源。 – 2017-02-17 13:46:37

相關問題