X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fcommon.pm;h=15c698bb539bd3daf3f7ef5d5f9664d16d043546;hb=fde909c294de9806dd6337f5acb0ed87c41557c6;hp=6ad6ae403e04d70459994625a98e8db2ab100719;hpb=238f92e411b064cb85c1dee579b7dcaea5e99499;p=wloh diff --git a/include/common.pm b/include/common.pm index 6ad6ae4..15c698b 100644 --- a/include/common.pm +++ b/include/common.pm @@ -35,6 +35,12 @@ sub get_locale { 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) = @_; @@ -54,7 +60,7 @@ sub get_navbar { print "

"; - 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 = (); @@ -69,9 +75,9 @@ sub get_navbar { 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'} = ''; } @@ -81,36 +87,66 @@ sub get_navbar { 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 "

"; - - 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 "%s ", $ref->{'kultur'}, $url, $ref->{'spraak'}; + return $num . "th"; } - } - print "

\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;