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 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'} = $ref->{'spraak'};
80 $lang{'a'} = $ref->{'spraak'};
81 $lang{'a/href'} = sprintf "/%s/%s", $ref->{'kultur'}, $url;
82 $lang{'lang-no-link'} = '';
84 push @languages, \%lang;
91 my ($cgi, $dbh, $locale) = @_;
92 my $url = $cgi->url(-relative => 1);
94 print "<p style=\"font-size: smaller;\">";
96 my $q = $dbh->prepare('SELECT spraak, kultur FROM fotballspraak WHERE nyestesesong <> -1 ORDER BY id');
100 while (my $ref = $q->fetchrow_hashref) {
106 if ($ref->{'kultur'} eq $locale) {
107 printf "%s ", $ref->{'spraak'};
109 printf "<a href=\"/%s/%s\">%s</a> ", $ref->{'kultur'}, $url, $ref->{'spraak'};
115 # mapping from locale to translation to use (if not found, "en" is used)
116 my %translation_mapping = (
124 sub process_template {
125 my ($filename, $locale, $parms) = @_;
127 my $translation = $translation_mapping{$locale} // 'en';
129 if (-r "../templates/$filename.$translation.xml") {
130 $parms->{'html/xml:lang'} = $translation;
131 $doc = XML::Template::process_file("../templates/$filename.$translation.xml", $parms);
133 $doc = XML::Template::process_file("../templates/$filename.xml", $parms);
135 print $doc->toString;
139 my ($num, $locale) = @_;
140 my $translation = $translation_mapping{$locale} // 'en';
142 if ($translation eq 'no') {
144 } elsif ($translation eq 'en') {
145 # http://en.wikipedia.org/wiki/English_numerals#Ordinal_numbers
146 my $units = $num % 10;
147 my $tens = (($num - $units) / 10) % 10;
150 } elsif ($units == 1) {
152 } elsif ($units == 2) {
154 } elsif ($units == 3) {
160 die "Missing ordinal strategy for locale $locale";
164 sub find_all_locales {
166 my $q = $dbh->prepare('SELECT kultur FROM fotballspraak WHERE nyestesesong<>-1');
170 while (my $ref = $q->fetchrow_hashref) {
171 push @locales, $ref->{'kultur'};