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 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
#!/usr/bin/perl
#
# Author: Petter Reinholdtsen
# Date: 2003-09-27
#
# Extract language options for debian-installer
use strict;
use warnings;
my $list = shift;
my $listl10n = shift;
my $template = shift;
my $templatein = shift;
my $debug = 0;
my $show_locales = 1;
my %locales;
sub get_language_names {
my $list = shift;
my $level = shift;
my @names;
print "Loading $list for display level $level\n" if ($debug);
open(L, "< $list") || die "Unable to read $list";
while (<L>) {
print if ($debug);
chomp;
next if m/^\#/;
my ($name, $lev, $locale, ) = split(/;/);
push(@names, $name) if ("$lev" <= "$level");
$locale =~ s/@.+//;
# Drop modifier and charset part of locale
$locale =~ s/[@.].+$//;
$locales{$name} = $locale;
}
close(L);
return @names;
}
sub get_translations {
my ($listl10n, @names) = @_;
my %translations;
print "Loading $listl10n\n" if ($debug);
open(L, "< $listl10n") || die "Unable to read $listl10n";
while (<L>) {
print if ($debug);
chomp;
next if m/^\#/;
my ($name, $translation) = split(/: /);
$translation =~ s/,/\\,/g;
if ($show_locales && defined $locales{$name}) {
# C. Perrier 2004/05/09 change layout
#
# Layout 1 : xx_YY : Translated name
# This is beta4 layout
# $translation = $locales{$name}.
# (" " x (5 - length($locales{$name}))).
# " - $name - $translation";
# Layout 2 : English name - Translated name
# Pro : "natural" sorting
# Con : English looks useless
$translation = $name .
(" " x (22 - length($name))).
"- $translation";
# Layout 3 : Translated name
# Pro : no useless English
# Con : no sorting....giving a confusing screen
# no change to $translation
# $translation = $translation;
}
$translations{$name} = $translation;
}
close(L);
return %translations;
}
my @languagenames_ascii = get_language_names($list,0);
my @languagenames_latin = get_language_names($list,1);
my @languagenames_fb = get_language_names($list,3);
my @languagenames_all = get_language_names($list,4);
my %translationmap = get_translations($listl10n);
sub order_trans {
my ($a_locale)=$translationmap{$a}=~/^(\w+)/;
my ($b_locale)=$translationmap{$b}=~/^(\w+)/;
$a_locale.="_ZZ" if length $a_locale == 2;
$b_locale.="_ZZ" if length $b_locale == 2;
return $a_locale cmp $b_locale;
}
#Sorts languages, making sure that the C locale is listed first
sub sort_C_first {
my @full_list = @_;
my @C_locale = grep /^C$/, @full_list;
my @other_locales = grep !/^C$/, @full_list;
my @new_list = sort order_trans @other_locales;
unshift @new_list, @C_locale;
return @new_list;
}
my @translations_ascii;
my @translations_latin;
my @translations_fb;
my @translations_all;
my @sortedlanguagenames_ascii;
my @sortedlanguagenames_latin;
my @sortedlanguagenames_fb;
my @sortedlanguagenames_all;
for my $name (sort_C_first @languagenames_ascii) {
if (exists $translationmap{$name}) {
push(@translations_ascii, $translationmap{$name});
push(@sortedlanguagenames_ascii, $name);
} else {
print "Missing $name in $listl10n\n";
}
}
for my $name (sort_C_first @languagenames_latin) {
if (exists $translationmap{$name}) {
push(@translations_latin, $translationmap{$name});
push(@sortedlanguagenames_latin, $name);
} else {
print "Missing $name in $listl10n\n";
}
}
for my $name (sort_C_first @languagenames_fb) {
if (exists $translationmap{$name}) {
push(@translations_fb, $translationmap{$name});
push(@sortedlanguagenames_fb, $name);
} else {
print "Missing $name in $listl10n\n";
}
}
for my $name (sort_C_first @languagenames_all) {
if (exists $translationmap{$name}) {
push(@translations_all, $translationmap{$name});
push(@sortedlanguagenames_all, $name);
} else {
print "Missing $name in $listl10n\n";
}
}
my $langstr_ascii=join(", ", @sortedlanguagenames_ascii);
my $nativemessages_ascii=join(", ", @translations_ascii);
my $langstr_latin=join(", ", @sortedlanguagenames_latin);
my $nativemessages_latin=join(", ", @translations_latin);
my $langstr_fb=join(", ", @sortedlanguagenames_fb);
my $nativemessages_fb=join(", ", @translations_fb);
my $langstr_all=join(", ", @sortedlanguagenames_all);
my $nativemessages_all=join(", ", @translations_all);
open(TIN, "< $templatein") || die "Unable to read $templatein";
open(TOUT, "> $template") || die "Unable to write $template";
while (<TIN>) {
s/\@languagenames_ascii\@/$langstr_ascii/;
s/\@nativemessages_ascii\@/$nativemessages_ascii/;
s/\@languagenames_latin\@/$langstr_latin/;
s/\@nativemessages_latin\@/$nativemessages_latin/;
s/\@languagenames_fb\@/$langstr_fb/;
s/\@nativemessages_fb\@/$nativemessages_fb/;
s/\@languagenames_all\@/$langstr_all/;
s/\@nativemessages_all\@/$nativemessages_all/;
print TOUT;
}
close(TOUT) || warn;
close(TIN) || warn;
|