[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. package require msgcat namespace import msgcat::* mcset de Language Sprache mcset de English Englisch mcset de German Deutsch mcset de French Franz�sisch mcset fr Language Langage mcset fr English Anglais mcset fr German Allemand mcset fr French Francais 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 .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] } } proc reset code { mclocale $code .m entryconfig 1 -label [mc Language] foreach i {1 2 3} label {English French German} { .m.m2 entryconfig $i -label [mc $label] } } makeMenu ---- [i18n: Writing for the world] - [Arts and crafts of Tcl-Tk programming]