Доброго всем времени суток! Перерыл много форумов и гуглов, так ничего и не нашел: как сделать приложение (на MASM), поддерживающее несколько языков (человеческих, а не машинных)? В принципе, все языковые файлы - это просто INI, сохраненные в unicode. Что-то типа: Код (Text): [10001] 10002=Новый файл Пытаюсь прочитать хоть один ключ и что-то вывести, скажем, в меню - не выходит каменный цветок!.. И GetPrivateProfileStringW пробую, и WideCharToMultiByte, и еще много всякого... И, главное, нигде ни одного намека, не за что ухватиться. Спасибою
XP. А пример - вот он весь, наверху. Ну, можно для чистоты эксперимента поменять на что-то более "норвежское" Код (Text): [10001] 10037=Lås / Lås opp Fil Как это прочитать и как это вывести? Надеюсь, ни у кого норвежский не выставлен в качестве non-unicode language
INI-файлы сохраняются и читаются только в ASCII-кодировке, независимо от того, используешь ли ты GetPrivateProfileStringA или GetPrivateProfileStringW. Варианты такие: * Сделать свой собственный движок для парсинга Ini-файлов в Unicode (UTF-16 или UTF-8). Так сделано, например, в архиваторе 7-zip. * Сохранять файлы в UTF-8 без сигнатуры. Тогда строки "[10001]", "10037=" и символы конца строки будут как бы в восьмибитной ASCII, а норвежско-русские буквы будут закодированы несколькими байтами. Читать такой файл можно GetPrivateProfileStringA, затем декодировать из UTF-8 в UTF-16 (процедуру декодирования несложно написать самому). Конечно, это "некошерный" трюк, но он работает во всех существующих версиях Windows. Если непонятно объяснил, спрашивай еще - могу показать примеры ini-файлов в Unicode.
Не работает в Win95, поэтому я использую свою процедуру . На самом деле, там ничего сложного нет (см. Unicode FAQ).
aglamer Ресурсы stringtable хранятся именно в юникоде. Эти ресурсы можно поместить в DLL, даже по одной DLL на каждый язык, чтоб сэкономить память.
StringTable достаточно удобно получается. Создаешь несколько меню (по количеству языков). В момент переключения языков убиваешь старое меню окна, грузишь из ресурса меню на соответствующем языке и присваиваешь его окну. Так же можно и с выводимыми сообщениями, надписями на кнопках и т.д. - грузишь строку из нужной группы строк.
Иногда полезно бывает не заглядывать несколько дней - вон сколько сразу! Спасибо всем, теперь я пошел это осмысливать и воплощать