Version 2 of Multilingual menu

Updated 2002-02-05 09:08:44

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