каждый компонент имеет уникальное свойство Name - латинскими буквами, это поле совпадает с идентификатором соответствующего объекта в программе. так вот, я написал в методе OnCreate формы функцию, которая просматривает все дочерние компонеты (контролы) формы и записывает в ini-файл в группу [Form.Name] строки вида Controls[i].Name = Controls[i].Caption то есть получается что-то типа Label13=Введите число: это делаю для каждой формы. тогда после запуска программы создается ini-файл, в котором выписаны все элементы управления и их соответствующий текст.
кроме этого я делаю функцию обратную вышеупомянутой: которая читает нужный раздел ini-файла, ищет по именам контролов их на форме и заменяет их Caption-ы.
итак, мультиязычность делается так: 1. пишем прогу по упомянутым правилам 2. запускаем ее, она создает файл типа default_lang.ini 3. после запуска полученный Ini-файл дублицируем нужное кол-во раз и правим каждую строку, переводя текст на нужный язык. файлы переименовываем в english_lang.ini и т.д. 4. добавляем в прогу функцию установки языка, которая открывает указанный ей ini-файл и делает свои черные дела. 5. если кроме интерфейса надо что-то еще транслировать на другой язык - это делается аналогично в том же ини-файле...