En el hilo indicado por jguardon se utiliza la característica de
gambas que facilita la internacionalización de un proyecto. Pero el usuario no podrá cambiar el idioma pulsando un botón.
Para poder hacerlo puedes prescindir de dicha característica y definir (en un módulo o una clase estática, según el paradigma de programación que uses en tu proyecto) una propiedad por cada cadena traducible.
Luego, escribir métodos que establezcan esas propiedades al idioma requerido (un método por cada idioma), ya sea que se trate de propiedades de controles o cadenas que usa tu programa (por ejemplo para crear un archivo html). Luego, sólo resta escribir las llamadas correspondientes.
También puedes crear un archivo para cada idioma o una tabla en una base de datos SQLite y establecer las variables tomando los valores de esos archivos o tablas (o puedes permitir que el usuario cree su propio archivo de traducción, siempre que respete una nomenclatura que tu dispongas para el nombre y la ubicación del archivo).
¿Se entiende la idea?