| 1 | #
|
|---|
| 2 | # Locale::Language - ISO two letter codes for language identification (ISO 639)
|
|---|
| 3 | #
|
|---|
| 4 | # $Id: Language.pm,v 2.7 2004/06/10 21:19:34 neilb Exp $
|
|---|
| 5 | #
|
|---|
| 6 |
|
|---|
| 7 | package Locale::Language;
|
|---|
| 8 | use strict;
|
|---|
| 9 | require 5.002;
|
|---|
| 10 |
|
|---|
| 11 | require Exporter;
|
|---|
| 12 |
|
|---|
| 13 | #-----------------------------------------------------------------------
|
|---|
| 14 | # Public Global Variables
|
|---|
| 15 | #-----------------------------------------------------------------------
|
|---|
| 16 | use vars qw($VERSION @ISA @EXPORT);
|
|---|
| 17 | $VERSION = sprintf("%d.%02d", q$Revision: 2.7 $ =~ /(\d+)\.(\d+)/);
|
|---|
| 18 | @ISA = qw(Exporter);
|
|---|
| 19 | @EXPORT = qw(&code2language &language2code
|
|---|
| 20 | &all_language_codes &all_language_names );
|
|---|
| 21 |
|
|---|
| 22 | #-----------------------------------------------------------------------
|
|---|
| 23 | # Private Global Variables
|
|---|
| 24 | #-----------------------------------------------------------------------
|
|---|
| 25 | my %CODES = ();
|
|---|
| 26 | my %LANGUAGES = ();
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 | #=======================================================================
|
|---|
| 30 | #
|
|---|
| 31 | # code2language ( CODE )
|
|---|
| 32 | #
|
|---|
| 33 | #=======================================================================
|
|---|
| 34 | sub code2language
|
|---|
| 35 | {
|
|---|
| 36 | my $code = shift;
|
|---|
| 37 |
|
|---|
| 38 |
|
|---|
| 39 | return undef unless defined $code;
|
|---|
| 40 | $code = lc($code);
|
|---|
| 41 | if (exists $CODES{$code})
|
|---|
| 42 | {
|
|---|
| 43 | return $CODES{$code};
|
|---|
| 44 | }
|
|---|
| 45 | else
|
|---|
| 46 | {
|
|---|
| 47 | #---------------------------------------------------------------
|
|---|
| 48 | # no such language code!
|
|---|
| 49 | #---------------------------------------------------------------
|
|---|
| 50 | return undef;
|
|---|
| 51 | }
|
|---|
| 52 | }
|
|---|
| 53 |
|
|---|
| 54 |
|
|---|
| 55 | #=======================================================================
|
|---|
| 56 | #
|
|---|
| 57 | # language2code ( LANGUAGE )
|
|---|
| 58 | #
|
|---|
| 59 | #=======================================================================
|
|---|
| 60 | sub language2code
|
|---|
| 61 | {
|
|---|
| 62 | my $lang = shift;
|
|---|
| 63 |
|
|---|
| 64 |
|
|---|
| 65 | return undef unless defined $lang;
|
|---|
| 66 | $lang = lc($lang);
|
|---|
| 67 | if (exists $LANGUAGES{$lang})
|
|---|
| 68 | {
|
|---|
| 69 | return $LANGUAGES{$lang};
|
|---|
| 70 | }
|
|---|
| 71 | else
|
|---|
| 72 | {
|
|---|
| 73 | #---------------------------------------------------------------
|
|---|
| 74 | # no such language!
|
|---|
| 75 | #---------------------------------------------------------------
|
|---|
| 76 | return undef;
|
|---|
| 77 | }
|
|---|
| 78 | }
|
|---|
| 79 |
|
|---|
| 80 |
|
|---|
| 81 | #=======================================================================
|
|---|
| 82 | #
|
|---|
| 83 | # all_language_codes()
|
|---|
| 84 | #
|
|---|
| 85 | #=======================================================================
|
|---|
| 86 | sub all_language_codes
|
|---|
| 87 | {
|
|---|
| 88 | return keys %CODES;
|
|---|
| 89 | }
|
|---|
| 90 |
|
|---|
| 91 |
|
|---|
| 92 | #=======================================================================
|
|---|
| 93 | #
|
|---|
| 94 | # all_language_names()
|
|---|
| 95 | #
|
|---|
| 96 | #=======================================================================
|
|---|
| 97 | sub all_language_names
|
|---|
| 98 | {
|
|---|
| 99 | return values %CODES;
|
|---|
| 100 | }
|
|---|
| 101 |
|
|---|
| 102 |
|
|---|
| 103 | #=======================================================================
|
|---|
| 104 | # initialisation code - stuff the DATA into the CODES hash
|
|---|
| 105 | #=======================================================================
|
|---|
| 106 | {
|
|---|
| 107 | my $code;
|
|---|
| 108 | my $language;
|
|---|
| 109 | local $_;
|
|---|
| 110 |
|
|---|
| 111 |
|
|---|
| 112 | while (<DATA>)
|
|---|
| 113 | {
|
|---|
| 114 | next unless /\S/;
|
|---|
| 115 | chop;
|
|---|
| 116 | ($code, $language) = split(/:/, $_, 2);
|
|---|
| 117 | $CODES{$code} = $language;
|
|---|
| 118 | $LANGUAGES{"\L$language"} = $code;
|
|---|
| 119 | }
|
|---|
| 120 |
|
|---|
| 121 | close(DATA);
|
|---|
| 122 | }
|
|---|
| 123 |
|
|---|
| 124 | 1;
|
|---|
| 125 |
|
|---|
| 126 | __DATA__
|
|---|
| 127 | aa:Afar
|
|---|
| 128 | ab:Abkhazian
|
|---|
| 129 | ae:Avestan
|
|---|
| 130 | af:Afrikaans
|
|---|
| 131 | am:Amharic
|
|---|
| 132 | ar:Arabic
|
|---|
| 133 | as:Assamese
|
|---|
| 134 | ay:Aymara
|
|---|
| 135 | az:Azerbaijani
|
|---|
| 136 |
|
|---|
| 137 | ba:Bashkir
|
|---|
| 138 | be:Belarusian
|
|---|
| 139 | bg:Bulgarian
|
|---|
| 140 | bh:Bihari
|
|---|
| 141 | bi:Bislama
|
|---|
| 142 | bn:Bengali
|
|---|
| 143 | bo:Tibetan
|
|---|
| 144 | br:Breton
|
|---|
| 145 | bs:Bosnian
|
|---|
| 146 |
|
|---|
| 147 | ca:Catalan
|
|---|
| 148 | ce:Chechen
|
|---|
| 149 | ch:Chamorro
|
|---|
| 150 | co:Corsican
|
|---|
| 151 | cs:Czech
|
|---|
| 152 | cu:Church Slavic
|
|---|
| 153 | cv:Chuvash
|
|---|
| 154 | cy:Welsh
|
|---|
| 155 |
|
|---|
| 156 | da:Danish
|
|---|
| 157 | de:German
|
|---|
| 158 | dz:Dzongkha
|
|---|
| 159 |
|
|---|
| 160 | el:Greek
|
|---|
| 161 | en:English
|
|---|
| 162 | eo:Esperanto
|
|---|
| 163 | es:Spanish
|
|---|
| 164 | et:Estonian
|
|---|
| 165 | eu:Basque
|
|---|
| 166 |
|
|---|
| 167 | fa:Persian
|
|---|
| 168 | fi:Finnish
|
|---|
| 169 | fj:Fijian
|
|---|
| 170 | fo:Faeroese
|
|---|
| 171 | fr:French
|
|---|
| 172 | fy:Frisian
|
|---|
| 173 |
|
|---|
| 174 | ga:Irish
|
|---|
| 175 | gd:Gaelic (Scots)
|
|---|
| 176 | gl:Gallegan
|
|---|
| 177 | gn:Guarani
|
|---|
| 178 | gu:Gujarati
|
|---|
| 179 | gv:Manx
|
|---|
| 180 |
|
|---|
| 181 | ha:Hausa
|
|---|
| 182 | he:Hebrew
|
|---|
| 183 | hi:Hindi
|
|---|
| 184 | ho:Hiri Motu
|
|---|
| 185 | hr:Croatian
|
|---|
| 186 | hu:Hungarian
|
|---|
| 187 | hy:Armenian
|
|---|
| 188 | hz:Herero
|
|---|
| 189 |
|
|---|
| 190 | ia:Interlingua
|
|---|
| 191 | id:Indonesian
|
|---|
| 192 | ie:Interlingue
|
|---|
| 193 | ik:Inupiaq
|
|---|
| 194 | is:Icelandic
|
|---|
| 195 | it:Italian
|
|---|
| 196 | iu:Inuktitut
|
|---|
| 197 |
|
|---|
| 198 | ja:Japanese
|
|---|
| 199 | jw:Javanese
|
|---|
| 200 |
|
|---|
| 201 | ka:Georgian
|
|---|
| 202 | ki:Kikuyu
|
|---|
| 203 | kj:Kuanyama
|
|---|
| 204 | kk:Kazakh
|
|---|
| 205 | kl:Kalaallisut
|
|---|
| 206 | km:Khmer
|
|---|
| 207 | kn:Kannada
|
|---|
|
|---|