[Html-widget] FormFu - new localization futures
Mario Minati
mario.minati at googlemail.com
Sat Mar 17 16:28:23 GMT 2007
To avoid problems with localisation with custom elements, constraints and so
on, and to ease the translation (no double entries in translation files in
formfu and e. g. catalyst) I extended the localize function to handle an
array of localisation classes.
New classes can be attached with add_localize_object function which expects an
object or a class name.
The class that was added last will be looked in first, the standard formfu
languages files (which are now also available in german ;-) will be processed
last.
To show how to create a custom module with localization I provide some code
further down.
At the moment I would suggest to use under each stage/element a directory for
contributed/not standard modules. What about 'User' or 'Contributed'?
With that directory I also could write some tests.
But for now it's working fine with the custom modules I created. ;-)
Greets,
Mario
===============================================
package glue::HTML::FormFu::Constraint::WebAddress;
use strict;
use warnings;
use base 'HTML::FormFu::Constraint';
use Regexp::Common qw( WebAddress );
#__PACKAGE__->mk_accessors( qw/ / );
sub new {
my $self = shift->SUPER::new(@_);
$self->form->add_localize_object( 'glue::HTML::FormFu::Constraint::WebAddress::I18N' );
return $self;
}
sub constrain_value {
my ( $self, $value ) = @_;
return 1 if !defined $value || $value eq '';
my $ok = $value =~ /\A$RE{WebAddress}\z/;
return $self->not ? !$ok : $ok;
}
1;
===============================================
package Regexp::Common::WebAddress;
use strict;
use warnings;
use Regexp::Common qw( pattern clean no_defaults );
use Regexp::Common::URI::RFC2396 qw( $host $port $path_segments $query
$fragment $domainlabel $toplabel $IPv4address );
pattern name => [ qw( WebAddress ) ],
create => "(?k:(?k:https?)://)?".
"(?k:(($domainlabel\[.])+($toplabel\[.]?)|$IPv4address))".
"(?::(?k:$port))?".
"(?k:/(?k:(?k:$path_segments)(?:[?](?k:$query))?
(?k:#$fragment)?))?";
# original http matching code in Regexp::Common::URI::http
# create => "(?k:(?k:(?k:https?)://)?(?k:$host)(?::(?k:$port))?".
# "(?k:/(?k:(?k:$path_segments)(?:[?](?k:$query))?))?".
# "(?k:#$fragment)?)";
1;
===============================================
package glue::HTML::FormFu::Constraint::WebAddress::I18N;
use strict;
use warnings;
use base 'Locale::Maketext';
*loc = \&localize;
sub localize {
my $self = shift;
return $self->maketext(@_);
}
1;
===============================================
package glue::HTML::FormFu::Constraint::WebAddress::I18N::en;
use strict;
use warnings;
use base qw( glue::HTML::FormFu::Constraint::WebAddress::I18N );
our %Lexicon = (
form_glue_html_formfu_constraint_webaddress_error => 'Field must contain
a valid webaddress',
);
1;
===============================================
END
More information about the Html-widget
mailing list