Greetings,

i personally think this is a good approach.
A simple "use Wx;" anywhere in the code should *not* change the behavior of a complete separate codepart. As described in the Bug Ticket, this automatism was already breaking a application which involved database operations.

On the wx-users group the discussed solution is the same as your patch

https://groups.google.com/forum/?fromgroups#!topic/wx-users/09Jcs4bCEwE

Is it possible to change the overriding of wxAppTraits::SetLocale() within perl?

On the other hand, if you are trying to maintain compatibility with vanilla cpp-wxWidgets
i would suggest to document this problem on a prominent place.

Something like this at the bottom of Wx.pm (i assembled some of your explanation here):


=head1 Locale Behavior

Beginning with 2.9.0 wxWidgets sets the locale to the current system locale.
Formally in wxWidgets 2.8.x, the locale by default was 'C'.

The problem arises because in addition to loading gettext translation
files, this affects other C calls like printf, sprintf,...

Perl makes calls to these functions when formatting numbers.
Number formatting always uses underlying C library functions.
The statements 'use locale', or 'no locale' make no difference here.

So, if your locale is 'de' then when Wx starts, the C library locale gets
set accordingly.

    use Wx;
    print 8.3

will output 8,3 to the terminal. Formatting uses ',' as the fractional
separator.

This, whilst possibly correct, isn't what Perl users will be expecting
at all.

If you want to set the locale you can do so explicitly.
You can then also reset just the locale for number formatting to 'C' if
that is what you require

    use POSIX qw( setlocale LC_NUMERIC );

    setlocale( LC_NUMERIC, C );

This code applies equally regardless of which wxWidgets version is being
used.

---

Regards
Tarek

Reply via email to