X-Git-Url: https://git.deb.at/?p=deb%2Fpackages.git;a=blobdiff_plain;f=lib%2FPackages%2FTemplate.pm;h=a3268a35f046d5141003e1d6da5b6fffd7540010;hp=be71d154ffbcaf890d8e0fc8cec583e90a5ade81;hb=3954845023a55026b0e57a131877cfd1b7fdc0b7;hpb=7b10a3faf069175fef7e3028df352717e89bffc2 diff --git a/lib/Packages/Template.pm b/lib/Packages/Template.pm index be71d15..a3268a3 100644 --- a/lib/Packages/Template.pm +++ b/lib/Packages/Template.pm @@ -4,13 +4,13 @@ use strict; use warnings; use Template; -use Locale::gettext; use URI (); use HTML::Entities (); use URI::Escape (); use Benchmark ':hireswallclock'; use Packages::CGI; +use Packages::Config qw( @LANGUAGES ); use Packages::I18N::Locale; use Packages::I18N::Languages; use Packages::I18N::LanguageNames; @@ -35,11 +35,17 @@ sub new { }; $vars->{make_search_url} = sub { return &Packages::CGI::make_search_url(@_) }; $vars->{make_url} = sub { return &Packages::CGI::make_url(@_) }; - $vars->{g} = sub { return &Packages::I18N::Locale::tt_gettext(@_) }; - $vars->{extract_host} = sub { my $uri = URI->new($_[0]); - my $host = $uri->host; - $host .= ':'.$uri->port if $uri->port != $uri->default_port; - return $host; + if ($vars->{cat}) { + $vars->{g} = sub { return Packages::I18N::Locale::g($vars->{cat}, @_) }; + } + $vars->{extract_host} = sub { my $uri_str = $_[0]; + my $uri = URI->new($uri_str); + if ($uri->can('host')) { + my $host = $uri->host; + $host .= ':'.$uri->port if $uri->port != $uri->default_port; + return $host; + } + return $uri_str; }; # needed to work around the limitations of the the FILTER syntax $vars->{html_encode} = sub { return HTML::Entities::encode_entities(@_,'<>&"') }; @@ -53,7 +59,7 @@ sub new { VARIABLES => $vars, COMPILE_EXT => '.ttc', %$options, - } ) or fatal_error( sprintf( _g( "Initialization of Template Engine failed: %s" ), $Template::ERROR ) ); + } ) or die sprintf( "Initialization of Template Engine failed: %s", $Template::ERROR ); $self->{format} = $format; $self->{vars} = $vars; @@ -74,7 +80,11 @@ sub page { #use Data::Dumper; #die Dumper($self, $action, $page_content); - $page_content->{used_langs} ||= [ 'en' ]; + if ($page_content->{cat}) { + $page_content->{g} = + sub { return Packages::I18N::Locale::g($page_content->{cat}, @_) }; + } + $page_content->{used_langs} ||= \@LANGUAGES; $page_content->{langs} = languages( $page_content->{lang} || $self->{vars}{lang} || 'en', @{$page_content->{used_langs}} ); @@ -105,11 +115,13 @@ sub error_page { sub languages { my ( $lang, @used_langs ) = @_; - + my $cat = Packages::I18N::Locale->get_handle($lang) + || Packages::I18N::Locale->get_handle('en'); + my @langs; if (@used_langs) { - + my @printed_langs = (); foreach (@used_langs) { next if $_ eq $lang; # Never print the current language @@ -122,13 +134,14 @@ sub languages { foreach my $cur_lang (sort langcmp @printed_langs) { my %lang; $lang{lang} = $cur_lang; - $lang{tooltip} = dgettext( "langs", get_language_name($cur_lang) ); - $lang{selfname} = get_selfname($cur_lang); - $lang{transliteration} = get_transliteration($cur_lang) if defined get_transliteration($cur_lang); + $lang{tooltip} = $cat->g(get_language_name($cur_lang)); + $lang{selfname} = get_selfname($cur_lang); + $lang{transliteration} = get_transliteration($cur_lang) + if defined get_transliteration($cur_lang); push @langs, \%lang; } } - + return \@langs; }