Hola,
Si el caso es que (como presumo, aunque es probable que erróneamente) no se puede cambiar de ese modo el lenguaje "cuando a uno le parezca bien", sino que se basa en el lenguaje del sistema, tal vez no esté demás decir cómo hago para traducir en tiempo de ejecución el único programa que he llevado a cabo con vistas a tener la interfaz multilenguaje.
Al grano. He utilizado los componentes "TJvTranslator" y "TJvTranslatorStrings" que se incluyen en la
Jedi Library. Se acompañan de ejemplos en los que basarte y son bastante amables y eficaces. Se basan en los nombres de los componentes: puede traducirse tanto la propiedad "Caption" de los controles como la propiedad "Hint". Es posible traducir componentes como "listas y combos", quiere decirse, todos los elementos que contengan.
Se utiliza para ello un archivo en formato XML (un tanto singular, puesto que no es validable ni nada de eso, pero cumple su objetivo) que tienes que construir en función de los controles conque cuenta tu aplicación. El archivo XML, en fin, se divide en "nodos" que representan los "formularios" de la aplicación en cuestión y, dentro de cada "nodo/formulario" se asocian las cadenas de texto que al cabo consiguen traducir las propiedades de los controles que mencioné arriba.
Los recomiendo, digo los componentes, puesto que a mí me han ido y aun me van bastante bien: son, como digo, amables, en el sentido de que una vez los coges el hilo no cuesta demasiado añadir nuevas cadenas de texto para nuevos controles que fueran precisos en la aplicación. Una vez cuentes con los archivos XML precisos (uno por cada lenguaje a disponible, pero también podrías tener varios, por ejemplo, por cada formulario y lenguaje disponible) basta con un método para llevar a cabo la traducción de la aplicación.