⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgcat.tcl

📁 This Source-Navigator, an IDE for C/C++/Fortran/Java/Tcl/PHP/Python and a host of other languages.
💻 TCL
字号:
# msgcat.tcl --##	This file defines various procedures which implement a#	message catalog facility for Tcl programs.  It should be#	loaded with the command "package require msgcat".## Copyright (c) 1998 by Scriptics Corporation.# Copyright (c) 1998 by Mark Harrison.## See the file "license.terms" for information on usage and redistribution# of this file, and for a DISCLAIMER OF ALL WARRANTIES.# # RCS: @(#) $Id: msgcat.tcl,v 1.1 2003/02/05 10:54:48 mdejong Exp $package provide msgcat 1.1namespace eval msgcat {    namespace export mc mcset mclocale mcpreferences mcunknown    # Records the current locale as passed to mclocale    variable locale ""    # Records the list of locales to search    variable loclist {}    # Records the mapping between source strings and translated strings.  The    # array key is of the form "<locale>,<namespace>,<src>" and the value is    # the translated string.    array set msgs {}}# msgcat::mc --##	Find the translation for the given string based on the current#	locale setting. Check the local namespace first, then look in each#	parent namespace until the source is found.  If additional args are#	specified, use the format command to work them into the traslated#	string.## Arguments:#	src	The string to translate.#	args	Args to pass to the format command## Results:#	Returns the translatd string.  Propagates errors thrown by the #	format command.proc msgcat::mc {src args} {    # Check for the src in each namespace starting from the local and    # ending in the global.    set ns [uplevel {namespace current}]        while {$ns != ""} {	foreach loc $::msgcat::loclist {	    if {[info exists ::msgcat::msgs($loc,$ns,$src)]} {		if {[llength $args] == 0} {		    return $::msgcat::msgs($loc,$ns,$src)		} else {		    return [eval \			    [list format $::msgcat::msgs($loc,$ns,$src)] \			    $args]		}	    }	}	set ns [namespace parent $ns]    }    # we have not found the translation    return [uplevel 1 [list [namespace origin mcunknown] \	    $::msgcat::locale $src] $args]}# msgcat::mclocale --##	Query or set the current locale.## Arguments:#	newLocale	(Optional) The new locale string. Locale strings#			should be composed of one or more sublocale parts#			separated by underscores (e.g. en_US).## Results:#	Returns the current locale.proc msgcat::mclocale {args} {    set len [llength $args]    if {$len > 1} {	error {wrong # args: should be "mclocale ?newLocale?"}    }    set args [string tolower $args]    if {$len == 1} {	set ::msgcat::locale $args	set ::msgcat::loclist {}	set word ""	foreach part [split $args _] {	    set word [string trimleft "${word}_${part}" _]	    set ::msgcat::loclist [linsert $::msgcat::loclist 0 $word]	}    }    return $::msgcat::locale}# msgcat::mcpreferences --##	Fetch the list of locales used to look up strings, ordered from#	most preferred to least preferred.## Arguments:#	None.## Results:#	Returns an ordered list of the locales preferred by the user.proc msgcat::mcpreferences {} {    return $::msgcat::loclist}# msgcat::mcload --##	Attempt to load message catalogs for each locale in the#	preference list from the specified directory.## Arguments:#	langdir		The directory to search.## Results:#	Returns the number of message catalogs that were loaded.proc msgcat::mcload {langdir} {    set x 0    foreach p [::msgcat::mcpreferences] {	set langfile [file join $langdir $p.msg]	if {[file exists $langfile]} {	    incr x	    uplevel [list source $langfile]	}    }    return $x}# msgcat::mcset --##	Set the translation for a given string in a specified locale.## Arguments:#	locale		The locale to use.#	src		The source string.#	dest		(Optional) The translated string.  If omitted,#			the source string is used.## Results:#	Returns the new locale.proc msgcat::mcset {locale src {dest ""}} {    if {[string equal $dest ""]} {	set dest $src    }    set ns [uplevel {namespace current}]    set ::msgcat::msgs([string tolower $locale],$ns,$src) $dest    return $dest}# msgcat::mcunknown --##	This routine is called by msgcat::mc if a translation cannot#	be found for a string.  This routine is intended to be replaced#	by an application specific routine for error reporting#	purposes.  The default behavior is to return the source string.  #	If additional args are specified, the format command will be used#	to work them into the traslated string.## Arguments:#	locale		The current locale.#	src		The string to be translated.#	args		Args to pass to the format command## Results:#	Returns the translated value.proc msgcat::mcunknown {locale src args} {    if {[llength $args]} {	return [eval [list format $src] $args]    } else {	return $src    }}# Initialize the default localenamespace eval msgcat {    # set default locale, try to get from environment    if {[info exists ::env(LANG)]} {        mclocale $::env(LANG)    } else {        mclocale "C"    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -