From the [msgcat] TclHelp: LOCALE AND SUBLOCALE SPECIFICATION The locale is specified by a locale string. The locale string consists of a language code, an optional country code, and an optional system-specific code, each separated by "_". The country and language codes are specified in standards ISO-639 and ISO-3166. For example, the locale "en" specifies English and "en_US" specifes U.S. English. The locale defaults to the value in env(LANG) at the time the msgcat package is loaded. If env(LANG) is not defined, then the locale defaults to "C". When a locale is specified by the user, a "best match" search is performed during string translation. For example, if a user specifies en_UK_Funky, the locales "en_UK_Funky", "en_UK", and "en" are searched in order until a matching translation string is found. If no translation string is available, then ::msgcat::unknown is called. ---- [RS] offers an example of locale-use in Tcl programming: " proc monthname {date} { if ![info exists ::env(LANG)] {set ::env(LANG) "C"} set index $::env(LANG) if ![info exists ::monthnames($index)] {set index "C"} lindex $::monthnames($index) [clock format $date -format -m] } # These lists indexed by locale must have a dummy first argument # set monthnames(C) {- January February March April...} set monthnames(de_AT) {- J�nner Feber M�rz April ...} ... ---- [i18n - Writing for the world] - [Arts and crafts of Tcl-Tk programming]