У меня диалоговое приложение, написанное на VC ++ с использованием Visual Studio 6. Это простое приложение с очень небольшим количеством текстов, но теперь оно должно поддерживать несколько языков. Поскольку текстов не много, планируется добавить все разные языки в одну строковую таблицу с уникальным идентификатором. Теперь пример таблицы строк выглядит так:
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".
Теперь в другой части кода этот уникальный идентификатор языка объединяется с другой строкой, чтобы найти текст для конкретного языка.
CString okButton = "IDS_STRING_OK_BUTTON" + m_strLanguageIndex; //Here m_strLanguageIndex for example will be "_ENG"
Таким образом, я могу иметь только одну строковую таблицу со всеми разными языками, а затем использовать описанный выше метод для создания уникального идентификатора ресурса.
Но теперь проблема в том, что идентификаторы ресурсов в файле resource.h являются целыми числами. Поэтому приведенная выше строка CString бесполезна для поиска соответствующего текста.
Так что я не уверен, будет ли это работать. Я просто выкидываю это, чтобы увидеть, есть ли у кого-нибудь лучшие идеи или есть предложения, чтобы заставить работать вышеуказанный метод.
Я не хочу создавать несколько библиотек DLL для каждого языка, поскольку это простое диалоговое приложение.