package HTML::FormHandler::TraitFor::I18N;
# ABSTRACT: localization
$HTML::FormHandler::TraitFor::I18N::VERSION = '0.40068';
use HTML::FormHandler::I18N;
use Moose::Role;
use Moose::Util::TypeConstraints;
has 'language_handle' => (
isa => duck_type( [ qw(maketext) ] ),
is => 'rw',
lazy_build => 1,
required => 1,
);
sub _build_language_handle {
my ($self) = @_;
if (!$self->isa('HTML::FormHandler') && $self->has_form) {
return $self->form->language_handle();
}
my $lh;
if ( $ENV{LANGUAGE_HANDLE} ) {
if ( blessed $ENV{LANGUAGE_HANDLE} ) {
$lh = $ENV{LANGUAGE_HANDLE};
}
else {
$lh = HTML::FormHandler::I18N->get_handle( $ENV{LANGUAGE_HANDLE} );
}
}
else {
$lh = HTML::FormHandler::I18N->get_handle;
}
return $lh;
}
sub _localize {
my ($self, @message) = @_;
my $message = $self->language_handle->maketext(@message);
return $message;
}
no Moose::Role;
no Moose::Util::TypeConstraints;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
HTML::FormHandler::TraitFor::I18N - localization
=head1 VERSION
version 0.40068
=head3 language_handle, _build_language_handle
Holds a Locale::Maketext (or other duck_type class with a 'maketext'
method) language handle. The language handle is used to localize the
error messages in the field's 'add_error' method. It's also used
in various places in rendering to localize labels and button values,
etc.
The builder for this attribute gets the Locale::Maketext language
handle from the environment variable $ENV{LANGUAGE_HANDLE}:
$ENV{LANGUAGE_HANDLE} = 'en_en';
...or creates a default language handler using L.
(Note that earlier versions required an actual object reference in ENV,
which is a bad practice and no longer supported.)
You can pass in an existing L subclass instance
or create one in a builder.
In a form class:
sub _build_language_handle { MyApp::I18N::abc_de->new }
Passed into new or process:
my $lh = MyApp::I18N::abc_de->new;
my $form = MyApp::Form->new( language_handle => $lh );
If you do not set the language_handle, then L and/or
L may guess, with unexpected results.
You can use non-Locale::Maketext language handles, such as L.
There's an example of building a L language handle
in t/xt/locale_data_localize.t in the distribution.
If you don't want a particular error message to go through localization,
you can use 'push_errors' and 'push_form_errors' instead of 'add_error' and
'add_form_errors'.
Example of getting the language handle from the Catalyst context (where the Catalyst
context is passed in with 'ctx'):
has '+language_handle' => ( builder => 'get_language_handle_from_ctx' );
sub get_language_handle_from_ctx {
my $self = shift;
return MyApp::I18N->get_handle(
@{ $self->ctx->languages } );
}
=head1 AUTHOR
FormHandler Contributors - see HTML::FormHandler
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Gerda Shank.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut