#!/usr/bin/perl use strict; use MDK::Common; 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 my %RESOURCE; # used to search for resource name #======================================================================= # Initialisation code - map the DATA into the CODES hash #======================================================================= sub init { my $prefix; my $code; my $name; while (<DATA>) { next unless /\S/; chop; my ($prefix, $code, $resource, $name) = split(/:/, $_, 4); $PREFIX{$prefix} = $prefix; $PREFIX{$code} = $prefix; $PREFIX{$name} = $prefix; $PREFIX{$resource} = $prefix; $ISOCODE{$prefix} = $code; $ISOCODE{$code} = $code; $ISOCODE{$name} = $code; $ISOCODE{$resource} = $code; $LANGUAGE{$prefix} = $name; $LANGUAGE{$code} = $name; $LANGUAGE{$name} = $name; $LANGUAGE{$resource} = $name; $RESOURCE{$prefix} = $resource; $RESOURCE{$code} = $resource; $RESOURCE{$name} = $resource; $RESOURCE{$resource} = $resource; } } #======================================================================= # Usage - error message #======================================================================= sub usage { my $errmsg = shift; my $errcode = shift; print STDERR "$progname: $errmsg\n\n" if $errmsg; print STDERR "Usage: $progname (-i|-l|-p|-r|-h) (<code>(,<code>)*|all)\n"; print STDERR " -h : print this help\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 " -r <code>: convert iso code to resource name (ex: pt -> PORT)\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"; 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/^-r/) { $LanguageMap = \%RESOURCE; } 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)); print join(" ", ($LanguageCode eq "all") ? uniq sort values %$LanguageMap : map { my $l = %$LanguageMap->{$_}; usage "no mapping found for $_\n", 1 if !$l; $l; } (split /,/, $LanguageCode) ), "\n"; 1; __DATA__ 01:en:ENUS:English US 03:pt:PORT:Portuguese 07:ru:RUSS:Russian 10:eu:BASQUE:Basque 26:ns:NSOTHO:Northern Sotho 27:af:AFRIK:Afrikaans 28:zu:ZULU:Zulu 29:tn:TSWANA:Tswana 30:el:GREEK:Greek 31:nl:DTCH:Dutch 33:fr:FREN:French 34:es:SPAN:Spanish 35:fi:FINN:Finnish 36:hu:HUNG:Hungarian 37:ca:CAT:Catalan 38:gl-ES:GAL:Galician 39:it:ITAL:Italian 40:ro:ROMANIAN:Romanian 41:bg:BUL:Bulgarian 42:cs:CZECH:Czech 43:sk:SLOVAK:Slovak 45:da:DAN:Danish 46:sv:SWED:Swedish 47:nb:NORBOK:Norwegian Bokmal 48:pl:POL:Polish 49:de:GERM:German 50:sl:SLOVENIAN:Slovenian 53:cy:WELSH:Welsh 54:gd:GAELIC:Gaelic (Scottish) 55:pt-BR:PORTBR:Portuguese Brazilian 58:lt:LITHUANIAN:Lithuanian 59:bs:BOSNIAN:Bosnian 60:ms:MALAY:Malay 66:th:THAI:Thai 75:lo:LAO:Laothian 76:km:KHMER:Khmer 77:et:ESTONIAN:Estonian 79:nn:NORNYN:Norwegian Nynorsk 80:uk:UKRA:Urakinian 81:ja:JAPN:Japanese 82:ko:KOREAN:Korean 83:mn:MONGOL:Mongolian 84:vi:VIET:Vietnamese 86:zh-CN:CHINSIM:Chinese Simplified 88:zh-TW:CHINTRAD:Chinese Traditional 90:tr:TURK:Turkish 91:hi:HINDI:Indian (Hindi) 92:ta:TAMIL:Tamil 93:kn:KANNADA:Kannada 96:ar:ARAB:Arabic 97:he:HEBREW:Hebrew