# borrowed from feedvalidator, original copyright license is # # Copyright (c) 2002-2006, Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. ISO_LANG = { 'aa' => 'Afar', 'ab' => 'Abkhazian', 'ae' => 'Avestan', 'af' => 'Afrikaans', 'ak' => 'Akan', 'am' => 'Amharic', 'an' => 'Aragonese', 'ar' => 'Arabic', 'as' => 'Assamese', 'av' => 'Avaric', 'ay' => 'Aymara', 'az' => 'Azerbaijani', 'ba' => 'Bashkir', 'be' => 'Byelorussian', 'bg' => 'Bulgarian', 'bh' => 'Bihari', 'bi' => 'Bislama', 'bm' => 'Bambara', 'bn' => 'Bengali;Bangla', 'bo' => 'Tibetan', 'br' => 'Breton', 'bs' => 'Bosnian', 'ca' => 'Catalan', 'ce' => 'Chechen', 'ch' => 'Chamorro', 'co' => 'Corsican', 'cr' => 'Cree', 'cs' => 'Czech', 'cu' => 'Church Slavic', 'cv' => 'Chuvash', 'cy' => 'Welsh', 'da' => 'Danish', 'de' => 'German', 'dv' => 'Divehi', 'dz' => 'Dzongkha', 'ee' => 'Ewe', 'el' => 'Greek', 'en' => 'English', 'eo' => 'Esperanto', 'es' => 'Spanish', 'et' => 'Estonian', 'eu' => 'Basque', 'fa' => 'Persian (Farsi)', 'ff' => 'Fulah', 'fi' => 'Finnish', 'fj' => 'Fiji', 'fo' => 'Faroese', 'fr' => 'French', 'fy' => 'Frisian, Western', 'ga' => 'Irish', 'gd' => 'Scots Gaelic', 'gl' => 'Galician', 'gn' => 'Guarani', 'gu' => 'Gujarati', 'gv' => 'Manx', 'ha' => 'Hausa', 'he' => 'Hebrew', 'hi' => 'Hindi', 'ho' => 'Hiri Motu', 'hr' => 'Croatian', 'ht' => 'Haitian', 'hu' => 'Hungarian', 'hy' => 'Armenian', 'hz' => 'Herero', 'ia' => 'Interlingua', 'id' => 'Indonesian', 'ie' => 'Interlingue', 'ig' => 'Igbo', 'ii' => 'Sichuan Yi', 'ik' => 'Inupiak', 'io' => 'Ido', 'is' => 'Icelandic', 'it' => 'Italian', 'iu' => 'Inuktitut', 'ja' => 'Japanese', 'jv' => 'Javanese', 'ka' => 'Georgian', 'kg' => 'Kongo', 'ki' => 'Kikuyu; Gikuyu', 'kj' => 'Kuanyama; Kwanyama', 'kk' => 'Kazakh', 'kl' => 'Greenlandic', 'km' => 'Cambodian', 'kn' => 'Kannada', 'ko' => 'Korean', 'kr' => 'Kanuri', 'ks' => 'Kashmiri', 'ku' => 'Kurdish', 'kv' => 'Komi', 'kw' => 'Cornish', 'ky' => 'Kirghiz', 'la' => 'Latin', 'lb' => 'Letzeburgesch; Luxembourgish', 'lg' => 'Ganda', 'li' => 'Limburgan; Limburger, Limburgish', 'ln' => 'Lingala', 'lo' => 'Lao', 'lt' => 'Lithuanian', 'lu' => 'Luba-Katanga', 'lv' => 'Latvian', 'mg' => 'Malagasy', 'mh' => 'Marshallese', 'mi' => 'Maori', 'mk' => 'Macedonian', 'ml' => 'Malayalam', 'mn' => 'Mongolian', 'mo' => 'Moldavian', 'mr' => 'Marathi', 'ms' => 'Malay', 'mt' => 'Maltese', 'my' => 'Burmese', 'na' => 'Nauru', 'nb' => 'Norwegian Bokmal', 'nd' => 'Ndebele, North', 'ne' => 'Nepali', 'ng' => 'Ndonga', 'nl' => 'Dutch', 'nn' => 'Norwegian Nynorsk', 'no' => 'Norwegian', 'nr' => 'Ndebele, South', 'nv' => 'Navaho; Navajo', 'ny' => 'Chewa; Chichewa; Nyanha', 'oc' => 'Occitan', 'oj' => 'Ojibwa', 'om' => 'Afan (Oromo)', 'or' => 'Oriya', 'os' => 'Ossetian; Ossetic', 'pa' => 'Punjabi', 'pi' => 'Pali', 'pl' => 'Polish', 'ps' => 'Pushto', 'pt' => 'Portuguese', 'qu' => 'Quechua', 'rm' => 'Rhaeto-Romance', 'rn' => 'Kurundi', 'ro' => 'Romanian', 'ru' => 'Russian', 'rw' => 'Kinyarwanda', 'sa' => 'Sanskrit', 'sc' => 'Sardinian', 'sd' => 'Sindhi', 'se' => 'Northern Sami', 'sg' => 'Sangho', 'sh' => 'Serbo-Croatian', 'si' => 'Singhalese', 'sk' => 'Slovak', 'sl' => 'Slovenian', 'sm' => 'Samoan', 'sn' => 'Shona', 'so' => 'Somali', 'sq' => 'Albanian', 'sr' => 'Serbian', 'ss' => 'Swati', 'st' => 'Sotho, Southern', 'su' => 'Sundanese', 'sv' => 'Swedish', 'sw' => 'Swahili', 'ta' => 'Tamil', 'te' => 'Telugu', 'tg' => 'Tajik', 'th' => 'Thai', 'ti' => 'Tigrinya', 'tk' => 'Turkmen', 'tl' => 'Tagalog', 'tn' => 'Tswana', 'to' => 'Tonga', 'tr' => 'Turkish', 'ts' => 'Tsonga', 'tt' => 'Tatar', 'tw' => 'Twi', 'ty' => 'Tahitian', 'ug' => 'Uigur', 'uk' => 'Ukrainian', 'ur' => 'Urdu', 'uz' => 'Uzbek', 've' => 'Venda', 'vi' => 'Vietnamese', 'vo' => 'Volapuk', 'wa' => 'Walloon', 'wo' => 'Wolof', 'xh' => 'Xhosa', 'yi' => 'Yiddish', 'yo' => 'Yoruba', 'za' => 'Zhuang', 'zh' => 'Chinese', 'zu' => 'Zulu', 'x' => 'a user-defined language', 'xx' => 'a user-defined language', 'abk' => 'Abkhazian', 'ace' => 'Achinese', 'ach' => 'Acoli', 'ada' => 'Adangme', 'ady' => 'Adygei', 'ady' => 'Adyghe', 'aar' => 'Afar', 'afh' => 'Afrihili', 'afr' => 'Afrikaans', 'afa' => 'Afro-Asiatic (Other)', 'ain' => 'Ainu', 'aka' => 'Akan', 'akk' => 'Akkadian', 'alb' => 'Albanian', 'sqi' => 'Albanian', 'gws' => 'Alemanic', 'ale' => 'Aleut', 'alg' => 'Algonquian languages', 'tut' => 'Altaic (Other)', 'amh' => 'Amharic', 'anp' => 'Angika', 'apa' => 'Apache languages', 'ara' => 'Arabic', 'arg' => 'Aragonese', 'arc' => 'Aramaic', 'arp' => 'Arapaho', 'arn' => 'Araucanian', 'arw' => 'Arawak', 'arm' => 'Armenian', 'hye' => 'Armenian', 'rup' => 'Aromanian', 'art' => 'Artificial (Other)', 'asm' => 'Assamese', 'ast' => 'Asturian', 'ath' => 'Athapascan languages', 'aus' => 'Australian languages', 'map' => 'Austronesian (Other)', 'ava' => 'Avaric', 'ave' => 'Avestan', 'awa' => 'Awadhi', 'aym' => 'Aymara', 'aze' => 'Azerbaijani', 'ast' => 'Bable', 'ban' => 'Balinese', 'bat' => 'Baltic (Other)', 'bal' => 'Baluchi', 'bam' => 'Bambara', 'bai' => 'Bamileke languages', 'bad' => 'Banda', 'bnt' => 'Bantu (Other)', 'bas' => 'Basa', 'bak' => 'Bashkir', 'baq' => 'Basque', 'eus' => 'Basque', 'btk' => 'Batak (Indonesia)', 'bej' => 'Beja', 'bel' => 'Belarusian', 'bem' => 'Bemba', 'ben' => 'Bengali', 'ber' => 'Berber (Other)', 'bho' => 'Bhojpuri', 'bih' => 'Bihari', 'bik' => 'Bikol', 'byn' => 'Bilin', 'bin' => 'Bini', 'bis' => 'Bislama', 'byn' => 'Blin', 'nob' => 'Bokmal, Norwegian', 'bos' => 'Bosnian', 'bra' => 'Braj', 'bre' => 'Breton', 'bug' => 'Buginese', 'bul' => 'Bulgarian', 'bua' => 'Buriat', 'bur' => 'Burmese', 'mya' => 'Burmese', 'cad' => 'Caddo', 'car' => 'Carib', 'spa' => 'Castilian', 'cat' => 'Catalan', 'cau' => 'Caucasian (Other)', 'ceb' => 'Cebuano', 'cel' => 'Celtic (Other)', 'cai' => 'Central American Indian (Other)', 'chg' => 'Chagatai', 'cmc' => 'Chamic languages', 'cha' => 'Chamorro', 'che' => 'Chechen', 'chr' => 'Cherokee', 'nya' => 'Chewa', 'chy' => 'Cheyenne', 'chb' => 'Chibcha', 'nya' => 'Chichewa', 'chi' => 'Chinese', 'zho' => 'Chinese', 'chn' => 'Chinook jargon', 'chp' => 'Chipewyan', 'cho' => 'Choctaw', 'zha' => 'Chuang', 'chu' => 'Church Slavic; Church Slavonic; Old Church Slavonic; Old Church Slavic; Old Bulgarian', 'chk' => 'Chuukese', 'chv' => 'Chuvash', 'nwc' => 'Classical Nepal Bhasa; Classical Newari; Old Newari', 'cop' => 'Coptic', 'cor' => 'Cornish', 'cos' => 'Corsican', 'cre' => 'Cree', 'mus' => 'Creek', 'crp' => 'Creoles and pidgins(Other)', 'cpe' => 'Creoles and pidgins, English-based (Other)', 'cpf' => 'Creoles and pidgins, French-based (Other)', 'cpp' => 'Creoles and pidgins, Portuguese-based (Other)', 'crh' => 'Crimean Tatar; Crimean Turkish', 'scr' => 'Croatian', 'hrv' => 'Croatian', 'cus' => 'Cushitic (Other)', 'cze' => 'Czech', 'ces' => 'Czech', 'dak' => 'Dakota', 'dan' => 'Danish', 'dar' => 'Dargwa', 'day' => 'Dayak', 'del' => 'Delaware', 'din' => 'Dinka', 'div' => 'Divehi', 'doi' => 'Dogri', 'dgr' => 'Dogrib', 'dra' => 'Dravidian (Other)', 'dua' => 'Duala', 'dut' => 'Dutch', 'nld' => 'Dutch', 'dum' => 'Dutch, Middle (ca. 1050-1350)', 'dyu' => 'Dyula', 'dzo' => 'Dzongkha', 'efi' => 'Efik', 'egy' => 'Egyptian (Ancient)', 'eka' => 'Ekajuk', 'elx' => 'Elamite', 'eng' => 'English', 'enm' => 'English, Middle (1100-1500)', 'ang' => 'English, Old (ca.450-1100)', 'myv' => 'Erzya', 'epo' => 'Esperanto', 'est' => 'Estonian', 'ewe' => 'Ewe', 'ewo' => 'Ewondo', 'fan' => 'Fang', 'fat' => 'Fanti', 'fao' => 'Faroese', 'fij' => 'Fijian', 'fil' => 'Filipino; Pilipino', 'fin' => 'Finnish', 'fiu' => 'Finno-Ugrian (Other)', 'fon' => 'Fon', 'fre' => 'French', 'fra' => 'French', 'frm' => 'French, Middle (ca.1400-1600)', 'fro' => 'French, Old (842-ca.1400)', 'frs' => 'Frisian, Eastern', 'fry' => 'Frisian, Western', 'fur' => 'Friulian', 'ful' => 'Fulah', 'gaa' => 'Ga', 'gla' => 'Gaelic', 'glg' => 'Gallegan', 'lug' => 'Ganda', 'gay' => 'Gayo', 'gba' => 'Gbaya', 'gez' => 'Geez', 'geo' => 'Georgian', 'kat' => 'Georgian', 'ger' => 'German', 'deu' => 'German', 'nds' => 'German, Low', 'gmh' => 'German, Middle High (ca.1050-1500)', 'goh' => 'German, Old High (ca.750-1050)', 'gem' => 'Germanic (Other)', 'kik' => 'Gikuyu', 'gil' => 'Gilbertese', 'gon' => 'Gondi', 'gor' => 'Gorontalo', 'got' => 'Gothic', 'grb' => 'Grebo', 'grc' => 'Greek, Ancient (to 1453)', 'gre' => 'Greek, Modern (1453-)', 'ell' => 'Greek, Modern (1453-)', 'kal' => 'Greenlandic; Kalaallisut', 'grn' => 'Guarani', 'guj' => 'Gujarati', 'gwi' => 'Gwich\'in', 'hai' => 'Haida', 'hat' => 'Haitian', 'hau' => 'Hausa', 'haw' => 'Hawaiian', 'heb' => 'Hebrew', 'her' => 'Herero', 'hil' => 'Hiligaynon', 'him' => 'Himachali', 'hin' => 'Hindi', 'hmo' => 'Hiri Motu', 'hit' => 'Hittite', 'hmn' => 'Hmong', 'hun' => 'Hungarian', 'hup' => 'Hupa', 'iba' => 'Iban', 'ice' => 'Icelandic', 'isl' => 'Icelandic', 'ido' => 'Ido', 'ibo' => 'Igbo', 'ijo' => 'Ijo', 'ilo' => 'Iloko', 'smn' => 'Inari Sami', 'inc' => 'Indic (Other)', 'ine' => 'Indo-European (Other)', 'ind' => 'Indonesian', 'inh' => 'Ingush', 'ina' => 'Interlingua (International Auxiliary Language Association)', 'ile' => 'Interlingue', 'iku' => 'Inuktitut', 'ipk' => 'Inupiaq', 'ira' => 'Iranian (Other)', 'gle' => 'Irish', 'mga' => 'Irish, Middle (900-1200)', 'sga' => 'Irish, Old (to 900)', 'iro' => 'Iroquoian languages', 'ita' => 'Italian', 'jpn' => 'Japanese', 'jav' => 'Javanese', 'jrb' => 'Judeo-Arabic', 'jpr' => 'Judeo-Persian', 'kbd' => 'Kabardian', 'kab' => 'Kabyle', 'kac' => 'Kachin', 'kal' => 'Kalaallisut', 'xal' => 'Kalmyk', 'kam' => 'Kamba', 'kan' => 'Kannada', 'kau' => 'Kanuri', 'krc' => 'Karachay-Balkar', 'kaa' => 'Kara-Kalpak', 'krl' => 'Karelian', 'kar' => 'Karen', 'kas' => 'Kashmiri', 'csb' => 'Kashubian', 'kaw' => 'Kawi', 'kaz' => 'Kazakh', 'kha' => 'Khasi', 'khm' => 'Khmer', 'khi' => 'Khoisan (Other)', 'kho' => 'Khotanese', 'kik' => 'Kikuyu', 'kmb' => 'Kimbundu', 'kin' => 'Kinyarwanda', 'kir' => 'Kirghiz', 'tlh' => 'Klingon; tlhIngan-Hol', 'kom' => 'Komi', 'kon' => 'Kongo', 'kok' => 'Konkani', 'kor' => 'Korean', 'kos' => 'Kosraean', 'kpe' => 'Kpelle', 'kro' => 'Kru', 'kua' => 'Kuanyama', 'kum' => 'Kumyk', 'kur' => 'Kurdish', 'kru' => 'Kurukh', 'kut' => 'Kutenai', 'kua' => 'Kwanyama', 'lad' => 'Ladino', 'lah' => 'Lahnda', 'lam' => 'Lamba', 'lao' => 'Lao', 'lat' => 'Latin', 'lav' => 'Latvian', 'ltz' => 'Letzeburgesch', 'lez' => 'Lezghian', 'lim' => 'Limburgan', 'lin' => 'Lingala', 'lit' => 'Lithuanian', 'jbo' => 'Lojban', 'nds' => 'Low German', 'dsb' => 'Lower Sorbian', 'loz' => 'Lozi', 'lub' => 'Luba-Katanga', 'lua' => 'Luba-Lulua', 'lui' => 'Luiseno', 'smj' => 'Lule Sami', 'lun' => 'Lunda', 'luo' => 'Luo (Kenya and Tanzania)', 'lus' => 'Lushai', 'ltz' => 'Luxembourgish', 'mac' => 'Macedonian', 'mkd' => 'Macedonian', 'mad' => 'Madurese', 'mag' => 'Magahi', 'mai' => 'Maithili', 'mak' => 'Makasar', 'mlg' => 'Malagasy', 'may' => 'Malay', 'msa' => 'Malay', 'mal' => 'Malayalam', 'mlt' => 'Maltese', 'mnc' => 'Manchu', 'mdr' => 'Mandar', 'man' => 'Mandingo', 'mni' => 'Manipuri', 'mno' => 'Manobo languages', 'glv' => 'Manx', 'mao' => 'Maori', 'mri' => 'Maori', 'mar' => 'Marathi', 'chm' => 'Mari', 'mah' => 'Marshallese', 'mwr' => 'Marwari', 'mas' => 'Masai', 'myn' => 'Mayan languages', 'men' => 'Mende', 'mic' => 'Micmac', 'min' => 'Minangkabau', 'mwl' => 'Mirandese', 'mis' => 'Miscellaneous languages', 'moh' => 'Mohawk', 'mdf' => 'Moksha', 'mol' => 'Moldavian', 'mkh' => 'Mon-Khmer (Other)', 'lol' => 'Mongo', 'mon' => 'Mongolian', 'mos' => 'Mossi', 'mul' => 'Multiple languages', 'mun' => 'Munda languages', 'nah' => 'Nahuatl', 'nau' => 'Nauru', 'nav' => 'Navaho; Navajo', 'nde' => 'Ndebele, North', 'nbl' => 'Ndebele, South', 'ndo' => 'Ndonga', 'nap' => 'Neapolitan', 'nep' => 'Nepali', 'new' => 'Newari', 'nia' => 'Nias', 'nic' => 'Niger-Kordofanian (Other)', 'ssa' => 'Nilo-Saharan (Other)', 'niu' => 'Niuean', 'nog' => 'Nogai', 'non' => 'Norse, Old', 'nai' => 'North American Indian (Other)', 'frr' => 'Northern Frisian', 'sme' => 'Northern Sami', 'nso' => 'Northern Sotho; Pedi; Sepedi', 'nde' => 'North Ndebele', 'nor' => 'Norwegian', 'nob' => 'Norwegian Bokmal', 'nno' => 'Norwegian Nynorsk', 'nub' => 'Nubian languages', 'nym' => 'Nyamwezi', 'nya' => 'Nyanja', 'nyn' => 'Nyankole', 'nno' => 'Nynorsk, Norwegian', 'nyo' => 'Nyoro', 'nzi' => 'Nzima', 'oci' => 'Occitan (post 1500)', 'oji' => 'Ojibwa', 'ori' => 'Oriya', 'orm' => 'Oromo', 'osa' => 'Osage', 'oss' => 'Ossetian; Ossetic', 'oto' => 'Otomian languages', 'pal' => 'Pahlavi', 'pau' => 'Palauan', 'pli' => 'Pali', 'pam' => 'Pampanga', 'pag' => 'Pangasinan', 'pan' => 'Panjabi', 'pap' => 'Papiamento', 'paa' => 'Papuan (Other)', 'per' => 'Persian', 'fas' => 'Persian', 'peo' => 'Persian, Old (ca.600-400)', 'phi' => 'Philippine (Other)', 'phn' => 'Phoenician', 'pon' => 'Pohnpeian', 'pol' => 'Polish', 'por' => 'Portuguese', 'pra' => 'Prakrit languages', 'oci' => 'Provencal', 'pro' => 'Provencal, Old (to 1500)', 'pan' => 'Punjabi', 'pus' => 'Pushto', 'que' => 'Quechua', 'roh' => 'Raeto-Romance', 'raj' => 'Rajasthani', 'rap' => 'Rapanui', 'rar' => 'Rarotongan', 'qaa' => 'Reserved for local use', 'qtz' => 'Reserved for local use', 'roa' => 'Romance (Other)', 'rum' => 'Romanian', 'ron' => 'Romanian', 'rom' => 'Romany', 'run' => 'Rundi', 'rus' => 'Russian', 'sal' => 'Salishan languages', 'sam' => 'Samaritan Aramaic', 'smi' => 'Sami languages (Other)', 'smo' => 'Samoan', 'sad' => 'Sandawe', 'sag' => 'Sango', 'san' => 'Sanskrit', 'sat' => 'Santali', 'srd' => 'Sardinian', 'sas' => 'Sasak', 'nds' => 'Saxon, Low', 'sco' => 'Scots', 'gla' => 'Scottish Gaelic', 'sel' => 'Selkup', 'sem' => 'Semitic (Other)', 'nso' => 'Sepedi; Northern Sotho; Pedi', 'scc' => 'Serbian', 'srp' => 'Serbian', 'srr' => 'Serer', 'shn' => 'Shan', 'sna' => 'Shona', 'iii' => 'Sichuan Yi', 'scn' => 'Sicilian', 'sid' => 'Sidamo', 'sgn' => 'Sign languages', 'bla' => 'Siksika', 'snd' => 'Sindhi', 'sin' => 'Sinhalese', 'sit' => 'Sino-Tibetan (Other)', 'sio' => 'Siouan languages', 'sms' => 'Skolt Sami', 'den' => 'Slave (Athapascan)', 'sla' => 'Slavic (Other)', 'slo' => 'Slovak', 'slk' => 'Slovak', 'slv' => 'Slovenian', 'sog' => 'Sogdian', 'som' => 'Somali', 'son' => 'Songhai', 'snk' => 'Soninke', 'wen' => 'Sorbian languages', 'nso' => 'Sotho, Northern', 'sot' => 'Sotho, Southern', 'sai' => 'South American Indian (Other)', 'alt' => 'Southern Altai', 'sma' => 'Southern Sami', 'nbl' => 'South Ndebele', 'spa' => 'Spanish', 'srn' => 'Sranan Tongo', 'suk' => 'Sukuma', 'sux' => 'Sumerian', 'sun' => 'Sundanese', 'sus' => 'Susu', 'swa' => 'Swahili', 'ssw' => 'Swati', 'swe' => 'Swedish', 'gsw' => 'Swiss German; Alemanic', 'syr' => 'Syriac', 'tgl' => 'Tagalog', 'tah' => 'Tahitian', 'tai' => 'Tai (Other)', 'tgk' => 'Tajik', 'tmh' => 'Tamashek', 'tam' => 'Tamil', 'tat' => 'Tatar', 'tel' => 'Telugu', 'ter' => 'Tereno', 'tet' => 'Tetum', 'tha' => 'Thai', 'tib' => 'Tibetan', 'bod' => 'Tibetan', 'tig' => 'Tigre', 'tir' => 'Tigrinya', 'tem' => 'Timne', 'tiv' => 'Tiv', 'tlh' => 'tlhIngan-Hol; Klingon', 'tli' => 'Tlingit', 'tpi' => 'Tok Pisin', 'tkl' => 'Tokelau', 'tog' => 'Tonga (Nyasa)', 'ton' => 'Tonga (Tonga Islands)', 'tsi' => 'Tsimshian', 'tso' => 'Tsonga', 'tsn' => 'Tswana', 'tum' => 'Tumbuka', 'tup' => 'Tupi languages', 'tur' => 'Turkish', 'ota' => 'Turkish, Ottoman (1500-1928)', 'tuk' => 'Turkmen', 'tvl' => 'Tuvalu', 'tyv' => 'Tuvinian', 'twi' => 'Twi', 'udm' => 'Udmurt', 'uga' => 'Ugaritic', 'uig' => 'Uighur', 'ukr' => 'Ukrainian', 'umb' => 'Umbundu', 'und' => 'Undetermined', 'hsb' => 'Upper Sorbian', 'urd' => 'Urdu', 'uzb' => 'Uzbek', 'vai' => 'Vai', 'cat' => 'Valencian', 'ven' => 'Venda', 'vie' => 'Vietnamese', 'vol' => 'Volapuk', 'vot' => 'Votic', 'wak' => 'Wakashan languages', 'wal' => 'Walamo', 'wln' => 'Walloon', 'war' => 'Waray', 'was' => 'Washo', 'wel' => 'Welsh', 'cym' => 'Welsh', 'fry' => 'Wester Frisian', 'wol' => 'Wolof', 'xho' => 'Xhosa', 'sah' => 'Yakut', 'yao' => 'Yao', 'yap' => 'Yapese', 'yid' => 'Yiddish', 'yor' => 'Yoruba', 'ypk' => 'Yupik languages', 'znd' => 'Zande', 'zap' => 'Zapotec', 'zen' => 'Zenaga', 'zha' => 'Zhuang', 'zul' => 'Zulu', 'zun' => 'Zuni' } def is_valid_lang_code(value) if value.include? '-' lang, sublang = value.split('-', 2) else lang = value end !!ISO_LANG[lang.downcase] end