The Tcl msgcat facility doesn't respect POSIX, by
looking only at LANG
and ignoring LC_MESSAGES and LC_ALL. Everywhere in
POSIX, LC_ALL
overrides LANG when set. But tcl ignores it. Thus, i18n
for Tcl
programs doesn't print messages in the same language as
other
applications do, if the user has set only LC_ALL and/or
LC_MESSAGES
but not LANG.
Description of LANG, LC_MESSAGES, LC_ALL:
LANG
This variable shall determine the locale category for
native language,
local customs, and coded character set in the absence
of the LC_ALL
and other LC_* ( LC_COLLATE , LC_CTYPE , LC_MESSAGES ,
LC_MONETARY ,
LC_NUMERIC , LC_TIME ) environment variables. This can
be used by
applications to determine the language to use for error
messages and
instructions, collating sequences, date formats, and so
on.
LC_MESSAGES
This variable shall determine the locale category for
processing
affirmative and negative responses and the language and
cultural
conventions in which messages should be written.
Additional semantics
of this variable, if any, are implementation-defined.
The language and
cultural conventions of diagnostic and informative
messages whose
format is unspecified by IEEE Std 1003.1-2001 should be
affected by
the setting of LC_MESSAGES .
LC_ALL
This variable shall determine the values for all locale
categories. The value of the LC_ALL environment
variable has
precedence over any of the other environment variables
starting with
LC_ ( LC_COLLATE , LC_CTYPE , LC_MESSAGES , LC_MONETARY
, LC_NUMERIC ,
LC_TIME ) and the LANG environment variable.
Furthermore please note that in this context, an
environment variable
whose value is empty is treated like if it were unset.
Logged In: YES
user_id=72656
Against what version of Tcl, built on what platform is this
complaint? The latest Tcl uses nl_langinfo - *where
available* - to determine language info. I think that
handles this (but I'm not an l10n expert).
Logged In: YES
user_id=5923
I was referring to tclx 8.3, coupled with tcl 8.3.3, running
on
SuSE Linux, as packaged in
ftp://ftp.suse.com/pub/suse/i386/7.3/full-names/i386/tclx-8.3-136.i386.rpm
The code which looks at LANG but not LC_ALL etc. was in the
msgcat module, part of tclx.
Logged In: YES
user_id=80530
so this is really a TclX bug, not Tcl, nor msgcat package.
Assigning to Jeff for disposal.
Logged In: YES
user_id=80530
Can we get a clarification on this report?
Is it about the msgcat package that comes
with Tcl?
Or is it about [catopen], [catgets], [catclose]
commands provided by TclX as its "msgcat" facility?
Logged In: YES
user_id=5923
The report was about the msgcat.tcl package.
The patch for bug [ 525525 ] should solve this issue as
well, because
it correctly tests for empty environment variables:
foreach varName {LC_ALL LC_MESSAGES LANG} {
if {[info exists ::env($varName)]
&& ![string equal "" $::env($varName)]} {
mclocale [ConvertLocale $::env($varName)]
return
}
}
Logged In: YES
user_id=80530
good, then I'm closing this as a duplicate of 525525