The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Example::Translator;

use strict;
use warnings;

our $VERSION = 0;

use Carp qw(croak);

# in mod_perl environment use Apache::Singleton::Request
use parent qw(Class::Singleton);

use Example::I18N;
use HTML::Template::Compiled::Plugin::I18N;

my %lh_of; # cache for the language handles

sub new {
    my ($class, @more) = @_;

    return $class->instance(@more);
}

sub set_language {
    my ($class, $language) = @_;

    $class->new()->{language} = $language;

    return $class;
}

sub get_language {
    my $class = shift;

    my $language = $class->new()->{language}
        or croak 'No language set';

    return $language;
}

sub get_lh {
    my $class = shift;

    my $language = __PACKAGE__->new()->get_language()
        or croak 'Language not set';
    exists $lh_of{$language}
        and return $lh_of{$language};

    # create a language handle for language
    my $lh = Example::I18N->get_handle($language)
        or croak 'What language';

    $lh_of{$language} = $lh;

    return $lh;
}

sub translate {
    my ($class, $arg_ref) = @_;

    my $lh = __PACKAGE__->new()->get_lh();

    my $translation =  $lh->maketext(
        $arg_ref->{text},
        (
            exists $arg_ref->{maketext}
            ? @{ $arg_ref->{maketext} }
            : ()
        ),
    );
    if ( exists $arg_ref->{escape} ) {
        $translation = HTML::Template::Compiled::Plugin::I18N->escape(
            $translation,
            $arg_ref->{escape},
        );
    }
    if ( exists $arg_ref->{formatter} ) {
        my $formatter_ref = $arg_ref->{formatter};
        for my $formatter ( @{$formatter_ref} ) {
            # Call here a formatter like Markdown
            if (lc $formatter eq lc 'Markdown') {
                # $translation = ... $tanslation;
            }
        }
    }
    if ( exists $arg_ref->{unescaped} ) {
        $translation = HTML::Template::Compiled::Plugin::I18N->expand_unescaped(
            $translation,
            $arg_ref->{unescaped},
        );
    }

    return $translation;
}

1;

__END__

$Id: Translator.pm 163 2009-12-03 09:20:38Z steffenw $