File Coverage

blib/lib/Psh/Locale.pm
Criterion Covered Total %
statement 15 36 41.6
branch 7 18 38.8
condition 2 6 33.3
subroutine 3 5 60.0
pod 0 5 0.0
total 27 70 38.5


line stmt bran cond sub pod time code
1             package Psh::Locale;
2              
3             #
4             # Here is the list of ISO-639:1988 language codes. Obtained from
5             # http://www.uk.adlibsoft.com/iso/iso639.html on 1999-12-26.
6             #
7             # aa Afar
8             # ab Abkhazian
9             # af Afrikaans
10             # am Amharic
11             # ar Arabic
12             # as Assamese
13             # ay Aymara
14             # az Azerbaijani
15             #
16             # ba Bashkir
17             # be Byelorussian
18             # bg Bulgarian
19             # bh Bihari
20             # bi Bislama
21             # bn Bengali; Bangla
22             # bo Tibetan
23             # br Breton
24             #
25             # ca Catalan
26             # co Corsican
27             # cs Czech
28             # cy Welsh
29             #
30             # da Danish
31             # de German
32             # dz Bhutani
33             #
34             # el Greek
35             # en English
36             # eo Esperanto
37             # es Spanish
38             # et Estonian
39             # eu Basque
40             #
41             # fa Persian
42             # fi Finnish
43             # fj Fiji
44             # fo Faeroese
45             # fr French
46             # fy Frisian
47             #
48             # ga Irish
49             # gd Scots Gaelic
50             # gl Galician
51             # gn Guarani
52             # gu Gujarati
53             #
54             # ha Hausa
55             # hi Hindi
56             # hr Croatian
57             # hu Hungarian
58             # hy Armenian
59             #
60             # ia Interlingua
61             # ie Interlingue
62             # ik Inupiak
63             # in Indonesian
64             # is Icelandic
65             # it Italian
66             # iw Hebrew
67             #
68             # ja Japanese
69             # ji Yiddish
70             # jw Javanese
71             #
72             # ka Georgian
73             # kk Kazakh
74             # kl Greenlandic
75             # km Cambodian
76             # kn Kannada
77             # ko Korean
78             # ks Kashmiri
79             # ku Kurdish
80             # ky Kirghiz
81             #
82             # la Latin
83             # ln Lingala
84             # lo Laothian
85             # lt Lithuanian
86             # lv Latvian, Lettish
87             #
88             # mg Malagasy
89             # mi Maori
90             # mk Macedonian
91             # ml Malayalam
92             # mn Mongolian
93             # mo Moldavian
94             # mr Marathi
95             # ms Malay
96             # mt Maltese
97             # my Burmese
98             #
99             # na Nauru
100             # ne Nepali
101             # nl Dutch
102             # no Norwegian
103             #
104             # oc Occitan
105             # om (Afan) Oromo
106             # or Oriya
107             #
108             # pa Punjabi
109             # pl Polish
110             # ps Pashto, Pushto
111             # pt Portuguese
112             #
113             # qu Quechua
114             #
115             # rm Rhaeto-Romance
116             # rn Kirundi
117             # ro Romanian
118             # ru Russian
119             # rw Kinyarwanda
120             #
121             # sa Sanskrit
122             # sd Sindhi
123             # sg Sangro
124             # sh Serbo-Croatian
125             # si Singhalese
126             # sk Slovak
127             # sl Slovenian
128             # sm Samoan
129             # sn Shona
130             # so Somali
131             # sq Albanian
132             # sr Serbian
133             # ss Siswati
134             # st Sesotho
135             # su Sundanese
136             # sv Swedish
137             # sw Swahili
138             #
139             # ta Tamil
140             # te Tegulu
141             # tg Tajik
142             # th Thai
143             # ti Tigrinya
144             # tk Turkmen
145             # tl Tagalog
146             # tn Setswana
147             # to Tonga
148             # tr Turkish
149             # ts Tsonga
150             # tt Tatar
151             # tw Twi
152             #
153             # uk Ukrainian
154             # ur Urdu
155             # uz Uzbek
156             #
157             # vi Vietnamese
158             # vo Volapuk
159             #
160             # wo Wolof
161             #
162             # xh Xhosa
163             #
164             # yo Yoruba
165             #
166             # zh Chinese
167             # zu Zulu
168             #
169              
170             my (@mon,@wday);
171             my $locale_loaded;
172             my $special_locale=0;
173              
174             sub load_locale {
175 1 50   1 0 32 return if $locale_loaded;
176 1         46 eval "require Psh::Locale::Default";
177              
178 1         4 my $lang= $ENV{LANG};
179             # Now try to use a locale module depending on LANG
180 1 0 33     7 if( $lang and $lang ne "C" and $lang ne "POSIX") {
      33        
181 0         0 $lang=lc($lang);
182              
183 0         0 my %alias_table= (
184             "de_de" => "German",
185             "deutsch" => "German",
186             "de" => "German",
187              
188             "es" => "Spanish",
189             "español" => "Spanish",
190             "espanol" => "Spanish",
191             "es_es" => "Spanish",
192              
193             "fr" => "French",
194             "français" => "French",
195             "francais" => "French",
196             "fr_fr" => "French",
197              
198             "it" => "Italian",
199             "italiano" => "Italian",
200             "it_it" => "Italian",
201              
202             "pt" => "Portuguese",
203             "português" => "Portuguese",
204             "portugues" => "Portuguese",
205             "pt_pt" => "Portuguese",
206             );
207              
208 0 0       0 $lang=$alias_table{$lang} if( exists $alias_table{$lang});
209 0         0 $lang=ucfirst($lang);
210 0         0 eval "use Psh::Locale::$lang";
211             #
212             # We are reading the locale data simply as perl modules
213             # A better way would be to maybe use Locale::PGetText
214             # but that would again increase the requirements for
215             # psh unnecessarily
216 0         0 $special_locale=1;
217             }
218 1         3 $locale_loaded=1;
219             }
220              
221              
222             # You can call the following a hack - we call
223             # strftime to calculate dates to get the locale dependent
224             # names - if anybody knows a better method to access
225             # the locales installed on the system, feel free to change it
226             sub months {
227 1 50   1 0 6 if (@_) {
228 0         0 @mon=@_;
229             } else {
230 1 50       786 unless (@mon) {
231 1 50       5 if ($speciallocale) {
232 0         0 require POSIX;
233 0         0 for( my $i=0; $i<12; $i++) {
234 0         0 push( @mon, POSIX::strftime("%b",0,0,0,1,$i,99));
235             }
236             } else {
237 1         7 @mon= qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
238             }
239             }
240             }
241 1         4 return @mon;
242             }
243              
244             sub weekdays {
245 1 50   1 0 10 if (@_) {
246 0         0 @wday=@_;
247             } else {
248 1 50       4 unless (@wday) {
249 1 50       2 if ($speciallocale) {
250 0         0 require POSIX;
251 0         0 for( my $i=0; $i<7; $i++) {
252 0         0 push( @wday, POSIX::strftime("%a",0,0,0,19+$i,11,99,$i));
253             }
254             } else {
255 1         4 @wday=qw(Sun Mon Tue Wed Thu Fri Sat);
256             }
257             }
258             }
259 1         3 return @wday;
260             }
261              
262             sub get_text {
263 0     0 0   my $key= shift;
264 0           load_locale();
265 0           return $Psh::text{$key};
266             }
267              
268             sub set_text {
269 0     0 0   my $key= shift;
270 0           my $val= shift;
271 0           load_locale();
272 0           $Psh::text{$key}= $val;
273             }
274              
275              
276             1;
277             __END__