]> git.deb.at Git - deb/packages.git/blobdiff - bin/parse-debtags-voc
Add translation support for debtags
[deb/packages.git] / bin / parse-debtags-voc
index b6391564402db3bde8a04d621cfe8273ccff9f7c..7e1453c4200b1c348b258fdaef2d007719b29fae 100755 (executable)
@@ -22,16 +22,18 @@ use lib './lib';
 
 $| = 1;
 
+use POSIX;
 use DB_File;
 use File::Path;
 use Data::Dumper;
 use HTML::Entities;
 use URI::Escape;
+use Locale::gettext;
 
 use Deb::Versions;
 use Packages::Template;
-use Packages::Config qw( $TOPDIR );
-use Packages::CGI;
+use Packages::Config qw( $TOPDIR @LANGUAGES $LOCALES);
+use Packages::I18N::Locale;
 &Packages::Config::init( './' );
 my $debtagsdir = "$TOPDIR/files/debtags";
 my $wwwdir = "$TOPDIR/www/about";
@@ -44,6 +46,23 @@ delete $ENV{'LANGUAGE'};
 delete $ENV{'LANG'};
 delete $ENV{'LC_ALL'};
 delete $ENV{'LC_MESSAGES'};
+bindtextdomain ( 'debtags', $LOCALES );
+textdomain( 'debtags' );
+
+sub process_desc {
+    my ($desc) = @_;
+
+    if ($desc) {
+       $desc = encode_entities($desc);
+
+       $desc =~ s,((ftp|http|https)://[\S~-]+?/?)((\&gt\;)?[)]?[']?[:.\,]?(\s|$)),<a href=\"$1\">$1</a>$3,go; # syntax highlighting -> '];
+       $desc =~ s/\A //o;
+       $desc =~ s/\n /\n/sgo;
+       $desc =~ s/\n.\n/\n<p>\n/go;
+       $desc =~ s/(((\n|\A) [^\n]*)+)/\n<pre>$1\n<\/pre>/sgo;
+    }
+    return $desc;
+}
 
 print "Parsing Vocabulary...\n";
 tie %voc_db, "DB_File", "$debtagsdir/vocabulary.db.new",
@@ -72,18 +91,23 @@ while (<VOC>) {
        warn "Duplicated key found: $voc_key\n";
        next;
     }
-    my ($sdesc,$ldesc) = split /\n/, encode_entities($data{description}), 2;
-
-    if ($ldesc) {
-       $ldesc =~ s,((ftp|http|https)://[\S~-]+?/?)((\&gt\;)?[)]?[']?[:.\,]?(\s|$)),<a href=\"$1\">$1</a>$3,go; # syntax highlighting -> '];
-       $ldesc =~ s/\A //o;
-       $ldesc =~ s/\n /\n/sgo;
-       $ldesc =~ s/\n.\n/\n<p>\n/go;
-       $ldesc =~ s/(((\n|\A) [^\n]*)+)/\n<pre>$1\n<\/pre>/sgo;
-    }
-    $data{html_description} = [ $sdesc, $ldesc||"" ];
+    my ($sdesc,$ldesc) = split /\n/, $data{description}, 2;
 
+    $data{html_description} = [ encode_entities($sdesc), process_desc($ldesc)||"" ];
     $voc_db{$voc_key} = $sdesc || "";
+
+    foreach my $lang (@LANGUAGES) {
+       my $locale = get_locale( $lang );
+       setlocale ( LC_ALL, $locale ) or do {
+           warn "couldn't set locale ($lang/$locale)\n";
+           next;
+       };
+
+       my $sdesc_trans = dgettext( 'debtags', $sdesc );
+       $voc_db{"$voc_key-$lang"} = $sdesc_trans
+           if $sdesc_trans and $sdesc_trans ne $sdesc;
+    }
+
     $voc{$voc_key} = \%data;
 }