[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 {} { catch {destroy .m} . 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 ---- [i18n - Writing for the world] - [Arts and crafts of Tcl-Tk programming]