package Slackware::Slackget::Local; use warnings; use strict; require Slackware::Slackget::File ; require XML::Simple; $XML::Simple::PREFERRED_PARSER='XML::Parser' ; =head1 NAME Slackware::Slackget::Local - A class to load the locales =head1 VERSION Version 1.0.0 =cut our $VERSION = '1.0.0'; =head1 SYNOPSIS This class' purpose is to load and export the local. use Slackware::Slackget::Local; my $local = Slackware::Slackget::Local->new(); $local->load('/usr/local/share/slack-get/local/french.xml'); print $local->get('__SETTINGS') ; =cut sub new { my ($class,$file) = @_ ; my $self={}; bless($self,$class); if(defined($file) && -e $file) { $self->Load($file); } return $self; } =head1 CONSTRUCTOR =head2 new Can take an argument : the LC_MESSAGES file. In this case the constructor automatically call the Load() method. my $local = new Slackware::Slackget::Local(); or my $local = new Slackware::Slackget::Local('/usr/local/share/slack-get/local/french.xml'); =head1 FUNCTIONS =head2 Load (deprecated) Same as load(), provided for backward compatibility. =cut sub Load { return load(@_); } =head2 load Load the local from a given file $local->load('/usr/local/share/slack-get/local/french.xml') or die "unable to load local\n"; Return undef if something goes wrong, 1 else. =cut sub load { my ($self,$file) = @_ ; return undef unless(defined($file) && -e $file); print "[Slackware::Slackget::Local] loading file \"$file\"\n"; my $data = XML::Simple::XMLin( $file , KeyAttr=> {'message' => 'id'}) ; $self->{DATA} = $data->{'message'} ; $self->{LP_NAME} = $data->{name} ; return 1; } =head2 get_indexes Return the list of all index of the current loaded local. Dependending of the context, this method return an array or an arrayref. # Return a list foreach ($local->get_indexes) { print "$_ : ",$local->Get($_),"\n"; } # Return an arrayref my $index_list = $local->get_indexes ; =cut sub get_indexes { my $self = shift; my @a = keys( %{$self->{DATA} }); return wantarray ? @a : \@a; } =head2 Get (deprecated) Same as get(), provided for backward compatibility. =cut sub Get { return get(@_); } =head2 get Return the localized message of a given token : my $error_on_modification = $local->get('__ERR_MOD') ; Return undef if the token doesn't exist. You can also pass extra arguments to this method, and if their is wildcards in the token they will be replace by those values. Wildcards are %1, %2, ..., %x. Here is and example : # The token is : # __NETWORK_CONNECTION_ERROR = Error, cannot connect to %1, the server said ``%2''. my $localized_token = $local->get('__NETWORK_CONNECTION_ERROR', '192.168.0.42', 'Connection not authorized'); print "$localized_token\n"; # $localized_token contains the string "Error, cannot connect to 192.168.0.42, the server said ``Connection not authorized''." =cut sub get { my ($self,$token,@args) = @_ ; if(@args) { @args = (0,@args); my $tmp = $self->{DATA}->{$token}->{'content'}; for(my $k=1;$k<=$#args; $k++) { $tmp =~ s/%$k/$args[$k]/g ; } return $tmp; } else { return $self->{DATA}->{$token}->{'content'}; } } =head2 to_XML (deprecated) Same as to_xml(), provided for backward compatibility. =cut sub to_XML { return to_xml(@_); } sub to_xml { my $self = shift; my @msg = sort {$a cmp $b} keys(%{ $self->{DATA} }); my $xml = "\n{LP_NAME}\">\n"; foreach my $token (@msg) { unless(defined( $self->{DATA}->{$token}->{content} )) { print "token \"$token\" have no associate value.\n"; next; } $xml .= "\t{DATA}->{$token}->{content}]]>\n"; } $xml .= ""; } =head2 name Accessor for the name of the Local (langpack). print "The current langpack name is : ", $local->name,"\n"; $local->name('Japanese'); # Set the name of the langpack to 'Japanese'. =cut sub name { my $self = shift; my $name = shift; return $name ? ($self->{LP_NAME}=$name) : $self->{LP_NAME}; } =head1 AUTHOR DUPUIS Arnaud, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Slackware::Slackget::Local You can also look for information at: =over 4 =item * Infinity Perl website L =item * slack-get specific website L =item * RT: CPAN's request tracker L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Search CPAN L =back =head1 ACKNOWLEDGEMENTS Thanks to Bertrand Dupuis (yes my brother) for his contribution to the documentation. =head1 SEE ALSO =head1 COPYRIGHT & LICENSE Copyright 2005 DUPUIS Arnaud, All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; # End of Slackware::Slackget::Local