]> git.sesse.net Git - wloh/blobdiff - include/common.pm
Support translation of templates via po4a. Add an English translation as an example.
[wloh] / include / common.pm
index 6ad6ae403e04d70459994625a98e8db2ab100719..7ffaeeee0e8fc7ab4cae055559e7621a81ef3675 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) = @_;
 
@@ -106,10 +112,26 @@ sub print_navbar {
        print "</p>\n";
 }
 
+# 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',
+);
+
 sub process_template {
-       my ($filename, $parms) = @_;
+       my ($filename, $locale, $parms) = @_;
 
-       my $doc = XML::Template::process_file('../templates/' . $filename, $parms);
+       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;
 }