1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
# $Id: trans.tcl 802 2006-11-24 19:14:19Z sergei $
# Message translation
namespace eval ::trans {
variable trans
array set trans {}
}
# Load message file. It must be in UTF-8 encoding.
proc ::trans::loadfile {filepath} {
set fd [open $filepath "r"]
fconfigure $fd -encoding utf-8
uplevel #0 [read $fd]
close $fd
}
# Load all message files in the directory.
proc ::trans::load {dirpath} {
foreach filepath [glob -nocomplain -directory $dirpath *.msg] {
loadfile $filepath
}
}
# Set translated message.
proc ::trans::trset {lang msgfrom {msgto ""}} {
variable trans
if {$msgto != ""} {
set trans($lang,$msgfrom) $msgto
}
}
# ::trans::trans lang msg
# ::trans::trans msg
# Translate message 'msg' to language 'lang'. If there is only one
# argument (no lang), then return unchanged message.
proc ::trans::trans {args} {
switch -- [llength $args] {
0 {
return -code error "::trans::trans: Too few arguments"
}
1 {
# Dummy call for searching translations in the source.
return [lindex $args 0]
}
2 {
lassign $args lang msg
variable trans
set langlist [split [string tolower $lang] -]
set shortlang [lindex $langlist 0]
set longlang [join $langlist _]
if {[info exists trans($longlang,$msg)]} {
return $trans($longlang,$msg)
} elseif {[info exists trans($shortlang,$msg)]} {
return $trans($shortlang,$msg)
} else {
return $msg
}
}
default {
return -code error "::trans::trans: Too many arguments"
}
}
}
|