]> git.sesse.net Git - wloh/blobdiff - include/common.pm
Remove dead function print_navbar().
[wloh] / include / common.pm
index 6ad6ae403e04d70459994625a98e8db2ab100719..15c698bb539bd3daf3f7ef5d5f9664d16d043546 100644 (file)
@@ -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 "<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 = ();
@@ -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 "<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;