| blib/lib/Google/Translate/Languages.pm | |||
|---|---|---|---|
| Criterion | Covered | Total | % |
| statement | 42 | 84 | 50.0 |
| branch | 3 | 12 | 25.0 |
| condition | n/a | ||
| subroutine | 14 | 19 | 73.6 |
| pod | 1 | 8 | 12.5 |
| total | 60 | 123 | 48.7 |
| 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 = '20190811'; | |||||||
| 9 | 1 | 1 | 554 | use v5.8.0; | ||||
| 1 | 10 | |||||||
| 10 | 1 | 1 | 6 | use warnings FATAL => qw(all); | ||||
| 1 | 2 | |||||||
| 1 | 43 | |||||||
| 11 | 1 | 1 | 6 | use Carp qw(confess); | ||||
| 1 | 2 | |||||||
| 1 | 87 | |||||||
| 12 | 1 | 1 | 490 | use Data::Dump qw(dump); | ||||
| 1 | 7387 | |||||||
| 1 | 61 | |||||||
| 13 | 1 | 1 | 2376 | use Data::Table::Text qw(:all); | ||||
| 1 | 113969 | |||||||
| 1 | 2741 | |||||||
| 14 | 1 | 1 | 1628 | use ISO::639 v20171214; | ||||
| 1 | 11870 | |||||||
| 1 | 33 | |||||||
| 15 | 1 | 1 | 7 | use utf8; | ||||
| 1 | 2 | |||||||
| 1 | 6 | |||||||
| 16 | 1 | 1 | 24 | use strict; | ||||
| 1 | 2 | |||||||
| 1 | 1149 | |||||||
| 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 | 3 | {@{&languages} | |||
| 1 | 4 | |||||||
| 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} = "cb"; # https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes - not present so I made it up | |||||
| 43 | 0 | 0 | $l->{Filipino} = "tl"; # https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes tagalog | |||||
| 44 | 0 | 0 | $l->{Frisian} = "fy"; # Only 2 char version | |||||
| 45 | 0 | 0 | $l->{Hawaiian} = "hw"; # https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes - not present so I made it up | |||||
| 46 | 0 | 0 | $l->{Hmong} = "hm"; # https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes - not present so I made it up | |||||
| 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 | ||||||||
| 64 | 0 | 0 | my %c2 = %{&ISO::639::languageFromCode2}; | |||||
| 0 | 0 | |||||||
| 65 | 0 | 0 | my %c3 = %{&ISO::639::languageFromCode3}; | |||||
| 0 | 0 | |||||||
| 66 | ||||||||
| 67 | 0 | 0 | splitListsOfLanguages($_) for \%c2, \%c3; | |||||
| 68 | ||||||||
| 69 | 0 | 0 | additional2CharCodes(\%c2); | |||||
| 70 | 0 | 0 | additional3CharCodes(\%c3); | |||||
| 71 | ||||||||
| 72 | 0 | 0 | my @L; | |||||
| 73 | 0 | 0 | for my $languageName(@l) | |||||
| 74 | 0 | 0 | {my $c2 = $c2{$languageName}; | |||||
| 75 | 0 | 0 | my $c3 = $c3{$languageName}; | |||||
| 76 | 0 | 0 | 0 | !$c2 and warn "No 2 character code for $languageName"; | ||||
| 77 | 0 | 0 | 0 | !$c3 and warn "No 3 character code for $languageName"; | ||||
| 78 | 0 | 0 | push @L, [$languageName =~ s(\s+) ()gsr, $c2, $c3]; # Remove blanks from language names | |||||
| 79 | } | |||||||
| 80 | ||||||||
| 81 | 0 | 0 | my $d = dump(\@L); | |||||
| 82 | 0 | 0 | $d =~ s(\n) ( )gs; | |||||
| 83 | ||||||||
| 84 | 0 | 0 | my $s = < | |||||
| 85 | sub languages{$d} | |||||||
| 86 | END | |||||||
| 87 | 0 | 0 | say STDERR "New version written to:\n", owf("zzz.data", $s); # Write new table for manual replacement in this file at: sub languages just below as | |||||
| 88 | } | |||||||
| 89 | ||||||||
| 90 | # Language table goes here | |||||||
| 91 | 1 | 1 | 0 | 128 | 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", "bur"], ["Catalan", "ca", "cat"], ["Cebuano", "cb", "ceb"], ["Chichewa", "ny", "nya"], ["Chinese", "zh", "chi"], ["Corsican", "co", "cos"], ["Croatian", "hr", "hrv"], ["Czech", "cs", "ces"], ["Danish", "da", "dan"], ["Dutch", "nl", "dum"], ["English", "en", "enm"], ["Esperanto", "eo", "epo"], ["Estonian", "et", "est"], ["Filipino", "tl", "fil"], ["Finnish", "fi", "fin"], ["French", "fr", "fro"], ["Frisian", "fy", "fry"], ["Galician", "gl", "glg"], ["Georgian", "ka", "geo"], ["German", "de", "goh"], ["Greek", "el", "ell"], ["Gujarati", "gu", "guj"], ["HaitianCreole", "ht", "hat"], ["Hausa", "ha", "hau"], ["Hawaiian", "hw", "haw"], ["Hebrew", "he", "heb"], ["Hindi", "hi", "hin"], ["Hmong", "hm", "hmn"], ["Hungarian", "hu", "hun"], ["Icelandic", "is", "ice"], ["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", "msa"], ["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"], ["ScotsGaelic", "gd", "gla"], ["Serbian", "sr", "srp"], ["Sesotho", "st", "sot"], ["Shona", "sn", "sna"], ["Sindhi", "sd", "snd"], ["Sinhala", "si", "sin"], ["Slovak", "sk", "slk"], ["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", "cym"], ["Xhosa", "xh", "xho"], ["Yiddish", "yi", "yid"], ["Yoruba", "yo", "yor"], ["Zulu", "zu", "zul"], ]} | |||
| 92 | ||||||||
| 93 | # Raw data from inside table goes here | |||||||
| 94 | 0 | 0 | 0 | 0 | sub raw {< | |||
| 95 | Afrikaans | |||||||
| 96 | Albanian | |||||||
| 97 | Amharic | |||||||
| 98 | Arabic | |||||||
| 99 | Armenian | |||||||
| 100 | Azerbaijani | |||||||
| 101 | Basque | |||||||
| 102 | Belarusian | |||||||
| 103 | Bengali | |||||||
| 104 | Bosnian | |||||||
| 105 | Bulgarian | |||||||
| 106 | Burmese | |||||||
| 107 | Catalan | |||||||
| 108 | Cebuano | |||||||
| 109 | Chichewa | |||||||
| 110 | Chinese | |||||||
| 111 | Corsican | |||||||
| 112 | Croatian | |||||||
| 113 | Czech | |||||||
| 114 | Danish | |||||||
| 115 | Dutch | |||||||
| 116 | English | |||||||
| 117 | Esperanto | |||||||
| 118 | Estonian | |||||||
| 119 | Filipino | |||||||
| 120 | Finnish | |||||||
| 121 | French | |||||||
| 122 | Frisian | |||||||
| 123 | Galician | |||||||
| 124 | Georgian | |||||||
| 125 | German | |||||||
| 126 | Greek | |||||||
| 127 | Gujarati | |||||||
| 128 | Haitian Creole | |||||||
| 129 | Hausa | |||||||
| 130 | Hawaiian | |||||||
| 131 | Hebrew | |||||||
| 132 | Hindi | |||||||
| 133 | Hmong | |||||||
| 134 | Hungarian | |||||||
| 135 | Icelandic | |||||||
| 136 | Igbo | |||||||
| 137 | Indonesian | |||||||
| 138 | Irish | |||||||
| 139 | Italian | |||||||
| 140 | Japanese | |||||||
| 141 | Javanese | |||||||
| 142 | Kannada | |||||||
| 143 | Kazakh | |||||||
| 144 | Khmer | |||||||
| 145 | Korean | |||||||
| 146 | Kurdish | |||||||
| 147 | Kyrgyz | |||||||
| 148 | Lao | |||||||
| 149 | Latin | |||||||
| 150 | Latvian | |||||||
| 151 | Lithuanian | |||||||
| 152 | Luxembourgish | |||||||
| 153 | Macedonian | |||||||
| 154 | Malagasy | |||||||
| 155 | Malay | |||||||
| 156 | Malayalam | |||||||
| 157 | Maltese | |||||||
| 158 | Maori | |||||||
| 159 | Marathi | |||||||
| 160 | Mongolian | |||||||
| 161 | Nepali | |||||||
| 162 | Norwegian | |||||||
| 163 | Pashto | |||||||
| 164 | Persian | |||||||
| 165 | Polish | |||||||
| 166 | Portuguese | |||||||
| 167 | Punjabi | |||||||
| 168 | Romanian | |||||||
| 169 | Russian | |||||||
| 170 | Samoan | |||||||
| 171 | Scots Gaelic | |||||||
| 172 | Serbian | |||||||
| 173 | Sesotho | |||||||
| 174 | Shona | |||||||
| 175 | Sindhi | |||||||
| 176 | Sinhala | |||||||
| 177 | Slovak | |||||||
| 178 | Slovenian | |||||||
| 179 | Somali | |||||||
| 180 | Spanish | |||||||
| 181 | Sundanese | |||||||
| 182 | Swahili | |||||||
| 183 | Swedish | |||||||
| 184 | Tajik | |||||||
| 185 | Tamil | |||||||
| 186 | Telugu | |||||||
| 187 | Thai | |||||||
| 188 | Turkish | |||||||
| 189 | Ukrainian | |||||||
| 190 | Urdu | |||||||
| 191 | Uzbek | |||||||
| 192 | Vietnamese | |||||||
| 193 | Welsh | |||||||
| 194 | Xhosa | |||||||
| 195 | Yiddish | |||||||
| 196 | Yoruba | |||||||
| 197 | Zulu | |||||||
| 198 | END | |||||||
| 199 | # podDocumentation | |||||||
| 200 | ||||||||
| 201 | =pod | |||||||
| 202 | ||||||||
| 203 | =encoding utf-8 | |||||||
| 204 | ||||||||
| 205 | =head1 Name | |||||||
| 206 | ||||||||
| 207 | Google::Translate::Languages - The languages supported by Google Translate. | |||||||
| 208 | ||||||||
| 209 | =head1 Synopsis | |||||||
| 210 | ||||||||
| 211 | Produces a list of all the languages currently supported by Google Translate. | |||||||
| 212 | ||||||||
| 213 | my @l = grep {$$_[0] =~ m(spanish)i} | |||||||
| 214 | &Google::Translate::Languages::supportedLanguages; | |||||||
| 215 | ||||||||
| 216 | say STDERR dump(@l); | |||||||
| 217 | ||||||||
| 218 | # ["Spanish", "es", "spa"] | |||||||
| 219 | ||||||||
| 220 | Returns an array of: | |||||||
| 221 | ||||||||
| 222 | [Language name, ISO639 2 character code, and ISO639 3 character code] | |||||||
| 223 | ||||||||
| 224 | describing the languages currently supported by Google Translate as listed on: | |||||||
| 225 | ||||||||
| 226 | https://en.wikipedia.org/wiki/Google_Translate#Supported_languages | |||||||
| 227 | ||||||||
| 228 | The language codes corresponding to each language are produced via: L |
|||||||
| 229 | ||||||||
| 230 | =head1 Description | |||||||
| 231 | ||||||||
| 232 | The following sections describe the methods in each functional area of this | |||||||
| 233 | module. For an alphabetic listing of all methods by name see L |
|||||||
| 234 | ||||||||
| 235 | ||||||||
| 236 | ||||||||
| 237 | =head1 Languages and codes | |||||||
| 238 | ||||||||
| 239 | [Language name, ISO639 2 character code, and ISO639 3 character code] in | |||||||
| 240 | English for languages supported by Google Translate | |||||||
| 241 | ||||||||
| 242 | =head2 supportedLanguages() | |||||||
| 243 | ||||||||
| 244 | [Language name, ISO639 2 character code, and ISO639 3 character code] in | |||||||
| 245 | 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 |
|||||||
| 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 | 8 | {my $p = __PACKAGE__; | |||
| 292 | 1 | 10 | binmode($_, ":utf8") for *STDOUT, *STDERR; | |||||
| 293 | 1 | 50 | 74 | return if eval "eof(${p}::DATA)"; | ||||
| 294 | 1 | 70 | my $s = eval "join('', <${p}::DATA>)"; | |||||
| 295 | 1 | 50 | 14 | $@ and die $@; | ||||
| 296 | 1 | 1 | 7 | eval $s; | ||||
| 1 | 1 | 17 | ||||||
| 1 | 1 | 60 | ||||||
| 1 | 7 | |||||||
| 1 | 3 | |||||||
| 1 | 24 | |||||||
| 1 | 624 | |||||||
| 1 | 63741 | |||||||
| 1 | 10 | |||||||
| 1 | 88 | |||||||
| 297 | 1 | 50 | 750 | $@ and die $@; | ||||
| 298 | } | |||||||
| 299 | ||||||||
| 300 | test unless caller; | |||||||
| 301 | ||||||||
| 302 | 1; | |||||||
| 303 | # podDocumentation | |||||||
| 304 | __DATA__ |