這是一個普遍的問題,對於意見開放。我一直在想出一種設計Windows MFC應用程序和相關實用程序的字符串資源本地化的好方法。我的心願是:設計字符串本地化的最佳方法
- 必須在代碼中保存字符串(而不是與宏的#define資源ID的替換),以使這些信息仍然可讀的內聯
- 必須允許本地化的字符串資源(杜)
- 不得強加額外的運行時環境的限制(例如:依賴於.NET等)
- 應該有最小的obtrusion到現有的代碼(改動較小越好)
- 應該是調試的
- 應該生成可由常用工具編輯的資源文件(例如:通用格式)
- 不應該使用複製/粘貼註釋塊來保留代碼中的文字字符串或其他任何可能導致不同步的文件
- 會很高興允許靜態(編譯時)檢查每個「註釋」字符串是否在資源文件中
- 允許跨語言資源字符串池(適用於各種語言的組件,例如:native C++和.NET)
我有一種方式,除了靜態檢查,在一定程度上滿足我所有的願望,但我有h廣告來開發一些自定義代碼來實現它(並且它有侷限性)。我想知道是否有人以特別好的方式解決了這個問題。
編輯: 的解決方案,我目前有看起來像這樣:
ShowMessage(RESTRING(_T("Some string")));
ShowMessage(RESTRING(_T("Some string with variable %1"), sNonTranslatedStringVariable));
然後我有一個自定義工具從「RESTRING」塊中解析出字符串,把它們放到一個.resx文件本地化以及一個單獨的C#COM對象,以便從具有後備功能的本地化資源文件加載它們。如果C#對象不可用(或無法加載),我將回退到代碼中的字符串。宏展開爲一個模板類,它調用COM對象並進行格式化等。
無論如何,我認爲添加我現在可以參考的內容會很有用。
你有沒有想辦法做到這一點,而不用代碼中的資源ID替換字符串?你所描述的聽起來像口語方法,這當然可以工作,但並不真正在尋找什麼。 – Nick 2008-10-08 23:19:19
不,我們不會將字符串硬編碼到我們的應用程序中。我們所看到的是一個與資源ID相關的描述性常量。 – BoltBait 2008-10-08 23:26:16