On 4 Oct 2009, at 20:30, Ronald Oussoren wrote:
On 4 Oct, 2009, at 19:53, Barry Scott wrote:
I have a wxPython application (PySVN WorkBench) that is a bundle.
When the app runs the environment does not contain any of the usual
variables that would be used to into the locale, LANG, LC_ALL etc.
What I can see in the environment is __CF_USER_TEXT_ENCODING.
I have failed to find details of how to interpret the value of this
environment
variable which leads me to believe I should not do processing it
directly.
The trick that works on windows does not work. Windows init:
locale.setlocale( locale.LC_ALL, '' )
$ python2.6
Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39)
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more
information.
>>> import locale
>>> locale.getdefaultlocale()
(None, 'mac-roman')
>>> locale.getlocale()
(None, None)
>>> locale.setlocale( locale.LC_ALL, '' )
'C'
>>> locale.getlocale()
(None, None)
>>>
The default locale of (None, 'mac-roman') is useless as it
does not say which locale the user has selected in
System Preferences, Language and Text.
How should I init the locale to the users choice?
That depends on the version of OSX you're running.
On my system (10.6.1):
>>> locale.setlocale(locale.LC_ALL, '')
'en_US.UTF-8'
>>> locale.getlocale()
('en_US', 'UTF8')
>>>
Look in your environment. You will see one of LANG, LANGUAGE, LC_ALL
defined that setlocale is picking up on.
As I said when OS X runs python in an application bundle none of these
environment variables are defined.
This should also work in 10.5, but probably not 10.4.
The value of "__CF_USER_TEXT_ENCODING" is undocumented, you
shouldn't rely on that value. The only reliable way to get at the
locale settings from System Preferences is by using mac-specific
API's from CoreFoundation or Cocoa.
Agreed. But it is info I can get from with in python.
What I'm surprised at is that setlocale on OS X does not call those
Mac API's if the environment variables are not defined.
Especially given that python on windows does call windows APIs to find
the language and set the locale.
BTW. The usual approach for localizing an OSX app is to have
language-specific subbundles in the application bundle, for
examples, "Resources/English.lproj" for the english localization and
"Resources/nl.lproj" for the Dutch localization. Apple's APIs have
specific support for that structure, although I don't know if
wxWidgets exposes that.
I'll ask the wxPython folks how to do this.
Barry
_______________________________________________
Pythonmac-SIG maillist - Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig