The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# ============================================================================
package CatalystX::I18N::Role::DataLocalize;
# ============================================================================

use namespace::autoclean;
use Moose::Role;

sub localize {
    my ($c,$msgid,@args) = @_;

    my @args_expand;
    foreach my $arg (@args) {
        push @args_expand,
            (ref $arg eq 'ARRAY') ? @$arg : $arg;
    }

    # TODO: Check if DataLocalize model is available
    my $loc = $c->model('DataLocalize');
    my $msgstr = $loc->localize( $msgid, @args_expand );

    return $msgstr;
}

no Moose::Role;
1;

=encoding utf8

=head1 NAME

CatalystX::I18N::Role::DataLocalize - Support for localize

=head1 SYNOPSIS

 # In your catalyst base class
 package MyApp::Catalyst;

 use Catalyst qw/MyPlugins
    CatalystX::I18N::Role::Base
    CatalystX::I18N::Role::DataLocalize/;
 
 # Maketext model class
 package MyApp::Model::DataLocalize;
 use parent qw/CatalystX::I18N::Model::DataLocalize/;
 
 # Create a Maketext class (must be a Data::Localize class)
 package MyApp::Maketext;
 use parent qw/CatalystX::I18N::DataLocalize/;
 
 # In your controller class(es)
 package MyApp::Catalyst::Controller::Main;
 use strict;
 use warnings;
 use parent qw/Catalyst::Controller/;
 
 sub action : Local {
     my ($self,$c) = @_;

     $c->stash->{results} = $c->localize('Your search found %quant(%1,result,results)',$count);
 }

=head1 DESCRIPTION

This role adds support for L<Data::Localize> localisation via the
L<CatalystX::I18N::Model::DataLocalize> model.

In order to work properly this role needs a model called C<DataLocalize>. A
call to C<$c-E<gt>model('DataLocalize')> should return a L<Data::Localize>
object. You can either write your own Model and use L<Data::Localize> directly
or use L<CatalystX::I18N::Model::DataLocalize> togheter with
L<CatalystX::I18N::DataLocalize>.

=head1 METHODS

=head3 localize

 my $translated_string = $c->localize($msgid,@params);
 OR
 my $translated_string = $c->localize($msgid,\@params);

Translates a string via L<Data::Localize>.

=head1 SEE ALSO

L<Data::Localize>, L<CatalystX::I18N::Model::DataLocalize>
and L<CatalystX::I18N::DataLocalize>

=head1 AUTHOR

    Maroš Kollár
    CPAN ID: MAROS
    maros [at] k-1.com
    
    L<http://www.k-1.com>