-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathstr2nib
executable file
·110 lines (96 loc) · 3.03 KB
/
str2nib
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
#!/usr/bin/perl
#
# Options: KEEP=1 do not dlete temporary files
# MODE=plain the input is of the form "foo" = "bar"; only
$td="/tmp/nib-$$";
system "rm -rf '$td'";
mkdir "/tmp/nib-$$" || die "cannot create temporary directory for processing";
$en=shift;
$str=shift;
$tl=shift;
if ( $en eq '' || $tl eq '' || $str eq '') {
print "\n Usage: $ARGV[0] <english.nib> <strings> <lang.nib>\n\n";
exit 1;
}
open IN, "$str" || die "cannot open strings file";
system "ibtool --generate-strings-file '$td/en.uni' '$en'" || die "converting en file to strings failed";
system "iconv -f utf-16 -t utf-8 '$td/en.uni' > '$td/en.txt'" || die "converting en strings to unicode failed";
$mode=0;
$mode=1 if ($ENV{MODE} eq 'plain');
open OUT, ">$td/strings";
while (<IN>) {
chomp;
if ($mode == 1) {
if ($e =~ /^\"(.*)\" = \"(.*)\";$/) {
$v_en = $1;
$v_tl = $2;
if ($map{$v_en} ne '' && $map{$v_en} ne $v_tl) {
print STDERR "WARNING: different translation for the same key \"$v_en\": \"$map{$v_en}\" and \"$v_tl\"\n";
} else {
$map{$v_en} = $v_tl;
}
} elsif ($_ ne '') {
print STDERR "WARNING: unknown line: $_\n";
}
} else {
if (/\/\* Entry = \"(\d+)\.([a-zA-Z0-9.]+)\"; Class = \"(.*)\"/) {
$id=$1; $item=$2; $cls=$3;
$e = <IN>;
chomp;
if ($e =~ /^\"(.*)\" = \"(.*)\";$/) {
$v_en = $1;
$v_tl = $2;
if ($map{$v_en} ne '' && $map{$v_en} ne $v_tl) {
print STDERR "WARNING: different translation for the same key \"$v_en\": \"$map{$v_en}\" and \"$v_tl\"\n";
} else {
$map{$v_en} = $v_tl;
}
# print OUT "/* Class = \"$cls\"; $item = \"$2\"; ObjectID = \"$id\"; */\n\"$id.$item\" = \"$2\";\n\n";
} else {
print STDERR "WARNING: invalid entry for $id.$item: $e\n";
}
} elsif ($_ ne '') {
print STDERR "WARNING: unknown line: $_\n";
}
}
}
close IN;
open IN, "$td/en.txt";
while (<IN>) {
chomp;
if (/^\"([a-zA-Z0-9.]+)\" = \"(.*)\";$/) {
if ($map{$2}) {
print OUT "\"$1\" = \"$map{$2}\";\n";
$used{$2} = 1;
} else {
print STDERR "WARNING: translation for \"$2\" not found.\n";
print OUT "$_\n";
}
if (defined $cls) { $hc{$1} = $cls; undef $cls; }
} elsif (/^\/\* Class = \"(.*?)\"; /) {
print OUT "$_\n";
$cls = $1;
} elsif ($_ eq '') {
print OUT "\n";
undef $cls;
} else {
print STDERR "WARNING: unknown line: $_\n";
print OUT "$_\n";
undef $cls;
}
}
close IN;
system "iconv -f utf-8 -t utf-16 '$td/strings' > '$td/strings.uni'" || die "converting strings to unicode failed";
if ($ENV{STOP} ne '') {
print "STOP requested, output is in $td\n";
exit 0;
}
# system "ibtool --previous-file '$en' --incremental-file '$lo' --strings-file '$td/strings.uni' --localize-incremental --write '$tl' '$en'" || die "converting lang file to strings failed";
if ( -e "$td/strings.uni" ) {
system "ibtool --strings-file '$td/strings.uni' --write '$tl' '$en'" || die "generating lang nib failed";
}
if ($ENV{KEEP} ne '') {
print STDERR "KEEP set, leaving all files in $td\n";
exit 0;
}
system "rm -rf '$td'";