211 lines
4.2 KiB
Text
211 lines
4.2 KiB
Text
|
#!/usr/bin/env perl
|
||
|
|
||
|
use strict;
|
||
|
|
||
|
my $progname=$0; $progname = $& if $progname =~ m,[^/]+$,;
|
||
|
|
||
|
my %PREFIX; # used to search for prefix numbers
|
||
|
my %ISOCODE; # used to search for iso codes
|
||
|
my %LANGUAGE; # used to search for language names
|
||
|
|
||
|
#=======================================================================
|
||
|
# initialisation code - stuff the DATA into the CODES hash
|
||
|
#=======================================================================
|
||
|
sub init {
|
||
|
|
||
|
my $prefix;
|
||
|
my $code;
|
||
|
my $name;
|
||
|
|
||
|
|
||
|
while (<DATA>)
|
||
|
{
|
||
|
next unless /\S/;
|
||
|
chop;
|
||
|
($prefix, $code, $name ) = split(/:/, $_, 3);
|
||
|
$PREFIX{$prefix} = $prefix;
|
||
|
$PREFIX{$code} = $prefix;
|
||
|
$PREFIX{$name} = $prefix;
|
||
|
|
||
|
$ISOCODE{$prefix} = $code;
|
||
|
$ISOCODE{$code} = $code;
|
||
|
$ISOCODE{$name} = $code;
|
||
|
|
||
|
$LANGUAGE{$prefix} = $name;
|
||
|
$LANGUAGE{$code} = $name;
|
||
|
$LANGUAGE{$name} = $name;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
#=======================================================================
|
||
|
# usage - error message
|
||
|
#=======================================================================
|
||
|
sub usage {
|
||
|
my $errmsg = shift;
|
||
|
my $errcode = shift;
|
||
|
print STDERR "$progname: $errmsg\n" if $errmsg;
|
||
|
print STDERR "$progname: Converts between prefix codes, iso codes and langnames\n";
|
||
|
print STDERR " Usage: $progname (-i|-l|-p|-h) <code>|all\n";
|
||
|
print STDERR " -i <code>: convert prefix to iso code (ex: 03 -> pt)\n";
|
||
|
print STDERR " -l <code>: convert iso code to language name (ex: pt -> portuguese)\n";
|
||
|
print STDERR " -p <code>: convert iso code to prefix (ex: pt -> 03)\n";
|
||
|
print STDERR " the code can either be an iso code, a prefix or even a language name\n";
|
||
|
print STDERR " The special code \"all\" asks for all possible values.\n\n";
|
||
|
print STDERR " -h : print this help\n";
|
||
|
exit $errcode;
|
||
|
}
|
||
|
|
||
|
#=======================================================================
|
||
|
# main -
|
||
|
#=======================================================================
|
||
|
init();
|
||
|
|
||
|
my ($LanguageCode, $LanguageMap);
|
||
|
|
||
|
while ($ARGV[0] =~ /^-/) {
|
||
|
$_ = shift;
|
||
|
if (m/^-i/) {
|
||
|
$LanguageMap = \%ISOCODE;
|
||
|
}
|
||
|
elsif (m/^-l/) {
|
||
|
$LanguageMap = \%LANGUAGE;
|
||
|
}
|
||
|
elsif (m/^-p/) {
|
||
|
$LanguageMap = \%PREFIX;
|
||
|
}
|
||
|
elsif (m/^-h/) {
|
||
|
usage("",0);
|
||
|
}
|
||
|
else {
|
||
|
usage ("unknown option $_",1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
usage ("no operation specified on command line",1)
|
||
|
if (!$LanguageMap);
|
||
|
|
||
|
usage ("no language code specified on command line",1)
|
||
|
if (!($LanguageCode = shift));
|
||
|
|
||
|
if ($LanguageCode =~ (m/^all$/)) {
|
||
|
# Asked for all codes
|
||
|
my $old="";
|
||
|
foreach my $key (sort values %$LanguageMap) {
|
||
|
if ($key ne $old) {
|
||
|
print "$key ";
|
||
|
$old=$key;
|
||
|
}
|
||
|
}
|
||
|
print "\n";
|
||
|
exit 0;
|
||
|
}
|
||
|
|
||
|
usage ("no mapping found for $LanguageCode\n",1)
|
||
|
if (!(%$LanguageMap->{$LanguageCode}));
|
||
|
|
||
|
print $LanguageMap->{$LanguageCode}, "\n";
|
||
|
|
||
|
1;
|
||
|
|
||
|
# keep third column names here with openoffice-dir/share/*/<long lang name>/
|
||
|
|
||
|
__DATA__
|
||
|
:be:belarussian
|
||
|
:bg:bulgarian
|
||
|
:bn:bengali
|
||
|
:bs:bosnian
|
||
|
:en-GB:english_british
|
||
|
:gu:gujarati
|
||
|
:hr:croatian
|
||
|
:km:khmer
|
||
|
:ku:kurdish
|
||
|
:pa-IN:punjabi
|
||
|
:rw:kinarwanda
|
||
|
:xh:xhosa
|
||
|
:lt:lithuanian
|
||
|
:ne:nepali
|
||
|
:vi:vietnamese
|
||
|
:nso:northern_sotho
|
||
|
:ss:swazi
|
||
|
:sr:serbian
|
||
|
:ve:venda
|
||
|
:ts:tsonga
|
||
|
:st:southern_sotho
|
||
|
:tn:tswana
|
||
|
:br:breton
|
||
|
:ga:gaelic
|
||
|
:gd:scottish_gaelic
|
||
|
:th:thai
|
||
|
:hi:hindi
|
||
|
:bs-BA:bosnian
|
||
|
:en-ZA:english_southafrican
|
||
|
:mk:macedonian
|
||
|
:as:assamese
|
||
|
:ml:malayalam
|
||
|
:mr:marathi
|
||
|
:or:oriya
|
||
|
:ur:urdu
|
||
|
:fa:farsi
|
||
|
:lv:latvian
|
||
|
:nr:ndebele
|
||
|
:ne:nepalese
|
||
|
:sh:serbian
|
||
|
:te:telugu
|
||
|
:ta:tamil
|
||
|
:tg:tajik
|
||
|
:ka:georgian
|
||
|
:eo:esperanto
|
||
|
:uk:ukrainian
|
||
|
:kk:kazahk
|
||
|
:dz:dzongkha
|
||
|
:kn:kannada
|
||
|
:gl:galician
|
||
|
:uz:uzbek
|
||
|
:oc:occitan
|
||
|
:ro:romanian
|
||
|
:eu:basque
|
||
|
:mn:mongolian
|
||
|
:om:oromo
|
||
|
:bo:tibetan
|
||
|
:ast:asturian
|
||
|
:is:icelandic
|
||
|
:ug:uighur
|
||
|
:si:sinhala
|
||
|
:id:indonesian
|
||
|
:my:burmese
|
||
|
01:en-US:english_american
|
||
|
03:pt:portuguese
|
||
|
07:ru:russian
|
||
|
26:ns:northernsotho
|
||
|
27:af:afrikaans
|
||
|
28:zu:zulu
|
||
|
30:el:greek
|
||
|
31:nl:dutch
|
||
|
33:fr:french
|
||
|
34:es:spanish
|
||
|
35:fi:finnish
|
||
|
36:hu:hungarian
|
||
|
37:ca:catalan
|
||
|
39:it:italian
|
||
|
42:cs:czech
|
||
|
43:sk:slovak
|
||
|
45:da:danish
|
||
|
46:sv:swedish
|
||
|
47:nb:norwegian
|
||
|
48:pl:polish
|
||
|
49:de:german
|
||
|
50:sl:slovenian
|
||
|
53:cy:welsh
|
||
|
55:pt-BR:portuguese_brazilian
|
||
|
77:et:estonian
|
||
|
79:nn:norwegian_nynorsk
|
||
|
81:ja:japanese
|
||
|
82:ko:korean
|
||
|
86:zh-CN:chinese_simplified
|
||
|
88:zh-TW:chinese_traditional
|
||
|
90:tr:turkish
|
||
|
91:hi:hindi
|
||
|
96:ar:arabic
|
||
|
97:he:hebrew
|