Files
android_development/tools/findunused/findunusedtranslations
Eric Fischer 50283d7666 Script to strip out unused translations when you change the base strings.xml.
It doesn't really know XML so it is reliant on the translation files
being straightforwardly formatted, but it seems to work.
2009-06-24 15:51:25 -07:00

104 lines
2.3 KiB
Perl
Executable File

#!/usr/bin/perl
sub usage {
print STDERR "Usage: findunusedtranslations values/strings.xml\n";
print STDERR "\n";
print STDERR "Will read values/strings.xml and rewrite\n";
print STDERR "values-xx/strings.xml and values-xx-rYY/strings.xml\n";
print STDERR "files to remove strings that no longer appear in the\n";
print STDERR "base strings file.\n";
exit 1;
}
if ($#ARGV != 0) {
usage();
}
unless ($ARGV[0] =~ /^(.*)\/values([^\/]*)\/(.*\.xml)/) {
print STDERR "Bad format for $ARGV[0]\n";
usage();
}
unless (-f $ARGV[0]) {
print STDERR "$0: $ARGV[0]: No such file\n";
}
$prefix = $1;
$values = $2;
$suffix = $3;
if ($values =~ /^(-mcc[^-]*)*(-mnc[^-]*)*(.*)$/) {
$pattern1 = "$prefix/values$1$2-??$3/$suffix";
$pattern2 = "$prefix/values$1$2-??-r??$3/$suffix";
} else {
$pattern1 = "$prefix/values-??$values/$suffix";
$pattern2 = "$prefix/values-??-r??$values/$suffix";
}
@matches = (glob($pattern1), glob($pattern2));
open(IN, "<$ARGV[0]");
while (<IN>) {
if (/<string [^>]*name="([^"]*)"/) {
$string{$1} = 1;
}
if (/<string-array [^>]*name="([^"]*)"/) {
$stringarray{$1} = 1;
}
if (/<plurals [^>]*name="([^"]*)"/) {
$plurals{$1} = 1;
}
}
close(IN);
for $match (@matches) {
print "Rewriting $match\n";
$suppress = 0;
$text = "";
$changes = 0;
open(IN, "<$match");
while (<IN>) {
if (/<string [^>]*name="([^"]*)"/) {
if ($string{$1} == 0) {
$suppress = 1;
$changes = 1;
}
}
if (/<string-array [^>]*name="([^"]*)"/) {
if ($stringarray{$1} == 0) {
$suppress = 1;
$changes = 1;
}
}
if (/<plurals [^>]*name="([^"]*)"/) {
if ($plurals{$1} == 0) {
$suppress = 1;
$changes = 1;
}
}
$text .= $_ unless ($suppress);
if (/<\/string/) {
$suppress = 0;
}
if (/<\/string-array/) {
$suppress = 0;
}
if (/<\/plurals/) {
$suppress = 0;
}
}
close(IN);
if ($changes) {
open(OUT, ">$match");
print OUT $text;
close(OUT);
} else {
print "(no changes)\n";
}
}