L'idée que j'avais était assez proche de la méthode « gettext », à savoir un système qui utilise les chaînes natives (en principe en anglais) comme « clés » et qui cherche à leur substituer la chaîne de remplacement qui leur est associée dans la langue voulue.
Mais je n'avais pas envisagé « gettext » (on peut cependant y songer), en fait je pensais utiliser la méthode utilisée dans les logiciels de Grig Software, qui permettent d'avoir comme fichier de langue un simple fichier de texte avec pour chaque terme à traduire la succession répétitive d'une ligne dans la langue source, une ligne dans la langue cible et une ligne vide.
De cette manière, si une chaîne source n'est pas trouvée dans le fichier de langue, alors la substitution ne se fait pas et on laisse le texte dans la langue source, ce qui éviterait l'inconvénient d'y voir apparaître une clé en clair dans ce cas-là.
Ce qui aurait accessoirement l'avantage de permettre d'utiliser l'utilitaire WinTrans que Grig Software propose pour traduire ses propres programmes.

Pour les boîtes de dialogue, je pensais créer une fonction appelée à l'initialisation du dialogue, qui s'occuperait d'énumérer un par un tous les items du dialogue en en récupérant les textes, de soumettre les textes à la traduction, et de remettre la version traduite à la place.
J'ai aussi envisagé quelques raffinements, comme par exemple des traductions partielles de chaînes (par exemple les seules parties entourées par des délimiteurs définis, délimiteurs simplement supprimés si la traduction est manquante), ou même carrément par endroits (pas partout pour des questions de performances) l'usage d'expressions régulières, l'une ou l'autre de ces méthodes permettant de traduire sans trop de problèmes certaines chaînes composées dynamiquement.
Gingko