mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
New script to update translator-credits.
See POD for usage instructions.
This commit is contained in:
71
util/extract-translators.pl
Normal file
71
util/extract-translators.pl
Normal file
@@ -0,0 +1,71 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
my $start = 0;
|
||||
my $credits = 0;
|
||||
my $extract_re = qr{^# ([-[:alpha:]\d_., ]+)(?: [(<].*[)>])*, ([-\d, ]+)};
|
||||
my $credits_re = qr(^msgid "translator-credits"$);
|
||||
my %translators = ();
|
||||
my $infile = shift;
|
||||
my $outfile = $infile . ".new";
|
||||
open(my $INFILE, "<", $infile);
|
||||
open(my $OUTFILE, ">", $outfile);
|
||||
|
||||
while (<$INFILE>) {
|
||||
if ($_ =~ $extract_re && $start < 1) {
|
||||
$start++;
|
||||
}
|
||||
if ($start == 1 && $_ !~ $extract_re) {
|
||||
$start++;
|
||||
}
|
||||
|
||||
if ($start == 1) {
|
||||
my $input = $_;
|
||||
utf8::decode($input);
|
||||
$input =~ $extract_re;
|
||||
unless ($1) {
|
||||
print $OUTFILE $_;
|
||||
next;
|
||||
}
|
||||
my $name = $1;
|
||||
utf8::encode($name);
|
||||
if (exists ($translators{$name})) {
|
||||
push @{$translators{$name}}, split(", ", $2);
|
||||
} else {
|
||||
my @years = split(", ", $2);
|
||||
$translators{$name} = \@years;
|
||||
}
|
||||
}
|
||||
if ($_ =~ $credits_re && %translators) {
|
||||
my $translators_str;
|
||||
$credits++;
|
||||
print $OUTFILE $_;
|
||||
print $OUTFILE "msgstr \"\"\n";
|
||||
foreach my $translator (sort(keys(%translators))) {
|
||||
my $dates = join(", ", sort(@{$translators{$translator}}));
|
||||
$translators_str .= "$translator: $dates; ";
|
||||
}
|
||||
if (defined $translators_str) {
|
||||
print $OUTFILE "\"$_;\"\n" for map substr($_, 0, 72), $translators_str =~ m[(.{1,72})(?:; |$)]g;
|
||||
print $OUTFILE "\"\n\n";
|
||||
}
|
||||
}
|
||||
$credits++ if ($credits && substr($_, 0, 1) eq "#");
|
||||
next if ($credits == 1);
|
||||
print $OUTFILE $_
|
||||
}
|
||||
close($INFILE);
|
||||
close($OUTFILE);
|
||||
rename $outfile, $infile;
|
||||
=begin
|
||||
perl extract-translators.pl filename
|
||||
|
||||
Finds comments at the beginning of the po file of the form
|
||||
Name email-address? number
|
||||
Where email-address is optional and number is one or more four-digit years separated by commas or hyphens. The name and years are extracted and replace the msgstr for msgid "translator-credits".
|
||||
|
||||
Run this command in a shell for loop:
|
||||
for i in po/*.po; do perl extract-translators.pl $i; done
|
||||
Then review the changes and commit them.
|
||||
=end
|
||||
Reference in New Issue
Block a user