require 5.0;
package Texi2HTML::I18n;
use strict;
use File::Copy;
use Data::Dumper;
our (@ISA, @EXPORT);
use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(pretty_date);
my $language;
my $i18n_dir = 'i18n';
my $T2H_WORDS_EN =
{
'About This Document' => '',
'Table of Contents' => '',
'Short Table of Contents', => '',
'Index' => '',
'Footnotes' => '',
'See' => '',
'see' => '',
'section' => '',
'Top' => '',
'Untitled Document' => '',
'January' => '',
'February' => '',
'March' => '',
'April' => '',
'May' => '',
'June' => '',
'July' => '',
'August' => '',
'September' => '',
'October' => '',
'November' => '',
'December' => '',
'T2H_today' => '%s, %d %d',
};
my $T2H_WORDS_DE =
{
'Table of Contents' => 'Inhaltsverzeichniss',
'Short Table of Contents' => 'Kurzes Inhaltsverzeichniss',
'Index' => 'Index',
'About This Document' => 'Über dieses Dokument',
'Footnotes' => 'Fußnoten',
'See' => 'Siehe',
'see' => 'siehe',
'section' => 'Abschnitt',
'January' => 'Januar',
'February' => 'Februar',
'March' => 'März',
'April' => 'April',
'May' => 'Mai',
'June' => 'Juni',
'July' => 'Juli',
'August' => 'August',
'September' => 'September',
'October' => 'Oktober',
'November' => 'November',
'December' => 'Dezember',
};
my $T2H_WORDS_NL =
{
'Table of Contents' => 'Inhoudsopgave',
'Short Table of Contents' => 'Korte inhoudsopgave',
'Index' => 'Index', 'About This Document' => 'No translation available!', 'Footnotes' => 'No translation available!', 'See' => 'Zie',
'see' => 'zie',
'section' => 'sectie',
'January' => 'Januari',
'February' => 'Februari',
'March' => 'Maart',
'April' => 'April',
'May' => 'Mei',
'June' => 'Juni',
'July' => 'Juli',
'August' => 'Augustus',
'September' => 'September',
'October' => 'Oktober',
'November' => 'November',
'December' => 'December',
};
my $T2H_WORDS_ES =
{
'Table of Contents' => 'índice General',
'Short Table of Contents' => 'Resumen del Contenido',
'Index' => 'Index', 'About This Document' => 'No translation available!', 'Footnotes' => 'Fußnoten',
'See' => 'Véase',
'see' => 'véase',
'section' => 'sección',
'January' => 'enero',
'February' => 'febrero',
'March' => 'marzo',
'April' => 'abril',
'May' => 'mayo',
'June' => 'junio',
'July' => 'julio',
'August' => 'agosto',
'September' => 'septiembre',
'October' => 'octubre',
'November' => 'noviembre',
'December' => 'diciembre',
};
my $T2H_WORDS_NO =
{
'Table of Contents' => 'Innholdsfortegnelse',
'Short Table of Contents' => 'Kort innholdsfortegnelse',
'Index' => 'Indeks', 'About This Document' => 'No translation available!', 'Footnotes' => 'No translation available!',
'See' => 'Se',
'see' => 'se',
'section' => 'avsnitt',
'January' => 'januar',
'February' => 'februar',
'March' => 'mars',
'April' => 'april',
'May' => 'mai',
'June' => 'juni',
'July' => 'juli',
'August' => 'august',
'September' => 'september',
'October' => 'oktober',
'November' => 'november',
'December' => 'desember',
};
my $T2H_WORDS_PT =
{
'Table of Contents' => 'Sumário',
'Short Table of Contents' => 'Breve Sumário',
'Index' => 'Índice', 'About This Document' => 'No translation available!', 'Footnotes' => 'No translation available!',
'See' => 'Veja',
'see' => 'veja',
'section' => 'Seção',
'January' => 'Janeiro',
'February' => 'Fevereiro',
'March' => 'Março',
'April' => 'Abril',
'May' => 'Maio',
'June' => 'Junho',
'July' => 'Julho',
'August' => 'Agosto',
'September' => 'Setembro',
'October' => 'Outubro',
'November' => 'Novembro',
'December' => 'Dezembro',
};
my $T2H_WORDS_FR =
{
'Table of Contents' => 'Table des matières',
'Short Table of Contents' => 'Résumée du contenu',
'Index' => 'Index',
'About This Document' => 'A propos de ce document',
'Footnotes' => 'Notes de bas de page',
'See' => 'Voir',
'see' => 'voir',
'section' => 'section',
'January' => 'Janvier',
'February' => 'Février',
'March' => 'Mars',
'April' => 'Avril',
'May' => 'Mai',
'June' => 'Juin',
'July' => 'Juillet',
'August' => 'Août',
'September' => 'Septembre',
'October' => 'Octobre',
'November' => 'Novembre',
'December' => 'Décembre',
'T2H_today' => 'le %2$d %1$s %3$d'
};
sub set_language($)
{
my $lang = shift;
if (defined($lang) && exists($Texi2HTML::Config::LANGUAGES->{$lang}) && defined($Texi2HTML::Config::LANGUAGES->{$lang}))
{
$language = $lang;
return 1;
}
else
{
return 0;
}
}
my @MONTH_NAMES =
(
'January', 'February', 'March', 'April', 'May',
'June', 'July', 'August', 'September', 'October',
'November', 'December'
);
my $I = \&get_string;
sub pretty_date($)
{
my $lang = shift;
my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += ($year < 70) ? 2000 : 1900;
return &$I('%{month}, %{day} %{year}', { 'month' => get_string($MONTH_NAMES[$mon]),
'day' => $mday, 'year' => $year });
}
my $error_no_en = 0;
sub get_string($;$)
{
my $string = shift;
my $arguments = shift;
my $T2H_LANGUAGES = $Texi2HTML::Config::LANGUAGES;
if (! exists($T2H_LANGUAGES->{'en'}))
{
unless($error_no_en)
{
print STDERR "i18n: no LANGUAGES->{'en'} hash\n";
$error_no_en = 1;
}
}
else
{
print STDERR "i18n: missing string $string\n" unless (exists ($T2H_LANGUAGES->{'en'}->{$string}));
if (defined ($T2H_LANGUAGES->{$language}->{$string}) and
($T2H_LANGUAGES->{$language}->{$string} ne ''))
{
$string = $T2H_LANGUAGES->{$language}->{$string};
}
elsif (defined ($T2H_LANGUAGES->{'en'}->{$string}) and
($T2H_LANGUAGES->{'en'}->{$string} ne ''))
{
$string = $T2H_LANGUAGES->{'en'}->{$string};
}
}
return main::substitute_line($string) unless (defined($arguments));
my $result = '';
while ($string)
{
if ($string =~ s/^([^%]*)%//)
{
$result .= $1 if (defined($1));
$result .= '%';
if ($string =~ s/^%//)
{
$result .= '%';
}
elsif ($string =~ /^\{(\w+)\}/ and exists($arguments->{$1}))
{
$string =~ s/^\{(\w+)\}//;
$result .= "\@\{$1\@\}";
}
else
{
$result .= '%';
}
next;
}
else
{
$result .= $string;
last;
}
}
$string = main::substitute_line($result);
$result = '';
while ($string)
{
if ($string =~ s/^([^%]*)%//)
{
$result .= $1 if (defined($1));
if ($string =~ s/^%//)
{
$result .= '%';
}
elsif ($string =~ /^\{(\w+)\}/ and exists($arguments->{$1}))
{
$string =~ s/^\{(\w+)\}//;
$result .= $arguments->{$1};
}
else
{
$result .= '%';
}
next;
}
else
{
$result .= $string;
last;
}
}
return $result;
}
1;