home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / libplugin / mesg.tcl < prev    next >
Text File  |  2000-11-02  |  2KB  |  98 lines

  1. # mesg.tcl
  2. # Implements primitive but effective message catalog
  3.  
  4.  
  5. namespace eval ::mesg:: {
  6.     variable messages
  7.     array set messages {}
  8.     variable preferredLang en
  9.     variable availableLanguages 
  10.     array set availableLanguages {English en Spanish es German de Hungarian hu Serbian sr}
  11. }
  12.  
  13. proc ::mesg::processMesgCatalogDir { dir } {
  14.       variable preferredLang
  15.       ::mesg::processFile [file join $dir messages.en]
  16.       set secondLang [file join $dir messages.$preferredLang]
  17.       if [file exists $secondLang] {
  18.       ::mesg::processFile $secondLang
  19.       }
  20. }
  21.  
  22. proc ::mesg::processFile { file } {
  23.     set f [open $file]
  24.     foreach {key text} [read $f] {
  25.         ::mesg::add $key $text
  26.     }
  27.     close $f
  28. }
  29.  
  30. proc ::mesg::get { key } {
  31.     variable messages
  32.     if ![info exists messages($key)] {
  33.         # If there is no message is that it is yet not translated
  34.     return $key
  35.     } else {
  36.         return $messages($key)
  37.     }
  38. }
  39.  
  40. proc ::mesg::add { key text } {
  41.     variable messages
  42.     set messages($key) $text
  43. }
  44.  
  45. proc ::mesg::changeLanguage { lang } {
  46.     if [catch {
  47.     set f [open ../conf/preferredLanguage.conf w]
  48.     puts $f [string tolower $lang]
  49.     close $f
  50.     } dummy] {
  51.     puts "Could not save preferences for language"
  52.     }
  53. }
  54.  
  55.  
  56. proc ::mesg::changeLanguageDialog {} {
  57.     catch {destroy .changeLanguage}
  58.     set dialog .changeLanguage
  59.     Dialog $dialog -title "Change preferred Language" \
  60.         -image localeBig -modal local -anchor c -side bottom
  61.     $dialog add -text Ok
  62.     $dialog add -text Cancel
  63.     set frame [$dialog getframe]
  64.     set origValues [array get ::mesg::availableLanguages]
  65.     set i 0
  66.     set index 0
  67.     set values {}
  68.     foreach {lang code} $origValues {
  69.     if [string match $code $::mesg::preferredLang] {
  70.         set index $i
  71.     }
  72.     lappend values $lang
  73.     incr i
  74.     }
  75.     set cb [ComboBox $frame.cb -label "Language: " \
  76.         -values $values]
  77.     $cb setvalue @$index
  78.     pack $cb -fill x -expand true -anchor e
  79.     switch [$dialog draw] {
  80.     0 {
  81.         ::mesg::changeLanguage \
  82.             $::mesg::availableLanguages([lindex [$cb cget -values] [$cb getvalue]])
  83.     }
  84.     }
  85. }
  86.  
  87. # Init preferred language
  88.  
  89.  
  90. catch {
  91.  
  92.     set f [open ../conf/preferredLanguage.conf]
  93.     set ::mesg::preferredLang [string trim [string tolower [read $f]]]
  94.     close $f
  95.  
  96. } dummy
  97.  
  98.