9 my ($dbh, $locale) = @_;
10 my $ref = $dbh->selectrow_hashref('SELECT MAX(sesong) AS max_sesong FROM fotballserier se JOIN fotballspraak sp ON se.spraak=sp.id WHERE kultur=?',
12 return $ref->{'max_sesong'};
17 my $ref = $dbh->selectrow_hashref('SELECT EXTRACT(EPOCH FROM last_sync) AS last_sync FROM last_sync');
21 return POSIX::strftime("%Y-%m-%d %H:%M %Z", localtime($ref->{'last_sync'}));
25 sub output_last_sync {
27 my $ts = get_last_sync($dbh);
28 print " <p class=\"lastsync\">Databasen ble sist synkronisert $ts.</p>\n";
33 my $url = $cgi->url(-absolute => 1);
34 $url =~ m#^/([a-z][a-z]-[A-Z][A-Z])/# or die "Invalid locale!";
41 POSIX::setlocale(&POSIX::LC_ALL, $locale . '.UTF-8');
44 sub get_auxillary_parameters {
45 my ($dbh, $locale) = @_;
47 my $q = $dbh->prepare('SELECT * FROM aux_params WHERE kultur=?');
51 while (my $ref = $q->fetchrow_hashref) {
52 $aux_parms->{$ref->{'id'}} = $ref->{'value'};
58 my ($cgi, $dbh, $locale) = @_;
59 my $url = $cgi->url(-relative => 1);
61 print "<p style=\"font-size: smaller;\">";
63 my $q = $dbh->prepare('SELECT spraak, kultur FROM fotballspraak WHERE nyestesesong <> -1 AND length(kultur)=5 ORDER BY id');
69 while (my $ref = $q->fetchrow_hashref) {
72 $lang{'separator'} = '';
76 if ($ref->{'kultur'} eq $locale) {
77 $lang{'lang-with-link'} = '';
78 $lang{'lang-no-link'} = Encode::decode_utf8($ref->{'spraak'});
80 $lang{'a'} = Encode::decode_utf8($ref->{'spraak'});
81 $lang{'a/href'} = sprintf "/%s/%s", $ref->{'kultur'}, $url;
82 $lang{'lang-no-link'} = '';
84 push @languages, \%lang;
90 # mapping from locale to translation to use (if not found, "en" is used)
91 my %translation_mapping = (
99 sub process_template {
100 my ($filename, $locale, $parms) = @_;
102 my $translation = $translation_mapping{$locale} // 'en';
104 if (-r "../templates/$filename.$translation.xml") {
105 $parms->{'html/xml:lang'} = $translation;
106 $doc = XML::Template::process_file("../templates/$filename.$translation.xml", $parms);
108 $doc = XML::Template::process_file("../templates/$filename.xml", $parms);
110 print $doc->toString;
114 my ($num, $locale) = @_;
115 my $translation = $translation_mapping{$locale} // 'en';
117 if ($translation eq 'no') {
119 } elsif ($translation eq 'en') {
120 # http://en.wikipedia.org/wiki/English_numerals#Ordinal_numbers
121 my $units = $num % 10;
122 my $tens = (($num - $units) / 10) % 10;
125 } elsif ($units == 1) {
127 } elsif ($units == 2) {
129 } elsif ($units == 3) {
135 die "Missing ordinal strategy for locale $locale";
139 sub find_all_locales {
141 my $q = $dbh->prepare('SELECT kultur FROM fotballspraak WHERE nyestesesong <> -1 AND length(kultur)=5');
145 while (my $ref = $q->fetchrow_hashref) {
146 push @locales, $ref->{'kultur'};