Lectus: This is a page to post ideas for internationalizing Tcl/Tk applications.
Here is one example:
main.tcl
#!/usr/bin/tclsh
# import Tk package
package require Tk 8.5
# make it beautiful on Linux
if {$tcl_platform(os) == "Linux"} {ttk::setTheme clam}
## Begin supported languages
#set ::lang EN
set ::lang ES
#set ::lang DE
## End supported languages
# Load language packs with a simple source command
# English is default
source es.lang
source de.lang
# Procedure to read from language array
proc _t {text} {
switch -- $::lang {
EN { return $text }
ES { return $::words_es($text) }
DE { return $::words_de($text) }
}
}
# End
## Begin GUI code
ttk::frame .f
pack .f -fill both -expand 1
set f [ttk::frame .f.fwidgets]
ttk::label $f.lName -text "[_t Name]: "
ttk::entry $f.eName
ttk::label $f.lPhone -text "[_t Phone]: "
ttk::entry $f.ePhone
pack $f -fill both -expand 1
grid $f.lName $f.eName -padx 5 -pady 2
grid $f.lPhone $f.ePhone -padx 5 -pady 2
set f2 [ttk::frame .f.fbuttons]
ttk::button $f2.ok -text [_t OK]
ttk::button $f2.cancel -text [_t "Exit application"] -command exit
pack $f2 -fill x -expand 1
grid $f2.ok $f2.cancel -padx 5 -pady 5Following translations were created using Google translate. They may be wrong.
Language packs are simple files with Tcl arrays:
es.lang
## Begin Spanish dictionary
array set ::words_es {
"Name" "Nombre"
"Phone" "Teléfono"
"Exit application" "Salir de la aplicación"
"OK" "OK"
}
## Endde.lang
## Begin German dictionary
array set ::words_de {
"Name" "Name"
"Phone" "Telefon"
"Exit application" "Anwendung beenden"
"OK" "OK"
}
## EndWhen I created this I was not aware there's a standard way to do this: msgcat