[Richard Suchenwirth] - Here is a little [menu] demo that allows localization for different languages, either at startup (by specifying one of the language codes ''de, en, fr'' as first argument, and on-the-fly while running, by using inlined [msgcat] commands, so the single file is self-contained. For 4 LOC more, you also get the window title localized ;-) ---- ====== package require msgcat namespace import msgcat::* mcset de Language Sprache mcset de English Englisch mcset de German Deutsch mcset de French Französisch mcset de Test Versuch mcset fr Language Langage mcset fr English Anglais mcset fr German Allemand mcset fr French Francais mcset fr Test Essai set choice [lindex $argv 0] if {[lsearch "en de fr" $choice]>=0} {mclocale $choice} proc makeMenu {} { . config -menu [menu .m] menu .m.m2 -tearoff 0 .m add cascade -label [mc Language] -menu .m.m2 foreach {language code} {English en French fr German de} { .m.m2 add command -label [mc $language] -command [list reset $code] } wm title . [mc Test] } proc reset code { mclocale $code .m entryconfig 1 -label [mc Language] foreach i {0 1 2} label {English French German} { .m.m2 entryconfig $i -label [mc $label] } wm title . [mc Test] } makeMenu ====== <> Local | i18n - Writing for the world | Arts and crafts of Tcl-Tk programming