8 sub pot_creation_date
{
9 return strftime
"%Y-%m-%d %H:%M:%S +0000", gmtime();
14 my (%msgs, @uses, %comment, %loc);
15 my $translator_comment;
17 if (m!(/[/*])\s*(TRANSLATORS:.*?)\s*\z!) {
18 my ($comment_type, $comment) = ($1, $2);
19 if ($comment_type eq '/*') {
20 while ($comment !~ s!\s*\*/\z!! && defined($_ = <ARGV
>)) {
21 if (m!^\s*\*?\s*(.*?)\s*\z!) {
22 # */ on a line by itself results in '/' for $1.
28 # // comment - see if there are further // comments immediately
30 while (defined($_ = <ARGV
>) && m!//\s*(.*?)\s*\z!) {
35 if (defined $translator_comment) {
36 print STDERR
"$ARGV:$.: Ignored TRANSLATORS comment: $translator_comment\n";
38 $translator_comment = $comment;
42 while (m!/\*(.*?)\*/(\d+)\b!g) {
43 my ($msg, $msgno) = ($1, $2);
44 # Handle there being a comment before the comment with the message in.
46 if (exists $msgs{$msgno}) {
47 if ($msgs{$msgno} ne $msg) {
48 print STDERR
"$ARGV:$.: Mismatch for message number $msgno:\n";
49 print STDERR
"$msgs{$msgno}\n$msg\n";
54 if (defined $translator_comment) {
55 if (exists $comment{$msgno} && $comment{$msgno} ne $translator_comment) {
56 print STDERR
"Different TRANSLATOR comments for message #$msgno\n";
57 print STDERR
"${$uses[$msgno]}[0]: $comment{$msgno}\n";
58 print STDERR
"$ARGV:$.: $translator_comment\n";
60 $comment{$msgno} = $translator_comment;
61 undef $translator_comment;
63 push @
{$uses[$msgno]}, "$ARGV:$.";
66 # Reset $. for each input file.
70 my $num_list = Locale
::PO
->load_file_asarray("survex.pot");
72 foreach my $po_entry (@
{$num_list}) {
74 my $ref = $po_entry->reference;
75 if (defined $ref && $ref =~ /^n:(\d+)$/m) {
80 if ($po_entry->msgid eq '""') {
81 chomp(my $header = $po_entry->dump);
86 # Survex translation template.
87 # Copyright (C) YEAR COPYRIGHT HOLDERS
88 # This file is distributed under the same licence as Survex.
92 "Project-Id-Version: survex\\n"
93 "Report-Msgid-Bugs-To: olly\@survex.com\\n"
94 "POT-Creation-Date: ${\(pot_creation_date)}\\n"
95 "PO-Revision-Date: YEAR-MO-DA HO:MI:SE +ZONE\\n"
96 "Language-Team: LANGUAGE <LL\@li.org>\\n"
97 "MIME-Version: 1.0\\n"
98 "Content-Type: text/plain; charset=utf-8\\n"
99 "Content-Transfer-Encoding: 8bit\\n"
103 if (exists $msgs{$msgno}) {
104 $msg = $msgs{$msgno};
105 delete $msgs{$msgno};
107 print STDERR
"../lib/survex.pot:", $po_entry->loaded_line_number, ": Message number $msgno is in survex.pot but not found in source - preserving\n" unless $po_entry->obsolete;
108 $msg = $po_entry->dequote($po_entry->msgid);
110 if (exists $comment{$msgno}) {
111 my $new = $comment{$msgno};
112 my $old = $po_entry->automatic;
113 $po_entry->automatic($new);
118 print STDERR
"Comment for message #$msgno changed:\n";
119 print STDERR
"../lib/survex.pot:", $po_entry->loaded_line_number, ": [$old]\n";
120 print STDERR
"${$uses[$msgno]}[0]: [$new]\n";
124 if (defined $po_entry->automatic) {
125 if (!exists $comment{$msgno}) {
126 my $fake_err = ": Comment for message #$msgno not in source code\n";
127 if ($msgno ne '' && exists($uses[$msgno])) {
128 print STDERR
join($fake_err, "../lib/survex.pot:".$po_entry->loaded_line_number, @
{$uses[$msgno]}), $fake_err if exists($uses[$msgno]);
129 my $x = $po_entry->automatic;
131 print STDERR
" /* $x */\n";
133 # Currently unused message.
134 # print STDERR $fake_err;
135 # my $x = $po_entry->automatic;
136 # $x =~ s/\n/\n * /g;
137 # print STDERR " /* $x */\n";
140 my $automatic = "\n" . $po_entry->automatic;
141 $automatic =~ s/\n/\n#. /g;
142 while ($automatic =~ s/\n#. \n/\n#.\n/g) { }
145 if ($msgno =~ /^\d+$/) {
146 for (@
{$uses[$msgno]}) {
149 print "\n#: n:$msgno";
151 print "\n#, c-format" if $msg =~ /\%[a-z0-9.]/;
152 if ($msg =~ s/(?:^|[^\\])"/\\"/g) {
153 print STDERR
"Escaping unescaped \" in message number $msgno\n";
156 print "#~ " if $po_entry->obsolete;
157 print "msgid \"$msg\"\n";
158 print "#~ " if $po_entry->obsolete;
159 print "msgstr \"\"\n";
162 for my $msgno (sort keys %msgs) {
163 next if ($msgno == 0 || $msgno >= 1000);
164 print STDERR
"New message number $msgno\n";
165 for (@
{$uses[$msgno]}) {
168 my $msg = $msgs{$msgno};
169 print "\n#: n:$msgno";
170 print "\n#, c-format" if $msg =~ /\%[a-z0-9.]/;
171 if ($msg =~ s/(?:^|[^\\])"/\\"/g) {
172 print STDERR
"Escaping unescaped \" in message number $msgno\n";
174 print "\nmsgid \"$msg\"\n";
175 print "msgstr \"\"\n";