Multilingual menu

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 Tk
package require msgcat
namespace import msgcat::*

mcset de Language Sprache
mcset de English  Englisch
mcset de German   Deutsch
mcset de French   Franz\u00f6sisch
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

[name redacted]: I changed the 'ö' to a Unicode code.

AMG: What made this edit necessary? Are you having problems with [source] using the wrong encoding?

[name redacted]: If I had sourced the code I would have made sure to use the -encoding option because, as a Swedish-language programmer, I'm used to using it and have a lot of experience with accented letters. Most (I guess?) users on this wiki, however, use the basic latin/ASCII alphabet and possibly wouldn't know what to do with such a letter (which sounds like I'm calling those users ignorant, but I'm certainly not: it's more a question of domain knowledge in a minority domain). And even if they did, the most likely way for them to use the code would probably be to copy it into a script file and, e.g., double-click on the icon to launch it in wish (which, of course, also has an -encoding option, but it's a lot more awkward to use it: on Windows you basically need to create a batchfile file to start wish with the correct invocation). So, it's not so much a necessary edit as a courtesy edit to make it easier for everyone to use the code. For us accented-letters-users, it's all the same -- there is no significant difference between an 'ö' and a \u00f6 when we run the code. For another programmer it might mean the difference between text and garbage. Förstår du? :)

HE 2022-04-25: I added "package require Tk" to assure that the code can be executed on Linux in tclsh.