[PATCH] kernel32: Respect the LANG environment variable on Mac OS.
Ken Thomases
ken at codeweavers.com
Wed Dec 9 14:51:38 CST 2009
On Dec 9, 2009, at 1:34 PM, Ken Thomases wrote:
> So, I'm making a new proposal: the Mac formats region will be used
> to set LANG unconditionally. (Passing 1 for the third argument to
> setenv() rather than 0.) The current code for overwriting
> lcid_LC_MESSAGES will be tweaked. Instead of looking at whether
> lcid_LC_MESSAGES has been set to something other than lcid_LC_CTYPE,
> it will look at whether LC_ALL or LC_MESSAGES were set in the
> environment. If they were, it leaves lcid_LC_MESSAGES alone. If
> they were not, it overwrites it using the existing method.
Now I've reconsidered a bit more. I'm not going to overwrite LANG
unconditionally.
For most of this discussion, I've been pretty hostile toward LANG.
The main problem with it is that Terminal.app sets it, this setting is
based on region and not language, and therefore if we honor LANG for
LC_MESSAGES, the user gets the wrong language.
Given that we're going to continue overwriting lcid_LC_MESSAGES using
the Mac OS X settings, just under different conditions than
previously, Terminal's LANG is not so problematic. In fact, it's
likely exactly equal to what our code will now generate for LANG.
(Gert's reporting shows that Terminal sometimes doesn't set LANG at
all and only sets LC_CTYPE, because it detects that the region doesn't
have a valid locale definition for the C library. In this case, Wine
will set LANG, because it isn't already set, but that will be invalid
and everything will default to the C locale, including LC_CTYPE. This
actually loses information. Unfortunately, there's not much we can do
about that. Wine has to set LANG if it isn't set because, for
example, Tiger's Terminal.app does not make any attempt to set locale
environment variables.)
The big change between now and the beginning of this debate is that we
must acknowledge that the way to tell Wine to behave differently (e.g.
to test other languages and locales) is to set LC_ALL or the
individual LC_* variables. I still maintain that setting LANG has
never been the right approach for that. And setting LANG will
continue to be an incomplete override on the Mac (it won't get
LC_MESSAGES), as it is on Linux for a user with an LC_* in his or her
everyday environment.
-Ken
More information about the wine-devel
mailing list