Последнее время был занят занимался созданием механизмов для перевода наших приложений. Требования были такими:
- перевод должен работать по словарю
- словарь должен храниться в БД
- должны переводиться все Caption-ы у контролов, resourcestring'и и текст из БД
Основной класс, переводящий в runtime созданные формы, и подменяющий resourcestring'и был сделан за пару дней. Большая же часть времени ушла на составление словаря используемых фраз. Пару дней я потратил пытаясь разобраться как получить список всех resourcestring'ов в программе. Этот вопрос неоднократно поднимался на разных форумах, но полное решение нигде не приводилось. В общем решение нашлось, и в довольно неожиданном для меня месте. В Program Files\Borland\Delphi6\Demos\ResXplor. =)
Я собрал все необходимые классы в одном модуле. Модуль экспортирует одну функцию scCollectResourceStrings: procedure scCollectResourceStrings( aExeFilename: string; aPerformForEveryFoundString: TscOnGetResString); у этой функции два параметра: TscOnGetResString = procedure (aText, aData: string) of object; У callback функции[1] два параметра: aText и aData формируются в процедуре TStringResource.ForEveryString. Так что их формат данных можно легко изменить, подправив пару строк кода. Скачать модуль можно здесь: http://sites.google.com/site/lazyproject/downloads [1] О Callback-функциях можно почитать в соответствующей главе статьи Основы работы с Windows API.
1) aExeFilename: string - путь до файла с ресурсами
2) aPerformForEveryFoundString: TscOnGetResString - callback фунция, вызываемая для каждого найденного ресурса строкового типа.
aText - resourcestring
aData - представляет из себя строку формата: "ID ресурса = текст ресурса". Ссылки по теме
Версия для мобильного

5 человек заметили этот пост: