]> git.treefish.org Git - fex.git/blob - locale/debian_translate
Original release 20160328
[fex.git] / locale / debian_translate
1 #!/usr/bin/perl -w
2
3 # translate english F*EX files into locale languange, debian special
4
5 use File::Basename;
6 use File::Copy;
7
8 @trfiles = qw(
9   lib/fex.pp
10   cgi-bin/foc
11   cgi-bin/fop
12   cgi-bin/fuc
13   cgi-bin/fup
14   cgi-bin/fur
15   cgi-bin/rup
16   cgi-bin/pup
17 );
18
19 @cpfiles = qw(
20   htdocs/index.html
21   htdocs/FAQ.html
22   lib/fup.pl
23   lang.html
24 );
25
26 $source = shift;  
27 $FEXHOME = shift;
28 $dest = shift;
29
30 $tr = "$source/locale/translations";
31
32 mkdirp($dest);
33 unless (-l "$dest/english") {
34   symlink '..',"$dest/english" 
35     or die "$0: cannot symlink $dest/english - $!\n";
36 }
37
38 foreach $lang (glob "$source/locale/*/lib/fup.pl") {
39   $lang =~ s:.*/locale/::;
40   $lang =~ s:/.*::;
41   next if $lang eq 'english';
42   next if $lang =~ /_$/;
43
44   print "\n$lang:\n";
45   open $tr,$tr or die "$0: cannot open $tr - $!\n";
46   %T = ();
47   $n = $ll = 0;
48
49   while (<$tr>) {
50     $n++;
51     last if /^\s*$/;
52     if (/^#\s*([\w-]+):/ and $lang eq $1) {
53       $ll = $n;
54     }
55   }
56
57   next unless $ll;
58
59   while (<$tr>) {
60     next if /^#/;
61     next if /^\s*$/;
62     chomp;
63     unless (/[a-z]/i) {
64       die "$0: syntax error in $tr line $. : no text\n";
65     }
66     $e = $_;
67     for my $l (2 .. $ll) { 
68       $_ = <$tr>||'';
69       chomp;
70       unless (/[a-z]/i) {
71         die "$0: syntax error in $tr line $. : no text\n";
72       }
73     }
74     $T{$e} = $_;
75     while (<$tr>) { last if /^\s*$/ }
76   }
77   
78   close $tr;
79   @E = sort {length $b <=> length $a} keys %T;
80
81   foreach $file (@trfiles) {
82     local $/;
83     mkdirp("$dest/$lang/".dirname($file));
84     $fe = "$source/$file";
85     $ft = "$dest/$lang/$file";
86     open $fe,"<$fe" or die "$0: cannot read $fe - $!\n";
87     open $ft,">$ft" or die "$0: cannot write $ft - $!\n";
88     $_ = <$fe>;
89     close $fe;
90     foreach $e (@E) {
91       s/\Q$e/$T{$e}/g;
92     }
93     print {$ft} $_;
94     close $ft;
95     chmod((stat $fe)[2],$ft);
96     print "$ft written\n";
97   }
98
99   foreach $file (@cpfiles) {
100     $fs = "$source/locale/$lang/$file";
101     $fd = "$dest/$lang/$file";
102     mkdirp(dirname($fd));
103     $fd .= '_new' if -f $fd;
104     if (copy($fs,$fd)) {
105       chmod((stat $fs)[2],$fd);
106       print "$fd written\n";
107     }
108   }
109
110   foreach $fs (qw(dop fex.ph)) {
111     $fd = "$dest/$lang/lib/$fs";
112     symlink "$FEXHOME/lib/$fs",$fd or die "$0: cannot symlink $fd - $!\n";
113     print "$fd linked\n";
114   }
115 }
116
117 # emulate mkdir -p
118 sub mkdirp {
119   my $dir = shift;
120   my $pdir;
121   
122   return if -d $dir;
123   $dir =~ s:/+$::;
124   die "$0: cannot mkdir /\n" unless $dir;
125   $pdir = $dir;
126   if ($pdir =~ s:/[^/]+$::) {
127     mkdirp($pdir) unless -d $pdir;
128   }
129   unless (-d $dir) {
130     mkdir $dir,0755 or die "$0: mkdir $dir - $!\n";
131   }
132 }