X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/137a87afd5dac7bb248be02d1277d6a007171aa2..cf65b409730801f9b8311471c966dbfede85628d:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index 8f7d8d20b..42d607b0d 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -82,7 +82,7 @@ sub checkconfig () { #{{{ eval q{use POSIX}; error($@) if $@; $ENV{LANG} = $config{locale} - if POSIX::setlocale(&POSIX::LC_TIME, $config{locale}); + if POSIX::setlocale(&POSIX::LC_ALL, $config{locale}); } if ($config{w3mmode}) { @@ -517,6 +517,10 @@ sub preprocess ($$$;$) { #{{{ if ($preprocessing{$page}++ > 3) { # Avoid loops of preprocessed pages preprocessing # other pages that preprocess them, etc. + #translators: The first parameter is a + #translators: preprocessor directive name, + #translators: the second a page name, the + #translators: third a number. return "[[".sprintf(gettext("%s preprocessing loop detected on %s at depth %i"), $command, $page, $preprocessing{$page}). "]]"; @@ -632,18 +636,35 @@ sub saveindex () { #{{{ close OUT; } #}}} +sub template_file ($) { #{{{ + my $template=shift; + + foreach my $dir ($config{templatedir}, "$installdir/share/ikiwiki/templates") { + return "$dir/$template" if -e "$dir/$template"; + } + return undef; +} #}}} + sub template_params (@) { #{{{ - my $filename=shift; - + my $filename=template_file(shift); + + if (! defined $filename) { + return if wantarray; + return ""; + } + require HTML::Template; - return filter => sub { + my @ret=( + filter => sub { my $text_ref = shift; $$text_ref=&Encode::decode_utf8($$text_ref); }, - filename => "$config{templatedir}/$filename", + filename => $filename, loop_context_vars => 1, die_on_bad_params => 0, - @_; + @_ + ); + return wantarray ? @ret : {@ret}; } #}}} sub template ($;@) { #{{{ @@ -812,13 +833,22 @@ sub file_pruned ($$) { #{{{ $file =~ m/$regexp/; } #}}} +my $gettext_obj; sub gettext { #{{{ # Only use gettext in the rare cases it's needed. - # This overrides future calls of this function. if (exists $ENV{LANG} || exists $ENV{LC_ALL} || exists $ENV{LC_MESSAGES}) { - eval q{use Locale::gettext}; - textdomain('ikiwiki'); - return Locale::gettext::gettext(shift); + if (! $gettext_obj) { + $gettext_obj=eval q{ + use Locale::gettext q{textdomain}; + Locale::gettext->domain('ikiwiki') + }; + if ($@) { + print STDERR "$@"; + $gettext_obj=undef; + return shift; + } + } + return $gettext_obj->get(shift); } else { return shift;