return $1;
}
+sub set_locale {
+ my $locale = shift;
+ $locale =~ s/-/_/;
+ POSIX::setlocale(&POSIX::LC_ALL, $locale . '.UTF-8');
+}
+
sub get_auxillary_parameters {
my ($dbh, $locale) = @_;
print "<p style=\"font-size: smaller;\">";
- my $q = $dbh->prepare('SELECT spraak, kultur FROM fotballspraak WHERE nyestesesong <> -1 ORDER BY id');
+ my $q = $dbh->prepare('SELECT spraak, kultur FROM fotballspraak WHERE nyestesesong <> -1 AND length(kultur)=5 ORDER BY id');
$q->execute;
my @languages = ();
if ($ref->{'kultur'} eq $locale) {
$lang{'lang-with-link'} = '';
- $lang{'lang-no-link'} = $ref->{'spraak'};
+ $lang{'lang-no-link'} = Encode::decode_utf8($ref->{'spraak'});
} else {
- $lang{'a'} = $ref->{'spraak'};
+ $lang{'a'} = Encode::decode_utf8($ref->{'spraak'});
$lang{'a/href'} = sprintf "/%s/%s", $ref->{'kultur'}, $url;
$lang{'lang-no-link'} = '';
}
return \@languages;
}
-sub print_navbar {
- my ($cgi, $dbh, $locale) = @_;
- my $url = $cgi->url(-relative => 1);
+# mapping from locale to translation to use (if not found, "en" is used)
+my %translation_mapping = (
+ 'nb-NO' => 'no',
+ 'nn-NO' => 'no',
+ 'da-DK' => 'no',
+ 'sv-SE' => 'no',
+ 'nl-NL' => 'en',
+);
- print "<p style=\"font-size: smaller;\">";
-
- my $q = $dbh->prepare('SELECT spraak, kultur FROM fotballspraak WHERE nyestesesong <> -1 ORDER BY id');
- $q->execute;
+sub process_template {
+ my ($filename, $locale, $parms) = @_;
- my $first = 1;
- while (my $ref = $q->fetchrow_hashref) {
- if (!$first) {
- print " :: ";
- }
- $first = 0;
+ my $translation = $translation_mapping{$locale} // 'en';
+ my $doc;
+ if (-r "../templates/$filename.$translation.xml") {
+ $parms->{'html/xml:lang'} = $translation;
+ $doc = XML::Template::process_file("../templates/$filename.$translation.xml", $parms);
+ } else {
+ $doc = XML::Template::process_file("../templates/$filename.xml", $parms);
+ }
+ print $doc->toString;
+}
- if ($ref->{'kultur'} eq $locale) {
- printf "%s ", $ref->{'spraak'};
+sub get_ordinal {
+ my ($num, $locale) = @_;
+ my $translation = $translation_mapping{$locale} // 'en';
+
+ if ($translation eq 'no') {
+ return $num . ".";
+ } elsif ($translation eq 'en') {
+ # http://en.wikipedia.org/wiki/English_numerals#Ordinal_numbers
+ my $units = $num % 10;
+ my $tens = (($num - $units) / 10) % 10;
+ if ($tens == 1) {
+ return $num . "th";
+ } elsif ($units == 1) {
+ return $num . "st";
+ } elsif ($units == 2) {
+ return $num . "nd";
+ } elsif ($units == 3) {
+ return $num . "rd";
} else {
- printf "<a href=\"/%s/%s\">%s</a> ", $ref->{'kultur'}, $url, $ref->{'spraak'};
+ return $num . "th";
}
- }
- print "</p>\n";
+ } else {
+ die "Missing ordinal strategy for locale $locale";
+ }
}
-sub process_template {
- my ($filename, $parms) = @_;
+sub find_all_locales {
+ my $dbh = shift;
+ my $q = $dbh->prepare('SELECT kultur FROM fotballspraak WHERE nyestesesong <> -1 AND length(kultur)=5');
+ $q->execute;
- my $doc = XML::Template::process_file('../templates/' . $filename, $parms);
- print $doc->toString;
+ my @locales = ();
+ while (my $ref = $q->fetchrow_hashref) {
+ push @locales, $ref->{'kultur'};
+ }
+
+ return @locales;
}
1;