[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