Apache-Language

 view release on metacpan or  search on metacpan

Language.pm  view on Meta::CPAN

    my $class = shift;
    my $r = Apache->request;
    my ($package, $filename, $line) = caller;
    my $hash = {};
    tie (%$hash, __PACKAGE__, $r, $package, $filename, @_);  
    return bless $hash, $class;
    }  

#Old call preserved for compatibility.
sub message {
    my ($self, $key, @args) = @_;
    return sprintf $self->{$key}, @args;
    }  
    
#returns the list of requested languages by the client    
sub lang {
    my $self = shift;
    $self = tied %$self if tied %$self;
    return $self->{Lang};
    }
#returns Apache $r
sub request {
    my $self = shift;
    $self = tied %$self if tied %$self;
    return $self->{Request};
    }
sub extra_args {
    my $self = shift;
    $self = tied %$self if tied %$self;
    return $self->{Extra_Args};
    }
#returns the handler stack
sub handlers {
    my $self = shift;
    $self = tied %$self if tied %$self;
    return @ {$self->{Handlers}};
    }
#returns the filename of the calling Module/Script
sub filename {
    my $self = shift;
    $self = tied %$self if tied %$self;
    return $self->{Filename};
    }

#returns the package name of the calling Module/Script
sub package {
    my $self = shift;
    $self = tied %$self if tied %$self;
    return $self->{Package};
    }
    
#Dumps the language object for debugging purposes.
sub dump {
    my $self = shift;
    $self = tied %$self if tied %$self;
    print "<PRE>";
    print Dumper $self;
    print "</PRE>";
    }

#given an ordered list of knowns languages, returns the best language 
#choice according to the client request
#Called mostly by LanguageHandlers to figure out what language to pick
sub best_lang {
    my ($self,@offered) = @_;
    my ($result, $language);

    $self = tied %$self if tied %$self;
    foreach my $want (@ {$self->{Lang}}) {
        foreach my $offer (@offered) {
            my $similarity = similarity_language_tag($offer, $want);
            if ($similarity){
                return $offer if same_language_tag($offer, $want);
                }
            if ($similarity > $result){
                $result = $similarity;
                $language = $offer;
                }
        }
    }
    return $language;
}

sub AUTOLOAD {
      my $self = shift;
      my $untiedself = tied %$self if tied %$self;
      my $name = $AUTOLOAD;
      return if $name =~ /::DESTROY$/;
      
      my $type = ref($self) || die "$self is not an object";
      
      $name =~ s/.*://;
      
      foreach my $container (@ {$untiedself->{Handlers}}){
         my $conthash = $untiedself->{$container}{DATA};
         return $container->$name($untiedself, $conthash, @_) if ($container->can($name));
         }
      warning( "No $name defined in any LanguageHandlers, sorry.",1);
      return undef;
}


#TEST HANDLER
sub handler {
    my $r = shift;
   
    my $test = Apache::Language->new($r);
    $r->send_http_header('text/html');
    print "Hello<BR>";
    #foreach (keys %$test){
    #    print "$_ is " . $test->{$_} . "<BR>";
     #   }
     print $test->{'Parent'};
    print "<HR><PRE>";
    print Dumper %CACHE;
    print "</PRE>";
    #delete $test->{'voo1'};
    #%$test = ();
    }



#STATUS
sub status {



( run in 0.669 second using v1.01-cache-2.11-cpan-39bf76dae61 )