The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

# Copyright 2008, 2009, 2010, 2011 Kevin Ryde

# This file is part of Chart.
#
# Chart is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 3, or (at your option) any later version.
#
# Chart is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with Chart.  If not, see <http://www.gnu.org/licenses/>.

{
  package Locale::TextDomain::Bastardize;
  use strict;
  use warnings;
  use Text::Bastardize;

  sub import {
    my ($class, $method) = @_;
    $class->setup ($method);
  }

  sub setup {
    my ($class, $method) = @_;
    require Locale::Messages;
  }
}

use Scalar::Util;

my $bast = Text::Bastardize->new;
{
  foreach my $name ('Locale::Messages::gettext',
                    'Locale::Messages::dgettext',
                    'Locale::Messages::dcgettext',
                    'Locale::Messages::ngettext',
                    'Locale::Messages::dngettext',
                    'Locale::Messages::dcngettext') {
    my $old = do { no strict 'refs'; \&$name };
    my $new = Scalar::Util::set_prototype
      (sub {
         my $str = $old->(@_);
         $bast->charge ($str);
         return $bast->pig;
       }, prototype ($old));

    { no strict 'refs';
      no warnings 'redefine';
      *$name = $new;
    }
  }
}
# {
#   my $old = \&Locale::Messages ::dgettext;
#   *Locale::Messages::dgettext = sub ($) {
#     my $str = $old->(@_);
#     $bast->charge ($str);
#     return $bast->pig;
#   }
# }

print Locale::Messages::gettext ('hello world'),"\n";
print Locale::Messages::dgettext ('App-Chart', 'hello world'),"\n";
exit 0;