Я писал ужасно простой компонент, если найду в архивах - выложу. Логика такая:
1. Файлы .lng - INI-формат.
2. Файл следующего содержания:
Код:
[Information]
LangName=English
LangId=1
[Form1]
Label1=Hello
Label2=World
В программе выполнялся поиск языковых файлов (в папке с программой, в подпапке Languages или в папке, задаваемой вручную), а при загрузке языка передавался Id языка. Компонент пробегал по всем компонентам, и при совпадении имён, в зависимости от типа, присваивал Caption/Text. Умел и TStrings (разделителем является первый символ строки). Загрузка дополнительных "ресурсов" тоже возможна.