aboutsummaryrefslogtreecommitdiffstats
path: root/bin/emptyhomes/make_welsh_po
blob: 568ccdcde68adad481ddc10ba4aaaa136d4f48e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env perl

use strict;
use warnings;

# Given a translation of the Empty Homes version of the FixMyStreet .po file,
# fix it all up to go direct from FixMyStreet -> EH translation.

use POSIX;
use FindBin;
use lib "$FindBin::Bin/../../perllib";
use PoChange;

chdir("$FindBin::Bin/../../locale");

# First read in translation and match up.
open(INPO, 'cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po') or die $!;

my $state = 'start';
my $msgid = '';
my $fuzzy = 0;
my $msgstr;
my %lookup;
while (<INPO>) {
    if (m/^#, fuzzy/) {
        $fuzzy = 1;
    } elsif (m/^#/) {
        # comment or blank line
    } elsif (m/^\s+$/) {
        # blank line separates translations
        $msgid =~ s/"\n"//g;
        $lookup{$msgid} = [ $msgstr, $fuzzy ];
        $state = 'msgid';
        $msgid = "";
        $fuzzy = 0;
    } elsif ($state eq 'msgid' && (m/^msgstr "/ || m/^msgstr\[0\] "/)) {
        $msgstr = $_;
        $state = 'msgstr';
    } elsif ($state eq 'msgstr') {
        $msgstr .= $_;
    } elsif ($state eq 'msgid') {
        $msgid .= $_;
    }
}
$lookup{$msgid} = [ $msgstr, $fuzzy ];
close INPO;

mkdir("en_GB.UTF-8");
mkdir("en_GB.UTF-8/LC_MESSAGES");
mkdir("cy_GB.UTF-8");
mkdir("cy_GB.UTF-8/LC_MESSAGES");

open(MAINPO, 'FixMyStreet.po') or die;
open(OUTPO, ">cy_GB.UTF-8/LC_MESSAGES/FixMyStreet-EmptyHomes.po") or die;

print OUTPO "# AUTOMATICALLY GENERATED by make_welsh_po, do not edit\n\n";

my $buffer = "";
my $start = 0;
while(<MAINPO>) {
    if (!$start) {
        s/#, fuzzy/#/;
    }
    if (m/"Last-Translator: FULL NAME/) {
        $_ = '"Last-Translator: mysociety/bin/emptyhomes/make_welsh_po\\n"'."\n";
    }
    if (m/"PO-Revision-Date: YEAR-MO-DA/) {
        my $time = POSIX::strftime("%Y-%m-%d %H:%M%z", localtime(time()));
        $_ = '"PO-Revision-Date: '.$time.'\\n"'."\n";
    }
    if (m/"Language-Team: LANGUAGE/) {
        $_ = '"Language-Team: mySociety\\n"'."\n";
    }
    if (m/"Plural-Forms: nplurals=/) {
        $_ = '"Plural-Forms: nplurals=2; plural=n != 1;\\n"'."\n";
    }

    if (m/^#/) {
        # comment or blank line
        print OUTPO $_;
    } elsif (m/^\s+$/) {
        # blank line
        $start = 1;
        $buffer = "";
        print OUTPO $_;
    } elsif ($start && (m/^msgstr "/ || m/^msgstr\[0\] "/)) {
        # start of translated text - translate English into Empty Homes language
        my $new_buffer = PoChange::fixmystreet_to_reportemptyhomes($buffer);
        $new_buffer =~ s/"\n"//g;

        if ($lookup{$new_buffer} && $lookup{$new_buffer}[1]) {
            print OUTPO "#, fuzzy\n";
        }

        print OUTPO $buffer;
        if ($lookup{$new_buffer}) {
            print OUTPO $lookup{$new_buffer}[0];
        } else {
            if (m/^msgstr\[0\] ""/) {
                $new_buffer =~ s/^msgid "/msgstr[0] "/m;
                $new_buffer =~ s/^msgid_plural "/msgstr[1] "/m;
                $_ = <MAINPO>; # skip untranslated plural
            } else {
                $new_buffer =~ s/^msgid "/msgstr "/;
            }
            print OUTPO $new_buffer;
        }

        $buffer = "";
    } elsif (!$start) {
        print OUTPO $_;
    } else {
        $buffer .= $_;
    }
}