【发布时间】:2018-10-18 23:59:36
【问题描述】:
我有一个使用 Visual Studio 6 用 VC++ 编写的基于对话框的应用程序。它是一个简单的应用程序,文本很少,但现在需要支持多种语言。由于文本不多,因此计划是将所有不同的语言添加到一个具有唯一标识符的字符串表中。所以现在一个示例字符串表看起来像这样,
STRINGTABLE
BEGIN
IDS_STRING_OK_BUTTON_ENG "OK" //English text
IDS_STRING_EXIT_BUTTON_ENG "Exit" //English text
IDS_STRING_OK_BUTTON_FRA "D'accord" //French text
IDS_STRING_EXIT_BUTTON_FRA "Sortie" //French text
END
现在我有一个函数可以根据操作系统语言设置返回一个字符串。
CString strLang = "";
//Retrieves the system default locale identifier
LCID lcid = GetSystemDefaultLCID();
//Determine the language identifier from the locale identifier
LANGID langid = LANGIDFROMLCID(lcid);
//Does many processing here........
//.................................
//.................................
// So if English is the OS language then this function will return "_ENG".
现在在代码的另一部分,这个唯一的语言 ID 与另一个字符串连接起来以查找特定于语言的文本。
CString okButton = "IDS_STRING_OK_BUTTON" + m_strLanguageIndex; //Here m_strLanguageIndex for example will be "_ENG"
这样一来,我可以只拥有一个包含所有不同语言的字符串表,然后使用上述方法创建一个唯一的资源 ID。
但现在的挑战是,resource.h 文件中的资源 ID 是整数。所以上面的CString对于找到对应的文本是没有用的。
所以我不确定这是否可行。我只是把它扔出去看看是否有人有更好的想法或有任何建议来使上述方法起作用。
我不想为每种语言创建多个 DLL,因为这是一个简单的基于对话框的应用程序。
【问题讨论】:
-
为什么不直接使用已有的语言支持资源呢?那么字符串的id是一样的,你只是有多个表。
-
@Anders - 你能详细说明一下吗?如果按照我的理解,一个项目只能有一个字符串表。
标签: winapi visual-c++ mfc