File Coverage

blib/lib/Google/Translate/Languages.pm
Criterion Covered Total %
statement 42 87 48.2
branch 3 14 21.4
condition n/a
subroutine 14 19 73.6
pod 1 8 12.5
total 60 128 46.8


line stmt bran cond sub pod time code
1             #!/usr/bin/perl
2             #-------------------------------------------------------------------------------
3             # List of languages and ISO 639 language codes supported by Google Translate
4             # Philip R Brenan at gmail dot com, Appa Apps Ltd Inc, 2017
5             #-------------------------------------------------------------------------------
6              
7             package Google::Translate::Languages;
8             our $VERSION = '20171222';
9 1     1   425 use v5.8.0;
  1         8  
10 1     1   4 use warnings FATAL => qw(all);
  1         2  
  1         39  
11 1     1   6 use Carp qw(confess);
  1         7  
  1         76  
12 1     1   391 use Data::Dump qw(dump);
  1         5685  
  1         60  
13 1     1   701 use Data::Table::Text qw(:all);
  1         52389  
  1         452  
14 1     1   1081 use ISO::639 v20171214;
  1         8021  
  1         22  
15 1     1   5 use utf8;
  1         2  
  1         4  
16 1     1   18 use strict;
  1         1  
  1         794  
17              
18             &generate unless caller;
19              
20             #1 Languages and codes # [Language name, ISO639 2 character code, and ISO639 3 character code] in English for languages supported by Google Translate
21              
22             sub supportedLanguages #S [Language name, ISO639 2 character code, and ISO639 3 character code] in English for languages supported by Google Translate
23 1     1 1 2 {@{&languages}
  1         3  
24             }
25              
26             #0
27              
28             sub splitListsOfLanguages($) ## Insert single languages from lists of languages
29 0     0 0 0 {my ($l) = @_; # Hash of language name lists to code
30 0         0 for my $languages(keys %$l)
31 0 0       0 {if ($languages =~ m([;,]))
32 0         0 {my @l = split /\s*[;,]\s*/, $languages;
33 0         0 for my $language(@l)
34 0         0 {$l->{$language} = $l->{$languages};
35             }
36             }
37             }
38             }
39              
40             sub additional2CharCodes
41 0     0 0 0 {my ($l) = @_; # Hash of language name lists to code
42 0         0 $l->{Cebuano} = "ceb"; # None
43 0         0 $l->{Filipino} = "fil"; # None
44 0         0 $l->{Frisian} = "fy"; # Only 2 char version
45 0         0 $l->{Hawaiian} = "haw"; # None
46 0         0 $l->{Hmong} = "hmn"; # None
47 0         0 $l->{Khmer} = "km";
48 0         0 $l->{Norwegian} = "nb"; # Could be nb or nn but Aws::Polly::Select uses nb so we do here too for consistency
49 0         0 $l->{"Scots Gaelic"} = "gd";
50 0         0 $l->{Sesotho} = "st"; # Only 2 char version
51             }
52              
53             sub additional3CharCodes
54 0     0 0 0 {my ($l) = @_; # Hash of language name lists to code
55 0         0 $l->{Frisian} = "fry"; # Chosen from 3 because there is a corresponding two char code
56 0         0 $l->{Khmer} = "khm";
57 0         0 $l->{"Scots Gaelic"} = "gla";
58 0         0 $l->{Sesotho} = "sot"; # Chosen from 2 because there is a corresponding two char code
59             }
60              
61             sub generate ## Generate the language code tables from the raw data
62 0     0 0 0 {my @l = map{trim($_)} split /\n/, &raw; # Split the raw data into lines of
  0         0  
63 0         0 my %c2 = %{&ISO::639::languageFromCode2};
  0         0  
64 0         0 my %c3 = %{&ISO::639::languageFromCode3};
  0         0  
65              
66 0         0 splitListsOfLanguages($_) for \%c2, \%c3;
67              
68 0         0 additional2CharCodes(\%c2);
69 0         0 additional3CharCodes(\%c3);
70              
71 0         0 my @L;
72 0         0 for my $languageName(@l)
73 0         0 {my $c2 = $c2{$languageName};
74 0         0 my $c3 = $c3{$languageName};
75 0 0       0 !$c2 and warn "No 2 character code for $languageName";
76 0 0       0 !$c3 and warn "No 3 character code for $languageName";
77 0         0 push @L, [$languageName, $c2, $c3];
78             }
79              
80 0         0 my $d = dump(\@L);
81 0         0 $d =~ s(\n) ( )gs;
82              
83 0         0 my $s = <
84             sub languages{$d}
85             END
86 0 0       0 if (my $f = do{"zzz.data"}) # File to save the translations hash to
  0         0  
87 0         0 {writeFile($f, $s); # Save the translations hash
88 0         0 say STDERR "New version written to:\n$f";
89             }
90             }
91              
92             # Language table goes here
93 1     1 0 108 sub languages{[ ["Afrikaans", "af", "afr"], ["Albanian", "sq", "alb"], ["Amharic", "am", "amh"], ["Arabic", "ar", "ara"], ["Armenian", "hy", "arm"], ["Azerbaijani", "az", "aze"], ["Basque", "eu", "baq"], ["Belarusian", "be", "bel"], ["Bengali", "bn", "ben"], ["Bosnian", "bs", "bos"], ["Bulgarian", "bg", "bul"], ["Burmese", "my", "mya"], ["Catalan", "ca", "cat"], ["Cebuano", "ceb", "ceb"], ["Chichewa", "ny", "nya"], ["Chinese", "zh", "chi"], ["Corsican", "co", "cos"], ["Croatian", "hr", "hrv"], ["Czech", "cs", "ces"], ["Danish", "da", "dan"], ["Dutch", "nl", "nld"], ["English", "en", "enm"], ["Esperanto", "eo", "epo"], ["Estonian", "et", "est"], ["Filipino", "fil", "fil"], ["Finnish", "fi", "fin"], ["French", "fr", "fro"], ["Frisian", "fy", "fry"], ["Galician", "gl", "glg"], ["Georgian", "ka", "kat"], ["German", "de", "goh"], ["Greek", "el", "ell"], ["Gujarati", "gu", "guj"], ["Haitian Creole", "ht", "hat"], ["Hausa", "ha", "hau"], ["Hawaiian", "haw", "haw"], ["Hebrew", "he", "heb"], ["Hindi", "hi", "hin"], ["Hmong", "hmn", "hmn"], ["Hungarian", "hu", "hun"], ["Icelandic", "is", "isl"], ["Igbo", "ig", "ibo"], ["Indonesian", "id", "ind"], ["Irish", "ga", "sga"], ["Italian", "it", "ita"], ["Japanese", "ja", "jpn"], ["Javanese", "jv", "jav"], ["Kannada", "kn", "kan"], ["Kazakh", "kk", "kaz"], ["Khmer", "km", "khm"], ["Korean", "ko", "kor"], ["Kurdish", "ku", "kur"], ["Kyrgyz", "ky", "kir"], ["Lao", "lo", "lao"], ["Latin", "la", "lat"], ["Latvian", "lv", "lav"], ["Lithuanian", "lt", "lit"], ["Luxembourgish", "lb", "ltz"], ["Macedonian", "mk", "mac"], ["Malagasy", "mg", "mlg"], ["Malay", "ms", "may"], ["Malayalam", "ml", "mal"], ["Maltese", "mt", "mlt"], ["Maori", "mi", "mri"], ["Marathi", "mr", "mar"], ["Mongolian", "mn", "mon"], ["Nepali", "ne", "nep"], ["Norwegian", "nb", "nno"], ["Pashto", "ps", "pus"], ["Persian", "fa", "peo"], ["Polish", "pl", "pol"], ["Portuguese", "pt", "por"], ["Punjabi", "pa", "pan"], ["Romanian", "ro", "ron"], ["Russian", "ru", "rus"], ["Samoan", "sm", "smo"], ["Scots Gaelic", "gd", "gla"], ["Serbian", "sr", "srp"], ["Sesotho", "st", "sot"], ["Shona", "sn", "sna"], ["Sindhi", "sd", "snd"], ["Sinhala", "si", "sin"], ["Slovak", "sk", "slo"], ["Slovenian", "sl", "slv"], ["Somali", "so", "som"], ["Spanish", "es", "spa"], ["Sundanese", "su", "sun"], ["Swahili", "sw", "swa"], ["Swedish", "sv", "swe"], ["Tajik", "tg", "tgk"], ["Tamil", "ta", "tam"], ["Telugu", "te", "tel"], ["Thai", "th", "tha"], ["Turkish", "tr", "ota"], ["Ukrainian", "uk", "ukr"], ["Urdu", "ur", "urd"], ["Uzbek", "uz", "uzb"], ["Vietnamese", "vi", "vie"], ["Welsh", "cy", "wel"], ["Xhosa", "xh", "xho"], ["Yiddish", "yi", "yid"], ["Yoruba", "yo", "yor"], ["Zulu", "zu", "zul"], ]}
94              
95             # Raw data from inside table goes here
96 0     0 0 0 sub raw {<
97             Afrikaans
98             Albanian
99             Amharic
100             Arabic
101             Armenian
102             Azerbaijani
103             Basque
104             Belarusian
105             Bengali
106             Bosnian
107             Bulgarian
108             Burmese
109             Catalan
110             Cebuano
111             Chichewa
112             Chinese
113             Corsican
114             Croatian
115             Czech
116             Danish
117             Dutch
118             English
119             Esperanto
120             Estonian
121             Filipino
122             Finnish
123             French
124             Frisian
125             Galician
126             Georgian
127             German
128             Greek
129             Gujarati
130             Haitian Creole
131             Hausa
132             Hawaiian
133             Hebrew
134             Hindi
135             Hmong
136             Hungarian
137             Icelandic
138             Igbo
139             Indonesian
140             Irish
141             Italian
142             Japanese
143             Javanese
144             Kannada
145             Kazakh
146             Khmer
147             Korean
148             Kurdish
149             Kyrgyz
150             Lao
151             Latin
152             Latvian
153             Lithuanian
154             Luxembourgish
155             Macedonian
156             Malagasy
157             Malay
158             Malayalam
159             Maltese
160             Maori
161             Marathi
162             Mongolian
163             Nepali
164             Norwegian
165             Pashto
166             Persian
167             Polish
168             Portuguese
169             Punjabi
170             Romanian
171             Russian
172             Samoan
173             Scots Gaelic
174             Serbian
175             Sesotho
176             Shona
177             Sindhi
178             Sinhala
179             Slovak
180             Slovenian
181             Somali
182             Spanish
183             Sundanese
184             Swahili
185             Swedish
186             Tajik
187             Tamil
188             Telugu
189             Thai
190             Turkish
191             Ukrainian
192             Urdu
193             Uzbek
194             Vietnamese
195             Welsh
196             Xhosa
197             Yiddish
198             Yoruba
199             Zulu
200             END
201             # podDocumentation
202              
203             =pod
204              
205             =encoding utf-8
206              
207             =head1 Name
208              
209             Google::Translate::Languages - The languages supported by Google Translate.
210              
211             =head1 Synopsis
212              
213             Produces a list of all the languages currently supported by Google Translate.
214              
215             my @l = grep {$$_[0] =~ m(spanish)i}
216             &Google::Translate::Languages::supportedLanguages;
217              
218             say STDERR dump(@l);
219              
220             # ["Spanish", "es", "spa"]
221              
222             Returns an array of:
223              
224             [Language name, ISO639 2 character code, and ISO639 3 character code]
225              
226             describing the languages currently supported by Google Translate as listed on:
227              
228             https://en.wikipedia.org/wiki/Google_Translate#Supported_languages
229              
230             The language codes corresponding to each language are produced via: L
231              
232             =head1 Description
233              
234             The following sections describe the methods in each functional area of this
235             module. For an alphabetic listing of all methods by name see L.
236              
237              
238              
239             =head1 Languages and codes
240              
241             [Language name, ISO639 2 character code, and ISO639 3 character code] in English for languages supported by Google Translate
242              
243             =head2 supportedLanguages()
244              
245             [Language name, ISO639 2 character code, and ISO639 3 character code] in English for languages supported by Google Translate
246              
247              
248             This is a static method and so should be invoked as:
249              
250             Google::Translate::Languages::supportedLanguages
251              
252              
253              
254             =head1 Index
255              
256              
257             1 L
258              
259             =head1 Installation
260              
261             This module is written in 100% Pure Perl and, thus, it is easy to read, use,
262             modify and install.
263              
264             Standard L process for building and installing modules:
265              
266             perl Build.PL
267             ./Build
268             ./Build test
269             ./Build install
270              
271             =head1 Author
272              
273             L
274              
275             L
276              
277             =head1 Copyright
278              
279             Copyright (c) 2016-2017 Philip R Brenan.
280              
281             This module is free software. It may be used, redistributed and/or modified
282             under the same terms as Perl itself.
283              
284             =cut
285              
286              
287              
288             # Tests and documentation
289              
290             sub test
291 1     1 0 6 {my $p = __PACKAGE__;
292 1         7 binmode($_, ":utf8") for *STDOUT, *STDERR;
293 1 50       52 return if eval "eof(${p}::DATA)";
294 1         45 my $s = eval "join('', <${p}::DATA>)";
295 1 50       5 $@ and die $@;
296 1     1   6 eval $s;
  1     1   18  
  1     1   34  
  1         6  
  1         1  
  1         18  
  1         539  
  1         50276  
  1         8  
  1         59  
297 1 50       659 $@ and die $@;
298             }
299              
300             test unless caller;
301              
302             1;
303             # podDocumentation
304             __DATA__