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