mirror of
https://github.com/coolsnowwolf/luci
synced 2025-01-07 07:06:41 +08:00
84 lines
1.2 KiB
Perl
Executable File
84 lines
1.2 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
@ARGV <= 2 || die "Usage: $0 [<po directory>] [<file pattern>]\n";
|
|
|
|
my $source = shift @ARGV;
|
|
my $pattern = shift @ARGV || '*.po';
|
|
|
|
sub read_header
|
|
{
|
|
my $file = shift || return;
|
|
local $/;
|
|
|
|
open P, "< $file" || die "open(): $!";
|
|
my $data = readline P;
|
|
close P;
|
|
|
|
$data =~ /
|
|
^ (
|
|
msgid \s "" \n
|
|
msgstr \s "" \n
|
|
(?: " [^\n]+ " \n )+
|
|
\n )
|
|
/mx;
|
|
|
|
return $1;
|
|
}
|
|
|
|
sub write_header
|
|
{
|
|
my $file = shift || return;
|
|
my $head = shift || return;
|
|
local $/;
|
|
|
|
open P, "< $file" || die "open(): $!";
|
|
my $data = readline P;
|
|
close P;
|
|
|
|
$data =~ s/
|
|
^ (
|
|
msgid \s "" \n
|
|
msgstr \s "" \n
|
|
(?: " [^\n]+ " \n )+
|
|
\n )
|
|
/$head/mx;
|
|
|
|
open P, "> $file" || die "open(): $!";
|
|
print P $data;
|
|
close P;
|
|
}
|
|
|
|
my @dirs;
|
|
|
|
if( ! $source )
|
|
{
|
|
@dirs = glob("./*/*/po/");
|
|
}
|
|
else
|
|
{
|
|
@dirs = ( $source );
|
|
}
|
|
|
|
foreach my $dir (@dirs)
|
|
{
|
|
if( open F, "find $dir -type f -name '$pattern' |" )
|
|
{
|
|
while( chomp( my $file = readline F ) )
|
|
{
|
|
my ( $basename ) = $file =~ m{.+/([^/]+)\.po$};
|
|
|
|
if( -f "$dir/templates/$basename.pot" )
|
|
{
|
|
my $head = read_header($file);
|
|
|
|
printf "Updating %-40s", $file;
|
|
system("msgmerge", "-U", "-N", $file, "$dir/templates/$basename.pot");
|
|
|
|
write_header($file, $head);
|
|
}
|
|
}
|
|
|
|
close F;
|
|
}
|
|
}
|