<?php
/* SVN FILE: $Id$ */

/**
 * Short description for file.
 *
 * Long description for file
 *
 * PHP versions 4 and 5
 *
 * CakePHP :  Rapid Development Framework <http://www.cakephp.org/>
 * Copyright (c) 2005, Cake Software Foundation, Inc. 
 *                     1785 E. Sahara Avenue, Suite 490-204
 *                     Las Vegas, Nevada 89104
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @filesource
 * @copyright    Copyright (c) 2005, Cake Software Foundation, Inc.
 * @link         http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
 * @package      cake
 * @subpackage   cake.cake.libs
 * @since        CakePHP v 0.10.3.1423
 * @version      $Revision$
 * @modifiedby   $LastChangedBy$
 * @lastmodified $Date$
 * @license      http://www.opensource.org/licenses/mit-license.php The MIT License
 */

/**
 * Short description for file.
 *
 * Long description for file
 *
 * @package    cake
 * @subpackage cake.cake.libs
 * @since      CakePHP v 0.10.3.1423
 */

class L10n extends Object
{
    var $language = 'English (United States)';
    var $languagePath = 'eng';
    var $lang = 'en-us';
    var $locale = 'en_US';
    var $winLocale = 'eng';

    var $_l10nMap = array(
/*Afar*/                    'aar' => 'aa',
/*Abkhazian*/               'abk' => 'ab',
/*Achinese*/                'ace' => 'ace',
/*Acoli*/                   'ach' => 'ach',
/*Adangme*/                 'ada' => 'ada',
/*Adyghe; Adygei*/          'ady' => 'ady',
/*Afro-Asiatic (Other)*/    'afa' => 'afa',
/*Afrihili*/                'afh' => 'afh',
/*Amharic*/                 'afr' => 'af',
/*Ainu*/                    'ain' => 'ain',
/*Akan*/                    'aka' => 'ak',
/*Akkadian*/                'akk' => 'akk',
/*Albanian*/                'alb' => 'sq',
/*Aleut*/                   'ale' => 'ale',
/*Algonquian Languages*/    'alg' => 'alg',
/*Southern Altai*/          'alt' => 'alt',
/*Amharic*/                 'amh' => 'am',
/*English, Old*/            'ang' => 'ang',
/*Apache languages*/        'apa' => 'apa',
/*Arabic*/                  'ara' => 'ar',
/*Aramaic*/                 'arc' => 'arc',
/*Aragonese*/               'arg' => 'an',
/*Armenian*/                'arm' => 'hy',
/*Araucanian*/              'arn' => 'arn',
/*Arapaho*/                 'arp' => 'arp',
/*Arawak*/                  'arw' => 'arw',
/*Assamese */               'asm' => 'as',
/*Asturian; Bable*/         'ast' => 'ast',
/*Athapascan languages*/    'ath' => 'ath',
/*Australian languages*/    'aus' => 'aus',
/*Avaric*/                  'ava' => 'av',
/*Avestan*/                 'ave' => 'ae',
/*Awadhi*/                  'awa' => 'awa',
/*Aymara*/                  'aym' => 'ay',
/*Azerbaijani*/             'aze' => 'az',
/*Banda*/                   'bad' => 'bad',
/*Bamileke languages*/      'bai' => 'bai',
/*Bashkir*/                 'bak' => 'ba',
/*Bashkir*/                 'bal' => 'bal',
/*Bambara*/                 'bam' => 'bam',
/*Balinese*/                'ban' => 'ban',
/*Basque*/                  'baq' => 'eu',
/*Basa*/                    'bas' => 'bas',
/*Baltic (Other)*/          'bat' => 'bat',
/*Beja*/                    'bej' => 'bej',
/*Belarusian*/              'bel' => 'bel',
/*Bemba*/                   'bem' => 'bem',
/*Bengali*/                 'ben' => 'ben',
/*Berber (Other)*/          'ber' => 'ber',
/*Bhojpuri*/                'bho' => 'bho',
/*Bihari*/                  'bih' => 'bih',
/*Bikol*/                   'bik' => 'bik',
/*Bini*/                    'bin' => 'bin',
/*Bislama*/                 'bis' => 'bis',
/*Siksika*/                 'bla' => 'bla',
/*Bantu (Other)*/           'bnt' => 'bnt',
/*Bosnian*/                 'bos' => 'bs',
/*Braj*/                    'bra' => 'bra',
/*Breton*/                  'bre' => 'br',
/*Batak (Indonesia)*/       'btk' => 'btk',
/*Buriat*/                  'bua' => 'bua',
/*Buginese*/                'bug' => 'bug',
/*Bulgarian*/               'bul' => 'bg',
/*Burmese*/                 'bur' => 'my',
/*Blin; Bilin*/             'byn' => 'byn',
/*Caddo*/                   'cad' => 'cad',
/*Central American Indian*/ 'cai' => 'cai',
/*Carib*/                   'car' => 'car',
/*Catalan; Valencian*/      'cat' => 'ca',
/*Caucasian (Other)*/       'cau' => 'cau',
/*Cebuano*/                 'ceb' => 'ceb',
/*Celtic (Other)*/          'cel' => 'cel',
/*Chamorro*/                'cha' => 'cha',
/*Chibcha*/                 'chb' => 'chb',
/*Chechen*/                 'che' => 'ce',
/*Chagatai*/                'chg' => 'chg',
/*Chinese*/                 'chi' => 'zh',
/*Chuukese*/                'chk' => 'chk',
/*Mari*/                    'chm' => 'chm',
/*Chinook jargon*/          'chn' => 'chn',
/*Choctaw*/                 'cho' => 'cho',
/*Chipewyan*/               'chp' => 'chp',
/*Cherokee*/                'chr' => 'chr',
/*Church Slavic;
  Old Slavonic;
  Church Slavonic;*/        'chu' => 'cu',
/*Chuvash*/                 'chv' => 'cv',
/*Cheyenne*/                'chy' => 'chy',
/*Chamic languages*/        'cmc' => 'cmc',
/*Coptic*/                  'cop' => 'cop',
/*Cornish*/                 'cor' => 'kw',
/*Corsican*/                'cos' => 'co',
/*Creoles and pidgins,
  English based (Other)*/   'cpe' => 'cpe',
/*Creoles and pidgins,
  French-based (Other)*/    'cpf' => 'cpf',
/*Creoles and pidgins*/     'cpp' => 'cpp',
/*Cree*/                    'cre' => 'cr',
/*Crimean Tatar;
  Crimean Turkish*/         'crh' => 'crh',
/*Creoles and pidgins
  (Other)*/                 'crp' => 'crp',
/*Kashubian*/               'csb' => 'csb',
/*Cushitic (Other)*/        'cus' => 'cus',
/*Czech*/                   'cze' => 'cs',
/*Dakota*/                  'dak' => 'dak',
/*Danish*/                  'dan' => 'da',
/*Dargwa*/                  'dar' => 'dar',
/*Dayak*/                   'day' => 'day',
/*Delaware*/                'del' => 'del',
/*Slave (Athapascan)*/      'den' => 'den',
/*Dogrib*/                  'dgr' => 'dgr',
/*Dinka*/                   'din' => 'din',
/*Divehi*/                  'div' => 'dv',
/*Dogri*/                   'doi' => 'doi',
/*Dravidian (Other)*/       'dra' => 'dra',
/*Lower Sorbian*/           'dsb' => 'dsb',
/*Duala*/                   'dua' => 'dua',
/*Dutch, Middle*/           'dum' => 'dum',
/*Dutch; Flemish*/          'dut' => 'nl',
/*Dyula*/                   'dyu' => 'dyu',
/*Dzongkha*/                'dzo' => 'dzo',
/*Efik*/                    'efi' => 'efi',
/*Egyptian (Ancient)*/      'egy' => 'egy',
/*Ekajuk*/                  'eka' => 'eka',
/*Elamite*/                 'elx' => 'elx',
/*English*/                 'eng' => 'en',
/*English, Middle*/         'enm' => 'enm',
/*Esperanto*/               'epo' => 'eo',
/*Estonian*/                'est' => 'et',
/*Ewe*/                     'ewe' => 'ee',
/*Ewondo*/                  'ewo' => 'ewo',
/*Fang*/                    'fan' => 'fan',
/*Faroese*/                 'fao' => 'fo',
/*Fanti*/                   'fat' => 'fat',
/*Fijian*/                  'fij' => 'fij',
/*Filipino; Pilipino*/      'fil' => 'fil',
/*Finnish*/                 'fin' => 'fi',
/*Finno-Ugrian (Other)*/    'fiu' => 'fiu',
/*Fon*/                     'fon' => 'fon',
/*French*/                  'fre' => 'fr',
/*French, Middle*/          'frm' => 'frm',
/*French, Old*/             'fro' => 'fro',
/*Frisian*/                 'fry' => 'fy',
/*Fulah*/                   'ful' => 'ff',
/*Friulian*/                'fur' => 'fur',
/*Ga*/                      'gaa' => 'gaa',
/*Gayo*/                    'gay' => 'gay',
/*Gbaya*/                   'gba' => 'gba',
/*Germanic (Other)*/        'gem' => 'gem',
/*Georgian*/                'geo' => 'ka',
/*German*/                  'ger' => 'de',
/*Geez*/                    'gez' => 'gez',
/*Gilbertese*/              'gil' => 'gil',
/*Gaelic;
  Scottish Gaelic*/         'gla' => 'gd',
/*Irish*/                   'gle' => 'ga',
/*Galician*/                'glg' => 'gl',
/*Manx*/                    'glv' => 'gv',
/*German, Middle High*/     'gmh' => 'gmh',
/*German, Old High*/        'goh' => 'goh',
/*Gondi*/                   'gon' => 'gon',
/*Gorontalo*/               'gor' => 'gor',
/*Gothic*/                  'got' => 'got',
/*Grebo*/                   'grb' => 'grb',
/*Greek, Ancient*/          'grc' => 'grc',
/*Greek, Modern*/           'gre' => 'gre',
/*Guarani*/                 'grn' => 'gn',
/*Gujarati*/                'guj' => 'gu',
/*Gwich�in*/                'gwi' => 'gwi',
/*Haida*/                   'hai' => 'hai',
/*Haitian;
  Haitian Creole*/          'hat' => 'ht',
/*Hausa*/                   'hau' => 'ha',
/*Hawaiian*/                'haw' => 'haw',
/*Hebrew*/                  'heb' => 'he',
/*Herero*/                  'her' => 'hz',
/*Hiligaynon*/              'hil' => 'hil',
/*Himachali*/               'him' => 'him',
/*Hindi*/                   'hin' => 'hi',
/*Hmong*/                   'hmn' => 'hmn',
/*Hiri Motu*/               'hmo' => 'ho',
/*Upper Sorbian*/           'hsb' => 'hsb',
/*Hungarian*/               'hun' => 'hu',
/*Hupa*/                    'hup' => 'hup',
/*Iban*/                    'iba' => 'iba',
/*Igbo*/                    'ibo' => 'ibo',
/*Icelandic*/               'ice' => 'is',
/*Ido*/                     'ido' => 'io',
/*Sichuan Yi*/              'iii' => 'ii',
/*Ijo*/                     'ijo' => 'ijo',
/*Inuktitut*/               'iku' => 'iku',
/*Interlingue*/             'ile' => 'ile',
/*Iloko*/                   'ilo' => 'ilo',
/*Interlingua*/             'ina' => 'ia',
/*Indic (Other)*/           'inc' => 'inc',
/*Indonesian*/              'ind' => 'ind',
/*Indo-European (Other)*/   'ine' => 'ine',
/*Ingush*/                  'inh' => 'inh',
/*Inupiaq*/                 'ipk' => 'ipk',
/*Iranian (Other)*/         'ira' => 'ira',
/*Iroquoian languages*/     'iro' => 'iro',
/*Italian*/                 'ita' => 'ita',
/*Javanese*/                'jav' => 'jav',
/*Lojban*/                  'jbo' => 'jbo',
/*Japanese*/                'jpn' => 'jpn',
/*Judeo-Persian*/           'jpr' => 'jpr',
/*Judeo-Arabic*/            'jrb' => 'jrb',
/*Kara-Kalpak*/             'kaa' => 'kaa',
/*Kabyle*/                  'kab' => 'kab',
/*Kachin*/                  'kac' => 'kac',
/*Kalaallisut; Greenlandic*/'kal' => 'kal',
/*Kamba*/                   'kam' => 'kam',
/*Kannada*/                 'kan' => 'kan',
/*Karen*/                   'kar' => 'kar',
/*Kashmiri*/                'kas' => 'kas',
/*Kanuri*/                  'kau' => 'kau',
/*Kawi*/                    'kaw' => 'kaw',
/*Kazakh*/                  'kaz' => 'kaz',
/*Kabardian*/               'kbd' => 'kbd',
/*Khasi*/                   'kha' => 'kha',
/*Khoisan (Other)*/         'khi' => 'khi',
/*Khmer*/                   'khm' => 'khm',
/*Khotanese*/               'kho' => 'kho',
/*Kikuyu; Gikuyu*/          'kik' => 'kik',
/*Kinyarwanda*/             'kin' => 'kin',
/*Kirghiz*/                 'kir' => 'kir',
/*Kimbundu*/                'kmb' => 'kmb',
/*Konkani*/                 'kok' => 'kok',
/*Komi*/                    'kom' => 'kom',
/*Kongo*/                   'kon' => 'koo',
/*Korean*/                  'kor' => 'ko',
/*Kosraean*/                'kos' => 'kos',
/*Kpelle*/                  'kpe' => 'kpe',
/*Karachay-Balkar*/         'krc' => 'krc',
/*Kru*/                     'kro' => 'kro',
/*Kurukh*/                  'kru' => 'kru',
/*Kuanyama; Kwanyama*/      'kua' => 'kua',
/*Kumyk*/                   'kum' => 'kum',
/*Kurdish*/                 'kur' => 'ku',
/*Kutenai*/                 'kut' => 'kut',
/*Ladino*/                  'lad' => 'lad',
/*Lahnda*/                  'lah' => 'lah',
/*Lamba*/                   'lam' => 'lam',
/*Lao*/                     'lao' => 'lo',
/*Latin*/                   'lat' => 'lat',
/*Latvian*/                 'lav' => 'lav',
/*Lezghian*/                'lez' => 'lez',
/*Limburgan;
  Limburger;
  Limburgish*/              'lim' => 'lim',
/*Lingala*/                 'lin' => 'lin',
/*Lithuanian*/              'lit' => 'lt',
/*Mongo*/                   'lol' => 'lol',
/*Lozi*/                    'loz' => 'loz',
/*Luxembourgish;
  Letzeburgesch*/           'ltz' => 'ltz',
/*Luba-Lulua*/              'lua' => 'lua',
/*Luba-Katanga*/            'lub' => 'lub',
/*Ganda*/                   'lug' => 'lug',
/*Luiseno*/                 'lui' => 'lui',
/*Lunda*/                   'lun' => 'lun',
/*Luo (Kenya and Tanzania)*/'luo' => 'luo',
/*Lushai*/                  'lus' => 'lus',
/*Macedonian*/              'mac' => 'mac',
/*Madurese*/                'mad' => 'mad',
/*Magahi*/                  'mag' => 'mag',
/*Marshallese*/             'mah' => 'mah',
/*Maithili*/                'mai' => 'mai',
/*Makasar*/                 'mak' => 'mak',
/*Malayalam*/               'mal' => 'mal',
/*Mandingo*/                'man' => 'man',
/*Maori*/                   'mao' => 'mi',
/*Austronesian (Other)*/    'map' => 'map',
/*Marathi*/                 'mar' => 'mar',
/*Masai*/                   'mas' => 'mas',
/*Malay*/                   'may' => 'ms',
/*Moksha*/                  'mdf' => 'mdf',
/*Mandar*/                  'mdr' => 'mdr',
/*Mende*/                   'men' => 'men',
/*Irish, Middle*/           'mga' => 'mga',
/*Micmac*/                  'mic' => 'mic',
/*Minangkabau*/             'min' => 'min',
/*Mon-Khmer (Other)*/       'mkh' => 'mkh',
/*Malagasy*/                'mlg' => 'mlg',
/*Maltese*/                 'mlt' => 'mlt',
/*Manchu*/                  'mnc' => 'mnc',
/*Manipuri*/                'mni' => 'mni',
/*Manobo languages*/        'mno' => 'mno',
/*Mohawk*/                  'moh' => 'moh',
/*Moldavian*/               'mol' => 'mol',
/*Mongolian*/               'mon' => 'mon',
/*Mossi*/                   'mos' => 'mos',
/*unda languages*/          'mun' => 'mun',
/*Creek*/                   'mus' => 'mus',
/*Mirandese*/               'mwl' => 'mwl',
/*Marwari*/                 'mwr' => 'mwr',
/*Mayan languages*/         'myn' => 'myn',
/*Erzya*/                   'myv' => 'myv',
/*Nahuatl*/                 'nah' => 'nah',
/*North American Indian*/   'nai' => 'nai',
/*Neapolitan*/              'nap' => 'nap',
/*Nauru*/                   'nau' => 'nau',
/*Navajo; Navaho*/          'nav' => 'nav',
/*South Ndebele*/           'nbl' => 'nbl',
/*North Ndebele*/           'nde' => 'nde',
/*Ndonga*/                  'ndo' => 'ndo',
/*Low German; Low Saxon*/   'nds' => 'nds',
/*Nepali*/                  'nep' => 'nep',
/*Newari; Nepal Bhasa*/     'new' => 'new',
/*Nias*/                    'nia' => 'nia',
/*Niger-Kordofanian*/       'nic' => 'nic',
/*Niuean*/                  'niu' => 'niu',
/*Norwegian Nynorsk*/       'nno' => 'nno',
/*Norwegian Bokm�l*/        'nob' => 'nob',
/*Nogai*/                   'nog' => 'nog',
/*Norse, Old*/              'non' => 'non',
/*Norwegian*/               'nor' => 'nor',
/*Sotho, Northern*/         'nso' => 'nso',
/*Nubian languages'*/       'nub' => 'nub',
/*Classical Newari;
  Old Newari;
  Classical Nepal Bhasa*/   'nwc' => 'nwc',
/*Chichewa; Chewa; Nyanja*/ 'nya' => 'nya',
/*Nyamwezi*/                'nym' => 'nym',
/*Nyankole*/                'nyn' => 'nyn',
/*Nyoro*/                   'nyo' => 'nyo',
/*Nzima*/                   'nzi' => 'nzi',
/*Occitan; Proven�al*/      'oci' => 'oci',
/*Ojibwa*/                  'oji' => 'oji',
/*Oriya*/                   'ori' => 'ori',
/*Oromo*/                   'orm' => 'orm',
/*Osage*/                   'osa' => 'osa',
/*Ossetian; Ossetic*/       'oss' => 'oss',
/*Turkish, Ottoman*/        'ota' => 'ota',
/*Otomian languages*/       'oto' => 'oto',
/*Papuan (Other)*/          'paa' => 'paa',
/*Pangasinan*/              'pag' => 'pag',
/*Pahlavi*/                 'pal' => 'pal',
/*Pampanga*/                'pam' => 'pam',
/*Panjabi; Punjabi*/        'pan' => 'pan',
/*Papiamento*/              'pap' => 'pap',
/*Palauan*/                 'pau' => 'pau',
/*Persian, Old*/            'peo' => 'peo',
/*Persian*/                 'per' => 'fa',
/*Philippine (Other)*/      'phi' => 'phi',
/*Phoenician*/              'phn' => 'phn',
/*Pali*/                    'pli' => 'pli',
/*Polish*/                  'pol' => 'pol',
/*Pohnpeian*/               'pon' => 'pon',
/*Portuguese*/              'por' => 'por',
/*Prakrit languages*/       'pra' => 'pra',
/*Proven�al, Old*/          'pro' => 'pro',
/*Pushto*/                  'pus' => 'pus',
/*Quechua*/                 'que' => 'que',
/*Rajasthani*/              'raj' => 'raj',
/*Rapanui*/                 'rap' => 'rap',
/*Rarotongan*/              'rar' => 'rar',
/*Romance (Other)*/         'roa' => 'roa',
/*Raeto-Romance*/           'roh' => 'roh',
/*Romany*/                  'rom' => 'rom',
/*Romanian*/                'rum' => 'ro',
/*Rundi*/                   'run' => 'rn',
/*Aromanian,
  Arumanian,
  Macedo-Romanian*/         'rup' => 'rup',
/*Russian*/                 'rus' => 'ru',
/*Sandawe*/                 'sad' => 'sad',
/*Sango*/                   'sag' => 'sg',
/*Yakut*/                   'sah' => 'sah',
/*South American Indian*/   'sai' => 'sai',
/*Salishan languages*/      'sal' => 'sal',
/*Samaritan Aramaic*/       'sam' => 'sam',
/*Sanskrit*/                'san' => 'sa',
/*Sasak*/                   'sas' => 'sas',
/*Santali*/                 'sat' => 'sat',
/*Serbian*/                 'scc' => 'sr',
/*Sicilian*/                'scn' => 'scn',
/*Scots*/                   'sco' => 'sco',
/*Croatian*/                'scr' => 'scr',
/*Selkup*/                  'sel' => 'sel',
/*Semitic (Other)*/         'sem' => 'sem',
/*Irish, Old*/              'sga' => 'sga',
/*Shan*/                    'shn' => 'shn',
/*Sidamo*/                  'sid' => 'sid',
/*Sinhala; Sinhalese*/      'sin' => 'si',
/*Siouan languages*/        'sio' => 'sio',
/*Sino-Tibetan (Other)*/    'sit' => 'sit',
/*Slavic (Other)*/          'sla' => 'sla',
/*Slovak*/                  'slo' => 'sk',
/*Slovenian*/               'slv' => 'sl',
/*Southern Sami*/           'sma' => 'sma',
/*Northern Sami*/           'sme' => 'se',
/*Sami languages (Other)*/  'smi' => 'smi',
/*Lule Sami*/               'smj' => 'smj',
/*Inari Sami*/              'smn' => 'smn',
/*Samoan*/                  'smo' => 'sm',
/*Skolt Sami*/              'sms' => 'sms',
/*Shona*/                   'sna' => 'sn',
/*Sindhi*/                  'snd' => 'sd',
/*Soninke*/                 'snk' => 'snk',
/*Sogdian*/                 'sog' => 'sog',
/*Somali*/                  'som' => 'so',
/*Songhai*/                 'son' => 'son',
/*Sotho, Southern*/         'sot' => 'st',
/*Spanish; Castilian*/      'spa' => 'es',
/*Sardinian*/               'srd' => 'sc',
/*Serer*/                   'srr' => 'srr',
/*Nilo-Saharan (Other)*/    'ssa' => 'ssa',
/*Swati*/                   'ssw' => 'ss',
/*Sukuma*/                  'suk' => 'suk',
/*Sundanese*/               'sun' => 'su',
/*Susu*/                    'sus' => 'sus',
/*Sumerian*/                'sux' => 'sux',
/*Swahili*/                 'swa' => 'swa',
/*Swedish*/                 'swe' => 'swe',
/*Syriac*/                  'syr' => 'syr',
/*Tahitian*/                'tah' => 'ty',
/*Tai (Other)*/             'tai' => 'tai',
/*Tamil*/                   'tam' => 'ta',
/*Tatar*/                   'tat' => 'tt',
/*Telugu*/                  'tel' => 'te',
/*Timne*/                   'tem' => 'tem',
/*Tereno*/                  'ter' => 'ter',
/*Tetum*/                   'tet' => 'tet',
/*Tajik*/                   'tgk' => 'tg',
/*Tagalog*/                 'tgl' => 'tl',
/*Thai*/                    'tha' => 'th',
/*Tibetan*/                 'tib' => 'bo',
/*Tigre*/                   'tig' => 'tig',
/*Tigrinya*/                'tir' => 'ti',
/*Tiv*/                     'tiv' => 'tiv',
/*Tokelau*/                 'tkl' => 'tkl',
/*Klingon; tlhlngan-Hol*/   'tlh' => 'tlh',
/*Tlingit*/                 'tli' => 'tli',
/*Tamashek*/                'tmh' => 'tmh',
/*Tonga (Nyasa)*/           'tog' => 'tog',
/*Tonga (Tonga Islands)*/   'ton' => 'to',
/*Tok Pisin'*/              'tpi' => 'tpi',
/*Tsimshian*/               'tsi' => ' tsi',
/*Tswana*/                  'tsn' => 'tn',
/*Tsonga*/                  'tso' => 'ts',
/*Turkmen*/                 'tuk' => 'tk',
/*Tumbuka*/                 'tum' => 'tum',
/*Tupi languages*/          'tup' => 'tup',
/*Turkish*/                 'tur' => 'tr',
/*Altaic (Other)*/          'tut' => 'tut',
/*Tuvalu*/                  'tvl' => 'tvl',
/*Twi*/                     'twi' => 'tw',
/*Tuvinian*/                'tyv' => 'tyv',
/*Udmurt*/                  'udm' => 'udm',
/*Ugaritic*/                'uga' => 'uga',
/*Uighur; Uyghur*/          'uig' => 'ug',
/*Ukrainian*/               'ukr' => 'uk',
/*Umbundu*/                 'umb' => 'umb',
/*Urdu*/                    'urd' => 'ur',
/*Uzbek*/                   'uzb' => 'uz',
/*Vai*/                     'vai' => 'vai',
/*Venda*/                   'ven' => 've',
/*Vietnamese*/              'vie' => 'vi',
/*Volap�k*/                 'vol' => 'vo',
/*Votic*/                   'vot' => 'vot',
/*Wakashan languages*/      'wak' => 'wak',
/*Walamo*/                  'wal' => 'wal',
/*Waray*/                   'war' => 'war',
/*Washo*/                   'was' => 'was',
/*Welsh*/                   'wel' => 'cy',
/*Sorbian languages*/       'wen' => 'was',
/*Walloon*/                 'wln' => 'wa',
/*Wolof*/                   'wol' => 'wo',
/*Kalmyk*/                  'xal' => 'xal',
/*Xhosa*/                   'xho' => 'xh',
/*Yao*/                     'yao' => 'yao',
/*Yapese*/                  'yap' => 'yap',
/*Yiddish*/                 'yid' => 'yi',
/*Yoruba*/                  'yor' => 'yo',
/*Yupik languages*/         'ypk' => 'ypk',
/*Zapotec*/                 'zap' => 'zap',
/*Zenaga*/                  'zen' => 'zen',
/*Zhuang; Chuang*/          'zha' => 'za',
/*Zande*/                   'znd' => 'znd',
/*Zulu*/                    'zul' => 'zu',
/*Zuni*/                    'zun' => 'zun');

    var $_l10nCatalog = array(
               'aa'      => array('language' => 'Afar', '3iso639' => 'aar', '2iso639' => 'aa', 'locale' => 'aa', 'localeFallback' => 'aa'),
               'ab'      => array('language' => 'Abkhazian', '3iso639' => 'abk', '2iso639' => 'ab', 'locale' => 'ab', 'localeFallback' => 'ab'),
               'ace'     => array('language' => 'Achinese', '3iso639' => 'ace', '2iso639' => null, 'locale' => 'ace', 'localeFallback' => 'ace'),
               'ach'     => array('language' => 'Acoli', '3iso639' => 'ach', '2iso639' => null, 'locale' => 'ach', 'localeFallback' => 'ach'),
               'ada'     => array('language' => 'Adangme', '3iso639' => 'ada', '2iso639' => null, 'locale' => 'ada', 'localeFallback' => 'ada'),
               'ady'     => array('language' => 'Adyghe; Adygei', '3iso639' => 'ady', '2iso639' => null, 'locale' => 'ady', 'localeFallback' => 'ady'),
               'ae'      => array('language' => 'Avestan', '3iso639' => 'ave', '2iso639' => 'ae', 'locale' => 'ae', 'localeFallback' => 'ae'),
               'af'      => array('language' => 'Afrikaans', '3iso639' => 'afr', '2iso639' => 'af', 'locale' => 'af', 'localeFallback' => 'af'),
               'afa'     => array('language' => 'Afro-Asiatic (Other)', '3iso639' => 'afa', '2iso639' => null, 'locale' => 'afa', 'localeFallback' => 'afa'),
               'afh'     => array('language' => 'Afrihili', '3iso639' => 'afh', '2iso639' => null, 'locale' => 'afh', 'localeFallback' => 'afh'),
               'ain'     => array('language' => 'Ainu', '3iso639' => 'ain', '2iso639' => null, 'locale' => 'ain', 'localeFallback' => 'ain'),
               'ak'      => array('language' => 'Akan', '3iso639' => 'aka', '2iso639' => 'ak', 'locale' => 'ak', 'localeFallback' => 'ak'),
               'akk'     => array('language' => 'Akkadian', '3iso639' => 'akk', '2iso639' => null, 'locale' => 'akk', 'localeFallback' => 'akk'),
               'ale'     => array('language' => 'Aleut', '3iso639' => 'ale', '2iso639' => null, 'locale' => 'ale', 'localeFallback' => 'ale'),
               'alg'     => array('language' => 'Algonquian Languages', '3iso639' => 'alg', '2iso639' => null, 'locale' => 'alg', 'localeFallback' => 'alg'),
               'alt'     => array('language' => 'Southern Altai', '3iso639' => 'alt', '2iso639' => null, 'locale' => 'alt', 'localeFallback' => 'alt'),
               'am'      => array('language' => 'Amharic', '3iso639' => 'amh', '2iso639' => 'am', 'locale' => 'am', 'localeFallback' => 'am'),
               'an'      => array('language' => 'Aragonese', '3iso639' => 'arg', '2iso639' => 'an', 'locale' => 'an', 'localeFallback' => 'an'),
               'ang'     => array('language' => 'English, Old', '3iso639' => 'ang', '2iso639' => null, 'locale' => 'ang', 'localeFallback' => 'ang'),
               'apa'     => array('language' => 'Apache languages', '3iso639' => 'apa', '2iso639' => null, 'locale' => 'apa', 'localeFallback' => 'apa'),
               'ar'      => array('language' => 'Arabic', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar', 'localeFallback' => 'ar'),
               'ar-ae'   => array('language' => 'Arabic (U.A.E.)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_AE', 'localeFallback' => 'ar'),
               'ar-bh'   => array('language' => 'Arabic (Bahrain)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_BH', 'localeFallback' => 'ar'),
               'ar-dz'   => array('language' => 'Arabic (Algeria)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_DZ', 'localeFallback' => 'ar'),
               'ar-eg'   => array('language' => 'Arabic (Egypt)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_EG', 'localeFallback' => 'ar'),
               'ar-iq'   => array('language' => 'Arabic (Iraq)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_IQ', 'localeFallback' => 'ar'),
               'ar-jo'   => array('language' => 'Arabic (Jordan)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_JO', 'localeFallback' => 'ar'),
               'ar-kw'   => array('language' => 'Arabic (Kuwait)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_KW', 'localeFallback' => 'ar'),
               'ar-lb'   => array('language' => 'Arabic (Lebanon)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_LB', 'localeFallback' => 'ar'),
               'ar-ly'   => array('language' => 'Arabic (Libya)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_LY', 'localeFallback' => 'ar'),
               'ar-ma'   => array('language' => 'Arabic (Morocco)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_MA', 'localeFallback' => 'ar'),
               'ar-om'   => array('language' => 'Arabic (Oman)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_OM', 'localeFallback' => 'ar'),
               'ar-qa'   => array('language' => 'Arabic (Qatar)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_QA', 'localeFallback' => 'ar'),
               'ar-sa'   => array('language' => 'Arabic (Saudi Arabia)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_SA', 'localeFallback' => 'ar'),
               'ar-sy'   => array('language' => 'Arabic (Syria)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_SY', 'localeFallback' => 'ar'),
               'ar-tn'   => array('language' => 'Arabic (Tunisia)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_TN', 'localeFallback' => 'ar'),
               'ar-ye'   => array('language' => 'Arabic (Yemen)', '3iso639' => 'ara', '2iso639' => 'ar', 'locale' => 'ar_YE', 'localeFallback' => 'ar'),
               'arc'     => array('language' => 'Aramaic', '3iso639' => 'arc', '2iso639' => null, 'locale' => 'arc', 'localeFallback' => 'arc'),
               'arn'     => array('language' => 'Araucanian', '3iso639' => 'arn', '2iso639' => null, 'locale' => 'arn', 'localeFallback' => 'arn'),
               'arp'     => array('language' => 'Arapaho', '3iso639' => 'arp', '2iso639' => null, 'locale' => 'arp', 'localeFallback' => 'arp'),
               'arw'     => array('language' => 'Arawak', '3iso639' => 'arw', '2iso639' => null, 'locale' => 'arw', 'localeFallback' => 'arw'),
               'as'      => array('language' => 'Assamese', '3iso639' => 'asm', '2iso639' => 'as', 'locale' => 'as', 'localeFallback' => 'as'),
               'ast'     => array('language' => 'Asturian', '3iso639' => 'ast', '2iso639' => null, 'locale' => 'ast', 'localeFallback' => 'ast'),
               'ath'     => array('language' => 'Athapascan languages', '3iso639' => 'ath', '2iso639' => null, 'locale' => 'ath', 'localeFallback' => 'ath'),
               'aus'     => array('language' => 'Australian languages', '3iso639' => 'aus', '2iso639' => null, 'locale' => 'aus', 'localeFallback' => 'aus'),
               'av'      => array('language' => 'Avaric', '3iso639' => 'ava', '2iso639' => 'av', 'locale' => 'av', 'localeFallback' => 'av'),
               'awa'     => array('language' => 'Awadhi', '3iso639' => 'awa', '2iso639' => null, 'locale' => 'awa', 'localeFallback' => 'awa'),
               'ay'      => array('language' => 'Aymara', '3iso639' => 'aym', '2iso639' => null, 'locale' => 'ay', 'localeFallback' => 'ay'),
               'az'      => array('language' => 'Azerbaijani', '3iso639' => 'aze', '2iso639' => 'az', 'locale' => 'az', 'localeFallback' => 'az'),
               'ba'      => array('language' => 'Bashkir', '3iso639' => 'bak', '2iso639' => 'ba', 'locale' => 'ba', 'localeFallback' => 'ba'),
               'bad'     => array('language' => 'Banda', '3iso639' => 'bad', '2iso639' => null, 'locale' => 'bad', 'localeFallback' => 'bad'),
               'bai'     => array('language' => 'Bamileke languages', '3iso639' => 'bai', '2iso639' => null, 'locale' => 'bai', 'localeFallback' => 'bai'),
               'bal'     => array('language' => 'Baluchi', '3iso639' => 'bal', '2iso639' => null, 'locale' => 'bal', 'localeFallback' => 'bal'),
               'bam'     => array('language' => 'Bambara', '3iso639' => 'bam', '2iso639' => null, 'locale' => 'bam', 'localeFallback' => 'bam'),
               'ban'     => array('language' => 'Balinese', '3iso639' => 'ban', '2iso639' => null, 'locale' => 'ban', 'localeFallback' => 'ban'),
               'bas'     => array('language' => 'Basa', '3iso639' => 'bas', '2iso639' => null, 'locale' => 'bas', 'localeFallback' => 'bas'),
               'bat'     => array('language' => 'Baltic (Other)', '3iso639' => 'bat', '2iso639' => null, 'locale' => 'bat', 'localeFallback' => 'bat'),
               'be'      => array('language' => 'Belarusian', '3iso639' => 'bel', '2iso639' => 'be', 'locale' => 'be', 'localeFallback' => 'be'),
               'bej'     => array('language' => 'Beja', '3iso639' => 'bej', '2iso639' => null, 'locale' => 'bej', 'localeFallback' => 'bej'),
               'bel'     => array('language' => 'Belarusian', '3iso639' => 'bel', '2iso639' => null, 'locale' => 'bel', 'localeFallback' => 'bel'),
               'bem'     => array('language' => 'Bemba', '3iso639' => 'bem', '2iso639' => null, 'locale' => 'bem', 'localeFallback' => 'bem'),
               'ben'     => array('language' => 'Bengali', '3iso639' => 'ben', '2iso639' => null, 'locale' => 'ben', 'localeFallback' => 'ben'),
               'ber'     => array('language' => 'Berber (Other)', '3iso639' => 'ber', '2iso639' => null, 'locale' => 'ber', 'localeFallback' => 'ber'),
               'bg'      => array('language' => 'Bulgarian', '3iso639' => 'bul', '2iso639' => 'bg', 'locale' => 'bg', 'localeFallback' => 'bg'),
               'bh'      => array('language' => 'Bihari', '3iso639' => 'bih', '2iso639' => 'bh', 'locale' => 'bh', 'localeFallback' => 'bh'),
               'bho'     => array('language' => 'Bhojpuri', '3iso639' => 'bho', '2iso639' => null, 'locale' => 'bho', 'localeFallback' => 'bho'),
               'bi'      => array('language' => 'Bislama', '3iso639' => 'bis', '2iso639' => 'bi', 'locale' => 'bi', 'localeFallback' => 'bi'),
               'bih'     => array('language' => 'Bihari', '3iso639' => 'bih', '2iso639' => null, 'locale' => 'bih', 'localeFallback' => 'bih'),
               'bik'     => array('language' => 'Bikol', '3iso639' => 'bik', '2iso639' => null, 'locale' => 'bik', 'localeFallback' => 'bik'),
               'bin'     => array('language' => 'Bini', '3iso639' => 'bin', '2iso639' => null, 'locale' => 'bin', 'localeFallback' => 'bin'),
               'bis'     => array('language' => 'Bislama', '3iso639' => 'bis', '2iso639' => null, 'locale' => 'bis', 'localeFallback' => 'bis'),
               'bla'     => array('language' => 'Siksika', '3iso639' => 'bla', '2iso639' => null, 'locale' => 'bla', 'localeFallback' => 'bla'),
               'bm'      => array('language' => 'Bambara', '3iso639' => 'bam', '2iso639' => 'bm', 'locale' => 'bm', 'localeFallback' => 'bm'),
               'bn'      => array('language' => 'Bengali', '3iso639' => 'ben', '2iso639' => 'bn', 'locale' => 'bn', 'localeFallback' => 'bn'),
               'bnt'     => array('language' => 'Bantu (Other)', '3iso639' => 'bnt', '2iso639' => null, 'locale' => 'bnt', 'localeFallback' => 'bnt'),
               'bo'      => array('language' => 'Tibetan', '3iso639' => 'tib', '2iso639' => 'bo', 'locale' => 'bo', 'localeFallback' => 'bo'),
               'br'      => array('language' => 'Breton', '3iso639' => 'bre', '2iso639' => 'br', 'locale' => 'br', 'localeFallback' => 'br'),
               'bra'     => array('language' => 'Braj', '3iso639' => 'bra', '2iso639' => null, 'locale' => 'bra', 'localeFallback' => 'bra'),
               'bs'      => array('language' => 'Bosnian', '3iso639' => 'bos', '2iso639' => 'bs', 'locale' => 'bs', 'localeFallback' => 'bs'),
               'btk'     => array('language' => 'Batak (Indonesia)', '3iso639' => 'btk', '2iso639' => null, 'locale' => 'btk', 'localeFallback' => 'btk'),
               'bua'     => array('language' => 'Buriat', '3iso639' => 'bua', '2iso639' => null, 'locale' => 'bua', 'localeFallback' => 'bua'),
               'bug'     => array('language' => 'Buginese', '3iso639' => 'bug', '2iso639' => null, 'locale' => 'bug', 'localeFallback' => 'bug'),
               'byn'     => array('language' => 'Blin; Bilin', '3iso639' => 'byn', '2iso639' => null, 'locale' => 'byn', 'localeFallback' => 'byn'),
               'ca'      => array('language' => 'Catalan', '3iso639' => 'cat', '2iso639' => 'ca', 'locale' => 'es_CA', 'localeFallback' => 'es_CA'),
               'cad'     => array('language' => 'Caddo', '3iso639' => 'cad', '2iso639' => null, 'locale' => 'cad', 'localeFallback' => 'cad'),
               'cai'     => array('language' => 'Central American Indian (Other)', '3iso639' => 'cai', '2iso639' => null, 'locale' => 'cai', 'localeFallback' => 'cai'),
               'car'     => array('language' => 'Carib', '3iso639' => 'car', '2iso639' => null, 'locale' => 'car', 'localeFallback' => 'car'),
               'cau'     => array('language' => 'Caucasian (Other)', '3iso639' => 'cau', '2iso639' => null, 'locale' => 'cau', 'localeFallback' => 'cau'),
               'ce'      => array('language' => 'Chechen', '3iso639' => 'che', '2iso639' => 'ce', 'locale' => 'ce', 'localeFallback' => 'ce'),
               'ceb'     => array('language' => 'Cebuano', '3iso639' => 'ceb', '2iso639' => null, 'locale' => 'ceb', 'localeFallback' => 'ceb'),
               'cel'     => array('language' => 'Celtic (Other)', '3iso639' => 'cel', '2iso639' => null, 'locale' => 'cel', 'localeFallback' => 'cel'),
               'ch'      => array('language' => 'Chamorro', '3iso639' => 'cha', '2iso639' => 'ch', 'locale' => 'ch', 'localeFallback' => 'ch'),
               'cha'     => array('language' => 'Chamorro', '3iso639' => 'cha', '2iso639' => null, 'locale' => 'cha', 'localeFallback' => 'cha'),
               'chb'     => array('language' => 'Chibcha', '3iso639' => 'chb', '2iso639' => null, 'locale' => 'chb', 'localeFallback' => 'chb'),
               'chg'     => array('language' => 'Chagatai', '3iso639' => 'chg', '2iso639' => null, 'locale' => 'chg', 'localeFallback' => 'chg'),
               'chk'     => array('language' => 'Chuukese', '3iso639' => 'chk', '2iso639' => null, 'locale' => 'chk', 'localeFallback' => 'chk'),
               'chm'     => array('language' => 'Mari', '3iso639' => 'chm', '2iso639' => null, 'locale' => 'chm', 'localeFallback' => 'chm'),
               'chn'     => array('language' => 'Chinook jargon', '3iso639' => 'chn', '2iso639' => null, 'locale' => 'chn', 'localeFallback' => 'chn'),
               'cho'     => array('language' => 'Choctaw', '3iso639' => 'cho', '2iso639' => null, 'locale' => 'cho', 'localeFallback' => 'cho'),
               'chp'     => array('language' => 'Chipewyan', '3iso639' => 'chp', '2iso639' => null, 'locale' => 'chp', 'localeFallback' => 'chp'),
               'chr'     => array('language' => 'Cherokee', '3iso639' => 'chr', '2iso639' => null, 'locale' => 'chr', 'localeFallback' => 'chr'),
               'chy'     => array('language' => 'Cheyenne', '3iso639' => 'chy', '2iso639' => null, 'locale' => 'chy', 'localeFallback' => 'chy'),
               'cmc'     => array('language' => 'Chamic languages', '3iso639' => 'cmc', '2iso639' => null, 'locale' => 'cmc', 'localeFallback' => 'cmc'),
               'co'      => array('language' => 'Corsican', '3iso639' => 'cos', '2iso639' => 'co', 'locale' => 'co', 'localeFallback' => 'co'),
               'cop'     => array('language' => 'Coptic', '3iso639' => 'cop', '2iso639' => null, 'locale' => 'cop', 'localeFallback' => 'cop'),
               'cpe'     => array('language' => 'Creoles and pidgins, English based (Other)', '3iso639' => 'cpe', '2iso639' => null, 'locale' => 'cpe', 'localeFallback' => 'cpe'),
               'cpf'     => array('language' => 'Creoles and pidgins, French-based (Other)', '3iso639' => 'cpf', '2iso639' => null, 'locale' => 'cpf', 'localeFallback' => 'cpf'),
               'cpp'     => array('language' => 'Creoles and pidgins', '3iso639' => 'cpp', '2iso639' => null, 'locale' => 'cpp', 'localeFallback' => 'cpp'),
               'cr'      => array('language' => 'Cree', '3iso639' => 'cre', '2iso639' => 'cr', 'locale' => 'cr', 'localeFallback' => 'cr'),
               'crh'     => array('language' => 'Crimean Tatar; Crimean Turkish', '3iso639' => 'crh', '2iso639' => null, 'locale' => 'crh', 'localeFallback' => 'crh'),
               'crp'     => array('language' => 'Creoles and pidgins (Other)', '3iso639' => 'crp', '2iso639' => null, 'locale' => 'crp', 'localeFallback' => 'crp'),
               'cs'      => array('language' => 'Czech', '3iso639' => 'cze', '2iso639' => 'cs', 'locale' => 'cs', 'localeFallback' => 'cs'),
               'csb'     => array('language' => 'Kashubian', '3iso639' => 'csb', '2iso639' => null, 'locale' => 'csb', 'localeFallback' => 'csb'),
               'cu'      => array('language' => 'Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic', '3iso639' => 'chu', '2iso639' => 'cu', 'locale' => 'cu', 'localeFallback' => 'cu'),
               'cus'     => array('language' => 'Cushitic (Other)', '3iso639' => 'cus', '2iso639' => null, 'locale' => 'cus', 'localeFallback' => 'cus'),
               'cv'      => array('language' => 'Chuvash', '3iso639' => 'chv', '2iso639' => 'cv', 'locale' => 'cv', 'localeFallback' => 'cv'),
               'cy'      => array('language' => 'Welsh', '3iso639' => 'wel', '2iso639' => 'cy', 'locale' => 'cy', 'localeFallback' => 'cy'),
               'da'      => array('language' => 'Danish', '3iso639' => 'dan', '2iso639' => 'da', 'locale' => 'da', 'localeFallback' => 'da'),
               'dak'     => array('language' => 'Dakota', '3iso639' => 'dak', '2iso639' => null, 'locale' => 'dak', 'localeFallback' => 'dak'),
               'dar'     => array('language' => 'Dargwa', '3iso639' => 'dar', '2iso639' => null, 'locale' => 'dar', 'localeFallback' => 'dar'),
               'day'     => array('language' => 'Dayak', '3iso639' => 'day', '2iso639' => null, 'locale' => 'day', 'localeFallback' => 'day'),
               'de'      => array('language' => 'German (Germany)', '3iso639' => 'ger', '2iso639' => 'de', 'locale' => 'de_DE', 'localeFallback' => 'de_DE'),
               'de-at'   => array('language' => 'German (Austria)', '3iso639' => 'ger', '2iso639' => 'de', 'locale' => 'de_AT', 'localeFallback' => 'de_DE'),
               'de-ch'   => array('language' => 'German (Switzerland)', '3iso639' => 'ger', '2iso639' => 'de', 'locale' => 'de_CH', 'localeFallback' => 'de_DE'),
               'de-de'   => array('language' => 'German (Germany)', '3iso639' => 'ger', '2iso639' => 'de', 'locale' => 'de_DE', 'localeFallback' => 'de_DE'),
               'de-li'   => array('language' => 'German (Liechtenstein)', '3iso639' => 'ger', '2iso639' => 'de', 'locale' => 'de_LI', 'localeFallback' => 'de_DE'),
               'de-lu'   => array('language' => 'German (luxembourg)', '3iso639' => 'ger', '2iso639' => 'de', 'locale' => 'de_LU', 'localeFallback' => 'de_DE'),
               'del'     => array('language' => 'Delaware', '3iso639' => 'del', '2iso639' => null, 'locale' => 'del', 'localeFallback' => 'del'),
               'den'     => array('language' => 'Slave (Athapascan)', '3iso639' => 'den', '2iso639' => null, 'locale' => 'den', 'localeFallback' => 'den'),
               'dgr'     => array('language' => 'Dogrib', '3iso639' => 'dgr', '2iso639' => null, 'locale' => 'dgr', 'localeFallback' => 'dgr'),
               'din'     => array('language' => 'Dinka', '3iso639' => 'din', '2iso639' => null, 'locale' => 'din', 'localeFallback' => 'din'),
               'doi'     => array('language' => 'Dogri', '3iso639' => 'doi', '2iso639' => null, 'locale' => 'doi', 'localeFallback' => 'doi'),
               'dra'     => array('language' => 'Dravidian (Other)', '3iso639' => 'dra', '2iso639' => null, 'locale' => 'dra', 'localeFallback' => 'dra'),
               'dsb'     => array('language' => 'Lower Sorbian', '3iso639' => 'dsb', '2iso639' => null, 'locale' => 'dsb', 'localeFallback' => 'dsb'),
               'dua'     => array('language' => 'Duala', '3iso639' => 'dua', '2iso639' => null, 'locale' => 'dua', 'localeFallback' => 'dua'),
               'dum'     => array('language' => 'Dutch, Middle', '3iso639' => 'dum', '2iso639' => null, 'locale' => 'dum', 'localeFallback' => 'dum'),
               'dv'      => array('language' => 'Divehi', '3iso639' => 'div', '2iso639' => 'dv', 'locale' => 'dv', 'localeFallback' => 'dv'),
               'dyu'     => array('language' => 'Dyula', '3iso639' => 'dyu', '2iso639' => null, 'locale' => 'dyu', 'localeFallback' => 'dyu'),
               'dz'      => array('language' => 'Dzongkha', '3iso639' => 'dzo', '2iso639' => 'dz', 'locale' => 'dz', 'localeFallback' => 'dz'),
               'dzo'     => array('language' => 'Dzongkha', '3iso639' => 'dzo', '2iso639' => null, 'locale' => 'dzo', 'localeFallback' => 'dzo'),
               'ee'      => array('language' => 'Ewe', '3iso639' => 'ewe', '2iso639' => 'ee', 'locale' => 'ee', 'localeFallback' => 'ee'),
               'efi'     => array('language' => 'Efik', '3iso639' => 'efi', '2iso639' => null, 'locale' => 'efi', 'localeFallback' => 'efi'),
               'egy'     => array('language' => 'Egyptian (Ancient)', '3iso639' => 'egy', '2iso639' => null, 'locale' => 'egy', 'localeFallback' => 'egy'),
               'eka'     => array('language' => 'Ekajuk', '3iso639' => 'eka', '2iso639' => null, 'locale' => 'eka', 'localeFallback' => 'eka'),
               'el'      => array('language' => 'Greek', '3iso639' => 'gre', '2iso639' => 'el', 'locale' => 'el', 'localeFallback' => 'div'),
               'elx'     => array('language' => 'Elamite', '3iso639' => 'elx', '2iso639' => null, 'locale' => 'elx', 'localeFallback' => 'elx'),
               'en'      => array('language' => 'English', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_US', 'localeFallback' => 'en_US'),
               'en-au'   => array('language' => 'English (Australia)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_AU', 'localeFallback' => 'en_US'),
               'en-bz'   => array('language' => 'English (Belize)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_BZ', 'localeFallback' => 'en_US'),
               'en-ca'   => array('language' => 'English (Canada)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_CA', 'localeFallback' => 'en_US'),
               'en-gb'   => array('language' => 'English (United Kingdom)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_GB', 'localeFallback' => 'en_US'),
               'en-ie'   => array('language' => 'English (Ireland)','3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_IE', 'localeFallback' => 'en_US'),
               'en-jm'   => array('language' => 'English (Jamaica)','3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_JM', 'localeFallback' => 'en_US'),
               'en-nz'   => array('language' => 'English (New Zealand)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_NZ', 'localeFallback' => 'en_US'),
               'en-ph'   => array('language' => 'English (Philippines)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_PH', 'localeFallback' => 'en_US'),
               'en-tt'   => array('language' => 'English (Trinidad)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_TT', 'localeFallback' => 'en_US'),
               'en-us'   => array('language' => 'English (United States)','3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_US', 'localeFallback' => 'en_US'),
               'en-za'   => array('language' => 'English (South Africa)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_ZA', 'localeFallback' => 'en_US'),
               'en-zw'   => array('language' => 'English (Zimbabwe)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_ZW', 'localeFallback' => 'en_US'),
               'enm'     => array('language' => 'English, Middle', '3iso639' => 'enm', '2iso639' => null, 'locale' => 'enm', 'localeFallback' => 'enm'),
               'eo'      => array('language' => 'Esperanto', '3iso639' => 'epo', '2iso639' => 'eo', 'locale' => 'eo', 'localeFallback' => 'eo'),
               'es'      => array('language' => 'Spanish (Spain)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es', 'localeFallback' => 'es'),
               'es-ar'   => array('language' => 'Spanish (Argentina)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_AR', 'localeFallback' => 'es'),
               'es-bo'   => array('language' => 'Spanish (Bolivia)','3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_BO', 'localeFallback' => 'es'),
               'es-cl'   => array('language' => 'Spanish (Chile)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_CL', 'localeFallback' => 'es'),
               'es-co'   => array('language' => 'Spanish (Colombia)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_CO', 'localeFallback' => 'es'),
               'es-cr'   => array('language' => 'Spanish (Costa Rica)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_CR', 'localeFallback' => 'es'),
               'es-do'   => array('language' => 'Spanish (Dominican Republic)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_DO', 'localeFallback' => 'es'),
               'es-ec'   => array('language' => 'Spanish (Ecuador)','3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_EC', 'localeFallback' => 'es'),
               'es-gt'   => array('language' => 'Spanish (Guatemala)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_GT', 'localeFallback' => 'es'),
               'es-hn'   => array('language' => 'Spanish (Honduras)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_HN', 'localeFallback' => 'es'),
               'es-mx'   => array('language' => 'Spanish (Mexico)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_MX', 'localeFallback' => 'es'),
               'es-ni'   => array('language' => 'Spanish (Nicaragua)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_NI', 'localeFallback' => 'es'),
               'es-pa'   => array('language' => 'Spanish (Panama)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_PA', 'localeFallback' => 'es'),
               'es-pe'   => array('language' => 'Spanish (Peru)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_PE', 'localeFallback' => 'es'),
               'es-pr'   => array('language' => 'Spanish (Puerto Rico)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_PR', 'localeFallback' => 'es'),
               'es-py'   => array('language' => 'Spanish (Paraguay)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_PY', 'localeFallback' => 'es'),
               'es-sv'   => array('language' => 'Spanish (El Salvador)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_SV', 'localeFallback' => 'es'),
               'es-us'   => array('language' => 'Spanish (United States)','3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_US', 'localeFallback' => 'es'),
               'es-uy'   => array('language' => 'Spanish (Uruguay)','3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_UY', 'localeFallback' => 'es'),
               'es-ve'   => array('language' => 'Spanish (Venezuela)', '3iso639' => 'spa', '2iso639' => 'es', 'locale' => 'es_VE', 'localeFallback' => 'es'),
               'et'      => array('language' => 'Estonian', '3iso639' => 'est', '2iso639' => 'et', 'locale' => 'et', 'localeFallback' => 'et'),
               'eu'      => array('language' => 'Basque', '3iso639' => 'baq', '2iso639' => 'eu', 'locale' => 'eu', 'localeFallback' => 'eu'),
               'ewo'     => array('language' => 'Ewondo', '3iso639' => 'ewo', '2iso639' => null, 'locale' => 'ewo', 'localeFallback' => 'ewo'),
               'fa'      => array('language' => 'Persian', '3iso639' => 'per', '2iso639' => 'fa', 'locale' => 'fa', 'localeFallback' => 'fa'),
               'fan'     => array('language' => 'Fang', '3iso639' => 'fan', '2iso639' => null, 'locale' => 'fan', 'localeFallback' => 'fan'),
               'fat'     => array('language' => 'Fanti', '3iso639' => 'fat', '2iso639' => null, 'locale' => 'fat', 'localeFallback' => 'fat'),
               'ff'      => array('language' => 'Fulah', '3iso639' => 'ful', '2iso639' => 'ff', 'locale' => 'ff', 'localeFallback' => 'ff'),
               'fi'      => array('language' => 'Finnish', '3iso639' => 'fin', '2iso639' => 'fi', 'locale' => 'fi', 'localeFallback' => 'fi'),
               'fil'     => array('language' => 'Filipino; Pilipino', '3iso639' => 'fil', '2iso639' => null, 'locale' => 'fil', 'localeFallback' => 'fil'),
               'fiu'     => array('language' => 'Finno-Ugrian (Other)', '3iso639' => 'fiu', '2iso639' => null, 'locale' => 'fiu', 'localeFallback' => 'fiu'),
               'fj'      => array('language' => 'Fijian', '3iso639' => 'fij', '2iso639' => 'fj', 'locale' => 'fj', 'localeFallback' => 'fj'),
               'fo'      => array('language' => 'Faeroese', '3iso639' => 'fao', '2iso639' => 'fo', 'locale' => 'fo', 'localeFallback' => 'fo'),
               'fon'     => array('language' => 'Fon', '3iso639' => 'fon', '2iso639' => null, 'locale' => 'fon', 'localeFallback' => 'fon'),
               'fr'      => array('language' => 'French (France)', '3iso639' => 'fre', '2iso639' => 'fr', 'locale' => 'fr', 'localeFallback' => 'fr'),
               'fr-be'   => array('language' => 'French (Belgium)', '3iso639' => 'fre', '2iso639' => 'fr', 'locale' => 'fr_BE', 'localeFallback' => 'fr'),
               'fr-ca'   => array('language' => 'French (Canada)', '3iso639' => 'fre', '2iso639' => 'fr', 'locale' => 'fr_CA', 'localeFallback' => 'fr'),
               'fr-ch'   => array('language' => 'French (Switzerland)', '3iso639' => 'fre', '2iso639' => 'fr', 'locale' => 'fr_CH', 'localeFallback' => 'fr'),
               'fr-lu'   => array('language' => 'French (Luxembourg)', '3iso639' => 'fre', '2iso639' => 'fr', 'locale' => 'fr_LU', 'localeFallback' => 'fr'),
               'fr-mc'   => array('language' => 'French (Monaco)', '3iso639' => 'fre', '2iso639' => 'fr', 'locale' => 'fr_MC', 'localeFallback' => 'fr'),
               'frm'     => array('language' => 'French, Middle', '3iso639' => 'frm', '2iso639' => null, 'locale' => 'frm', 'localeFallback' => 'frm'),
               'fro'     => array('language' => 'French, Old', '3iso639' => 'fro', '2iso639' => null, 'locale' => 'fro', 'localeFallback' => 'fro'),
               'fur'     => array('language' => 'Friulian', '3iso639' => 'fur', '2iso639' => null, 'locale' => 'fur', 'localeFallback' => 'fur'),
               'fy'      => array('language' => 'Frisian', '3iso639' => 'fry', '2iso639' => 'fy', 'locale' => 'fy', 'localeFallback' => 'fy'),
               'ga'      => array('language' => 'Irish', '3iso639' => 'gle', '2iso639' => 'ga', 'locale' => 'ga', 'localeFallback' => 'ga'),
               'gaa'     => array('language' => 'Ga', '3iso639' => 'gaa', '2iso639' => null, 'locale' => 'gaa', 'localeFallback' => 'gaa'),
               'gay'     => array('language' => 'Gayo', '3iso639' => 'gay', '2iso639' => null, 'locale' => 'gay', 'localeFallback' => 'gay'),
               'gba'     => array('language' => 'Gbaya', '3iso639' => 'gba', '2iso639' => null, 'locale' => 'gba', 'localeFallback' => 'gba'),
               'gd'      => array('language' => 'Gaelic, Hiberno-Scottish', '3iso639' => 'ghc', '2iso639' => 'gd', 'locale' => 'gd', 'localeFallback' => 'gd'),
               'gem'     => array('language' => 'Germanic (Other)', '3iso639' => 'gem', '2iso639' => null, 'locale' => 'gem', 'localeFallback' => 'gem'),
               'gez'     => array('language' => 'Geez', '3iso639' => 'gez', '2iso639' => null, 'locale' => 'gez', 'localeFallback' => 'gez'),
               'gil'     => array('language' => 'Gilbertese', '3iso639' => 'gil', '2iso639' => null, 'locale' => 'gil', 'localeFallback' => 'gil'),
               'gl'      => array('language' => 'Galician', '3iso639' => 'glg', '2iso639' => 'gl', 'locale' => 'gl', 'localeFallback' => 'gl'),
               'gmh'     => array('language' => 'German, Middle High', '3iso639' => 'gmh', '2iso639' => null, 'locale' => 'gmh', 'localeFallback' => 'gmh'),
               'gn'      => array('language' => 'Guarani', '3iso639' => 'grn', '2iso639' => 'gn', 'locale' => 'gn', 'localeFallback' => 'gn'),
               'goh'     => array('language' => 'German, Old High', '3iso639' => 'goh', '2iso639' => null, 'locale' => 'goh', 'localeFallback' => 'goh'),
               'gon'     => array('language' => 'Gondi', '3iso639' => 'gon', '2iso639' => null, 'locale' => 'gon', 'localeFallback' => 'gon'),
               'gor'     => array('language' => 'Gorontalo', '3iso639' => 'gor', '2iso639' => null, 'locale' => 'gor', 'localeFallback' => 'gor'),
               'got'     => array('language' => 'Gothic', '3iso639' => 'got', '2iso639' => null, 'locale' => 'got', 'localeFallback' => 'got'),
               'grb'     => array('language' => 'Grebo', '3iso639' => 'grb', '2iso639' => null, 'locale' => 'grb', 'localeFallback' => 'grb'),
               'grc'     => array('language' => 'Greek, Ancient', '3iso639' => 'grc', '2iso639' => null, 'locale' => 'grc', 'localeFallback' => 'grc'),
               'gre'     => array('language' => 'Greek, Modern', '3iso639' => 'gre', '2iso639' => null, 'locale' => 'gre', 'localeFallback' => 'gre'),
               'gu'      => array('language' => 'Gujarati', '3iso639' => 'guj', '2iso639' => 'gu', 'locale' => 'gu', 'localeFallback' => 'gu'),
               'gv'      => array('language' => 'Manx', '3iso639' => 'glv', '2iso639' => 'gv', 'locale' => 'gv', 'localeFallback' => 'gv'),
               'gwi'     => array('language' => 'Gwich�in', '3iso639' => 'gwi', '2iso639' => null, 'locale' => 'gwi', 'localeFallback' => 'gwi'),
               'ha'      => array('language' => 'Hausa', '3iso639' => 'hau', '2iso639' => 'ha', 'locale' => 'ha', 'localeFallback' => 'ha'),
               'hai'     => array('language' => 'Haida', '3iso639' => 'hai', '2iso639' => null, 'locale' => 'hai', 'localeFallback' => 'hai'),
               'haw'     => array('language' => 'Hawaiian', '3iso639' => 'haw', '2iso639' => null, 'locale' => 'haw', 'localeFallback' => 'haw'),
               'he'      => array('language' => 'Hebrew', '3iso639' => 'heb', '2iso639' => 'he', 'locale' => 'he', 'localeFallback' => 'he'),
               'hi'      => array('language' => 'Hindi', '3iso639' => 'hin', '2iso639' => 'hi', 'locale' => 'hi', 'localeFallback' => 'hi'),
               'hil'     => array('language' => 'Hiligaynon', '3iso639' => 'hil', '2iso639' => null, 'locale' => 'hil', 'localeFallback' => 'hil'),
               'him'     => array('language' => 'Himachali', '3iso639' => 'him', '2iso639' => null, 'locale' => 'him', 'localeFallback' => 'him'),
               'hmn'     => array('language' => 'Hmong', '3iso639' => 'hmn', '2iso639' => null, 'locale' => 'hmn', 'localeFallback' => 'hmn'),
               'ho'      => array('language' => 'Hiri Motu', '3iso639' => 'hmo', '2iso639' => 'ho', 'locale' => 'ho', 'localeFallback' => 'ho'),
               'hr'      => array('language' => 'Croatian', '3iso639' => 'scr', '2iso639' => 'hr', 'locale' => 'hr', 'localeFallback' => 'hr'),
               'hsb'     => array('language' => 'Upper Sorbian', '3iso639' => 'hsb', '2iso639' => null, 'locale' => 'hsb', 'localeFallback' => 'hsb'),
               'ht'      => array('language' => 'Haitian; Haitian Creole', '3iso639' => 'hat', '2iso639' => 'ht', 'locale' => 'ht', 'localeFallback' => 'ht'),
               'hu'      => array('language' => 'Hungarian', '3iso639' => 'hun', '2iso639' => 'hu', 'locale' => 'hu', 'localeFallback' => 'hu'),
               'hup'     => array('language' => 'Hupa', '3iso639' => 'hup', '2iso639' => null, 'locale' => 'hup', 'localeFallback' => 'hup'),
               'hy'      => array('language' => 'Armenian', '3iso639' => 'arm', '2iso639' => 'hy', 'locale' => 'hy', 'localeFallback' => 'hy'),
               'hz'      => array('language' => 'Herero', '3iso639' => 'her', '2iso639' => 'hz', 'locale' => 'hz', 'localeFallback' => 'hz'),
               'ia'      => array('language' => 'Interlingua (International Auxiliary Language Association)', '3iso639' => 'ina', '2iso639' => 'ia', 'locale' => 'ia', 'localeFallback' => 'ia'),
               'iba'     => array('language' => 'Iban', '3iso639' => 'iba', '2iso639' => null, 'locale' => 'iba', 'localeFallback' => 'iba'),
               'ibo'     => array('language' => 'Igbo', '3iso639' => 'ibo', '2iso639' => null, 'locale' => 'ibo', 'localeFallback' => 'ibo'),
               'id'      => array('language' => 'Indonesian', '3iso639' => 'ind', '2iso639' => 'id', 'locale' => 'id', 'localeFallback' => 'id'),
               'ie'      => array('language' => 'Interlingue', '3iso639' => 'ile', '2iso639' => 'ie', 'locale' => 'ie', 'localeFallback' => 'ie'),
               'ig'      => array('language' => 'Igbo', '3iso639' => 'ibo', '2iso639' => 'ig', 'locale' => 'ig', 'localeFallback' => 'ig'),
               'ii'      => array('language' => 'Sichuan Yi', '3iso639' => 'iii', '2iso639' => 'ii', 'locale' => 'ii', 'localeFallback' => 'ii'),
               'ijo'     => array('language' => 'Ijo', '3iso639' => 'ijo', '2iso639' => null, 'locale' => 'ijo', 'localeFallback' => 'ijo'),
               'ik'      => array('language' => 'Inupiaq', '3iso639' => 'ipk', '2iso639' => 'ik', 'locale' => 'ik', 'localeFallback' => 'ik'),
               'iku'     => array('language' => 'Inuktitut', '3iso639' => 'iku', '2iso639' => null, 'locale' => 'iku', 'localeFallback' => 'iku'),
               'ile'     => array('language' => 'Interlingue', '3iso639' => 'ile', '2iso639' => null, 'locale' => 'ile', 'localeFallback' => 'ile'),
               'ilo'     => array('language' => 'Iloko', '3iso639' => 'ilo', '2iso639' => null, 'locale' => 'ilo', 'localeFallback' => 'ilo'),
               'inc'     => array('language' => 'Indic (Other)', '3iso639' => 'inc', '2iso639' => null, 'locale' => 'inc', 'localeFallback' => 'inc'),
               'ind'     => array('language' => 'Indonesian', '3iso639' => 'ind', '2iso639' => null, 'locale' => 'ind', 'localeFallback' => 'ind'),
               'ine'     => array('language' => 'Indo-European (Other)', '3iso639' => 'ine', '2iso639' => null, 'locale' => 'ine', 'localeFallback' => 'ine'),
               'inh'     => array('language' => 'Ingush', '3iso639' => 'inh', '2iso639' => null, 'locale' => 'inh', 'localeFallback' => 'inh'),
               'io'      => array('language' => 'Ido', '3iso639' => 'ido', '2iso639' => 'io', 'locale' => 'io', 'localeFallback' => 'io'),
               'ipk'     => array('language' => 'Inupiaq', '3iso639' => 'ipk', '2iso639' => null, 'locale' => 'ipk', 'localeFallback' => 'ipk'),
               'ira'     => array('language' => 'Iranian (Other)', '3iso639' => 'ira', '2iso639' => null, 'locale' => 'ira', 'localeFallback' => 'ira'),
               'iro'     => array('language' => 'Iroquoian languages', '3iso639' => 'iro', '2iso639' => null, 'locale' => 'iro', 'localeFallback' => 'iro'),
               'is'      => array('language' => 'Icelandic', '3iso639' => 'ice', '2iso639' => 'is', 'locale' => 'is', 'localeFallback' => 'is'),
               'it'      => array('language' => 'Italian (Italy)', '3iso639' => 'ita', '2iso639' => 'it', 'locale' => 'it', 'localeFallback' => 'it'),
               'it-ch'   => array('language' => 'Italian (Switzerland)', '3iso639' => 'ita', '2iso639' => 'it', 'locale' => 'it_CH', 'localeFallback' => 'it'),
               'ita'     => array('language' => 'Italian', '3iso639' => 'ita', '2iso639' => null, 'locale' => 'ita', 'localeFallback' => 'ita'),
               'iu'      => array('language' => 'Inuktitut', '3iso639' => 'iku', '2iso639' => 'iu', 'locale' => 'iu', 'localeFallback' => 'iu'),
               'ja'      => array('language' => 'Japanese', '3iso639' => 'jpn', '2iso639' => 'ja', 'locale' => 'ja', 'localeFallback' => 'ja'),
               'jav'     => array('language' => 'Javanese', '3iso639' => 'jav', '2iso639' => null, 'locale' => 'jav', 'localeFallback' => 'jav'),
               'jbo'     => array('language' => 'Lojban', '3iso639' => 'jbo', '2iso639' => null, 'locale' => 'jbo', 'localeFallback' => 'jbo'),
               'jpn'     => array('language' => 'Japanese', '3iso639' => 'jpn', '2iso639' => null, 'locale' => 'jpn', 'localeFallback' => 'jpn'),
               'jrb'     => array('language' => 'Judeo-Arabic', '3iso639' => 'jrb', '2iso639' => null, 'locale' => 'jrb', 'localeFallback' => 'jrb'),
               'jv'      => array('language' => 'Javanese', '3iso639' => 'jav', '2iso639' => 'jv', 'locale' => 'jv', 'localeFallback' => 'jv'),
               'ka'      => array('language' => 'Georgian', '3iso639' => 'geo', '2iso639' => 'ka', 'locale' => 'ka', 'localeFallback' => 'ka'),
               'kaa'     => array('language' => 'Kara-Kalpak', '3iso639' => 'kaa', '2iso639' => null, 'locale' => 'kaa', 'localeFallback' => 'kaa'),
               'kab'     => array('language' => 'Kabyle', '3iso639' => 'kab', '2iso639' => null, 'locale' => 'kab', 'localeFallback' => 'kab'),
               'kac'     => array('language' => 'Kachin', '3iso639' => 'kac', '2iso639' => null, 'locale' => 'kac', 'localeFallback' => 'kac'),
               'kal'     => array('language' => 'Kalaallisut; Greenlandic', '3iso639' => 'kal', '2iso639' => null, 'locale' => 'kal', 'localeFallback' => 'kal'),
               'kam'     => array('language' => 'Kamba', '3iso639' => 'kam', '2iso639' => null, 'locale' => 'kam', 'localeFallback' => 'kam'),
               'kan'     => array('language' => 'Kannada', '3iso639' => 'kan', '2iso639' => null, 'locale' => 'kan', 'localeFallback' => 'kan'),
               'kar'     => array('language' => 'Karen', '3iso639' => 'kar', '2iso639' => null, 'locale' => 'kar', 'localeFallback' => 'kar'),
               'kas'     => array('language' => 'Kashmiri', '3iso639' => 'kas', '2iso639' => null, 'locale' => 'kas', 'localeFallback' => 'kas'),
               'kau'     => array('language' => 'Kanuri', '3iso639' => 'kau', '2iso639' => null, 'locale' => 'kau', 'localeFallback' => 'kau'),
               'kaw'     => array('language' => 'Kawi', '3iso639' => 'kaw', '2iso639' => null, 'locale' => 'kaw', 'localeFallback' => 'kaw'),
               'kaz'     => array('language' => 'Kazakh', '3iso639' => 'kaz', '2iso639' => null, 'locale' => 'kaz', 'localeFallback' => 'kaz'),
               'kbd'     => array('language' => 'Kabardian', '3iso639' => 'kbd', '2iso639' => null, 'locale' => 'kbd', 'localeFallback' => 'kbd'),
               'kg'      => array('language' => 'Kongo', '3iso639' => 'kon', '2iso639' => 'kg', 'locale' => 'kg', 'localeFallback' => 'kg'),
               'kha'     => array('language' => 'Khasi', '3iso639' => 'kha', '2iso639' => null, 'locale' => 'kha', 'localeFallback' => 'kha'),
               'khi'     => array('language' => 'Khoisan (Other)', '3iso639' => 'khi', '2iso639' => null, 'locale' => 'khi', 'localeFallback' => 'khi'),
               'khm'     => array('language' => 'Khmer', '3iso639' => 'khm', '2iso639' => null, 'locale' => 'khm', 'localeFallback' => 'khm'),
               'kho'     => array('language' => 'Khotanese', '3iso639' => 'kho', '2iso639' => null, 'locale' => 'kho', 'localeFallback' => 'kho'),
               'ki'      => array('language' => 'Kikuyu; Gikuyu', '3iso639' => 'kik', '2iso639' => 'ki', 'locale' => 'ki', 'localeFallback' => 'ki'),
               'kik'     => array('language' => 'Kikuyu; Gikuyu', '3iso639' => 'kik', '2iso639' => null, 'locale' => 'kik', 'localeFallback' => 'kik'),
               'kin'     => array('language' => 'Kinyarwanda', '3iso639' => 'kin', '2iso639' => null, 'locale' => 'kin', 'localeFallback' => 'kin'),
               'kir'     => array('language' => 'Kirghiz', '3iso639' => 'kir', '2iso639' => null, 'locale' => 'kir', 'localeFallback' => 'kir'),
               'kk'      => array('language' => 'Kazakh', '3iso639' => 'kaz', '2iso639' => 'kk', 'locale' => 'kk', 'localeFallback' => 'kk'),
               'kl'      => array('language' => 'Kalaallisut; Greenlandic', '3iso639' => 'kal', '2iso639' => 'kl', 'locale' => 'kl', 'localeFallback' => 'kl'),
               'km'      => array('language' => 'Khmer', '3iso639' => 'khm', '2iso639' => 'km', 'locale' => 'km', 'localeFallback' => 'km'),
               'kmb'     => array('language' => 'Kimbundu', '3iso639' => 'kmb', '2iso639' => null, 'locale' => 'kmb', 'localeFallback' => 'kmb'),
               'kn'      => array('language' => 'Kannada', '3iso639' => 'kan', '2iso639' => 'kn', 'locale' => 'kn', 'localeFallback' => 'kn'),
               'ko'      => array('language' => 'Korean', '3iso639' => 'kor', '2iso639' => 'ko', 'locale' => 'ko', 'localeFallback' => 'ko'),
               'ko-kp'   => array('language' => 'Korea (North), Dem. Rep', '3iso639' =>  'kor', '2iso639' => 'ko', 'locale' => 'ko_KP', 'localeFallback' => 'ko'),
               'ko-kr'   => array('language' => 'Korea (South)', '3iso639' =>  'kor', '2iso639' => 'ko', 'locale' => 'ko_KR', 'localeFallback' => 'ko'),
               'koi8-r'  => array('language' => 'Russian', '3iso639' => 'rus', '2iso639' => 'ru', 'locale' => 'koi8-r', 'localeFallback' => 'koi8-r'),
               'kok'     => array('language' => 'Konkani', '3iso639' => 'kok', '2iso639' => null, 'locale' => 'kok', 'localeFallback' => 'kok'),
               'kom'     => array('language' => 'Komi', '3iso639' => 'kom', '2iso639' => null, 'locale' => 'kom', 'localeFallback' => 'kom'),
               'kon'     => array('language' => 'Kongo', '3iso639' => 'kon', '2iso639' => null, 'locale' => 'kon', 'localeFallback' => 'kon'),
               'kos'     => array('language' => 'Kosraean', '3iso639' => 'kos', '2iso639' => null, 'locale' => 'kos', 'localeFallback' => 'kos'),
               'kpe'     => array('language' => 'Kpelle', '3iso639' => 'kpe', '2iso639' => null, 'locale' => 'kpe', 'localeFallback' => 'kpe'),
               'kr'      => array('language' => 'Kanuri', '3iso639' => 'kau', '2iso639' => 'kr', 'locale' => 'kr', 'localeFallback' => 'kr'),
               'krc'     => array('language' => 'Karachay-Balkar', '3iso639' => 'krc', '2iso639' => null, 'locale' => 'krc', 'localeFallback' => 'krc'),
               'kro'     => array('language' => 'Kru', '3iso639' => 'kro', '2iso639' => null, 'locale' => 'kro', 'localeFallback' => 'kro'),
               'kru'     => array('language' => 'Kurukh', '3iso639' => 'kru', '2iso639' => null, 'locale' => 'kru', 'localeFallback' => 'kru'),
               'ks'      => array('language' => 'Kashmiri', '3iso639' => 'kas', '2iso639' => 'ks', 'locale' => 'ks', 'localeFallback' => 'ks'),
               'ku'      => array('language' => 'Kurdish', '3iso639' => 'kur', '2iso639' => 'ku', 'locale' => 'ku', 'localeFallback' => 'ku'),
               'kua'     => array('language' => 'Kuanyama; Kwanyama', '3iso639' => 'kua', '2iso639' => null, 'locale' => 'kua', 'localeFallback' => 'kua'),
               'kum'     => array('language' => 'Kumyk', '3iso639' => 'kum', '2iso639' => null, 'locale' => 'kum', 'localeFallback' => 'kum'),
               'kut'     => array('language' => 'Kutenai', '3iso639' => 'kut', '2iso639' => null, 'locale' => 'kut', 'localeFallback' => 'kut'),
               'kv'      => array('language' => 'Komi', '3iso639' => 'kom', '2iso639' => 'kv', 'locale' => 'kv', 'localeFallback' => 'kv'),
               'kw'      => array('language' => 'Cornish', '3iso639' => 'cor', '2iso639' => 'kw', 'locale' => 'kw', 'localeFallback' => 'kw'),
               'ky'      => array('language' => 'Kirghiz', '3iso639' => 'kir', '2iso639' => 'ky', 'locale' => 'ky', 'localeFallback' => 'ky'),
               'la'      => array('language' => 'Latin', '3iso639' => 'lat', '2iso639' => 'la', 'locale' => 'la', 'localeFallback' => 'la'),
               'lad'     => array('language' => 'Ladino', '3iso639' => 'lad', '2iso639' => null, 'locale' => 'lad', 'localeFallback' => 'lad'),
               'lah'     => array('language' => 'Lahnda', '3iso639' => 'lah', '2iso639' => null, 'locale' => 'lah', 'localeFallback' => 'lah'),
               'lam'     => array('language' => 'Lamba', '3iso639' => 'lam', '2iso639' => null, 'locale' => 'lam', 'localeFallback' => 'lam'),
               'lat'     => array('language' => 'Latin', '3iso639' => 'lat', '2iso639' => null, 'locale' => 'lat', 'localeFallback' => 'lat'),
               'lav'     => array('language' => 'Latvian', '3iso639' => 'lav', '2iso639' => null, 'locale' => 'lav', 'localeFallback' => 'lav'),
               'lb'      => array('language' => 'Luxembourgish; Letzeburgesch', '3iso639' => 'ltz', '2iso639' => 'lb', 'locale' => 'lb', 'localeFallback' => 'lb'),
               'lez'     => array('language' => 'Lezghian', '3iso639' => 'lez', '2iso639' => null, 'locale' => 'lez', 'localeFallback' => 'lez'),
               'lg'      => array('language' => 'Ganda', '3iso639' => 'lug', '2iso639' => 'lg', 'locale' => 'lg', 'localeFallback' => 'lg'),
               'li'      => array('language' => 'Limburgan; Limburger; Limburgish', '3iso639' => 'lim', '2iso639' => 'li', 'locale' => 'li', 'localeFallback' => 'li'),
               'lim'     => array('language' => 'Limburgan; Limburger; Limburgish', '3iso639' => 'lim', '2iso639' => null, 'locale' => 'lim', 'localeFallback' => 'lim'),
               'lin'     => array('language' => 'Lingala', '3iso639' => 'lin', '2iso639' => null, 'locale' => 'lin', 'localeFallback' => 'lin'),
               'ln'      => array('language' => 'Lingala', '3iso639' => 'lin', '2iso639' => 'ln', 'locale' => 'ln', 'localeFallback' => 'ln'),
               'lo'      => array('language' => 'Lao', '3iso639' => 'lao', '2iso639' => 'lo', 'locale' => 'lo', 'localeFallback' => 'lo'),
               'lol'     => array('language' => 'Mongo', '3iso639' => 'lol', '2iso639' => null, 'locale' => 'lol', 'localeFallback' => 'lol'),
               'loz'     => array('language' => 'Lozi', '3iso639' => 'loz', '2iso639' => null, 'locale' => 'loz', 'localeFallback' => 'loz'),
               'lt'      => array('language' => 'Lithuanian', '3iso639' => 'lit', '2iso639' => 'lt', 'locale' => 'lt', 'localeFallback' => 'lt'),
               'ltz'     => array('language' => 'Luxembourgish; Letzeburgesch', '3iso639' => 'ltz', '2iso639' => null, 'locale' => 'ltz', 'localeFallback' => 'ltz'),
               'lu'      => array('language' => 'Luba-Katanga', '3iso639' => 'lub', '2iso639' => 'lu', 'locale' => 'lu', 'localeFallback' => 'lu'),
               'lua'     => array('language' => 'Luba-Lulua', '3iso639' => 'lua', '2iso639' => null, 'locale' => 'lua', 'localeFallback' => 'lua'),
               'lub'     => array('language' => 'Luba-Katanga', '3iso639' => 'lub', '2iso639' => null, 'locale' => 'lub', 'localeFallback' => 'lub'),
               'lug'     => array('language' => 'Ganda', '3iso639' => 'lug', '2iso639' => null, 'locale' => 'lug', 'localeFallback' => 'lug'),
               'lui'     => array('language' => 'Luiseno', '3iso639' => 'lui', '2iso639' => null, 'locale' => 'lui', 'localeFallback' => 'lui'),
               'lun'     => array('language' => 'Lunda', '3iso639' => 'lun', '2iso639' => null, 'locale' => 'lun', 'localeFallback' => 'lun'),
               'luo'     => array('language' => 'Luo (Kenya and Tanzania)', '3iso639' => 'luo', '2iso639' => null, 'locale' => 'luo', 'localeFallback' => 'luo'),
               'lus'     => array('language' => 'Lushai', '3iso639' => 'lus', '2iso639' => null, 'locale' => 'lus', 'localeFallback' => 'lus'),
               'lv'      => array('language' => 'Latvian', '3iso639' => 'lav', '2iso639' => 'lv', 'locale' => 'lv', 'localeFallback' => 'lv'),
               'mad'     => array('language' => 'Madurese', '3iso639' => 'mad', '2iso639' => null, 'locale' => 'mad', 'localeFallback' => 'mad'),
               'mag'     => array('language' => 'Magahi', '3iso639' => 'mag', '2iso639' => null, 'locale' => 'mag', 'localeFallback' => 'mag'),
               'mah'     => array('language' => 'Marshallese', '3iso639' => 'mah', '2iso639' => null, 'locale' => 'mah', 'localeFallback' => 'mah'),
               'mai'     => array('language' => 'Maithili', '3iso639' => 'mai', '2iso639' => null, 'locale' => 'mai', 'localeFallback' => 'mai'),
               'mak'     => array('language' => 'Makasar', '3iso639' => 'mak', '2iso639' => null, 'locale' => 'mak', 'localeFallback' => 'mak'),
               'mal'     => array('language' => 'Malayalam', '3iso639' => 'mal', '2iso639' => null, 'locale' => 'mal', 'localeFallback' => 'mal'),
               'man'     => array('language' => 'Mandingo', '3iso639' => 'man', '2iso639' => null, 'locale' => 'man', 'localeFallback' => 'man'),
               'map'     => array('language' => 'Austronesian (Other)', '3iso639' => 'map', '2iso639' => null, 'locale' => 'map', 'localeFallback' => 'map'),
               'mar'     => array('language' => 'Marathi', '3iso639' => 'mar', '2iso639' => null, 'locale' => 'mar', 'localeFallback' => 'mar'),
               'mas'     => array('language' => 'Masai', '3iso639' => 'mas', '2iso639' => null, 'locale' => 'mas', 'localeFallback' => 'mas'),
               'mdf'     => array('language' => 'Moksha', '3iso639' => 'mdf', '2iso639' => null, 'locale' => 'mdf', 'localeFallback' => 'mdf'),
               'mdr'     => array('language' => 'Mandar', '3iso639' => 'mdr', '2iso639' => null, 'locale' => 'mdr', 'localeFallback' => 'mdr'),
               'men'     => array('language' => 'Mende', '3iso639' => 'men', '2iso639' => null, 'locale' => 'men', 'localeFallback' => 'men'),
               'mg'      => array('language' => 'Malagasy', '3iso639' => 'mlg', '2iso639' => 'mg', 'locale' => 'mg', 'localeFallback' => 'mg'),
               'mga'     => array('language' => 'Irish, Middle', '3iso639' => 'mga', '2iso639' => null, 'locale' => 'mga', 'localeFallback' => 'mga'),
               'mh'      => array('language' => 'Marshallese', '3iso639' => 'mah', '2iso639' => 'mh', 'locale' => 'mh', 'localeFallback' => 'mh'),
               'mi'      => array('language' => 'Maori', '3iso639' => 'mao', '2iso639' => 'mi', 'locale' => 'mi', 'localeFallback' => 'mi'),
               'mic'     => array('language' => 'Micmac', '3iso639' => 'mic', '2iso639' => null, 'locale' => 'mic', 'localeFallback' => 'mic'),
               'min'     => array('language' => 'Minangkabau', '3iso639' => 'min', '2iso639' => null, 'locale' => 'min', 'localeFallback' => 'min'),
               'mk'      => array('language' => 'FYRO Macedonian', '3iso639' => 'mac', '2iso639' => 'mk', 'locale' => 'mk', 'localeFallback' => 'mk'),
               'mk-mk'   => array('language' => 'Macedonian', '3iso639' => 'mac', '2iso639' => 'mk', 'locale' => 'mk_MK', 'localeFallback' => 'mk'),
               'mkh'     => array('language' => 'Mon-Khmer (Other)', '3iso639' => 'mkh', '2iso639' => null, 'locale' => 'mkh', 'localeFallback' => 'mkh'),
               'ml'      => array('language' => 'Malayalam', '3iso639' => 'mal', '2iso639' => 'ml', 'locale' => 'ml', 'localeFallback' => 'ml'),
               'mlg'     => array('language' => 'Malagasy', '3iso639' => 'mlg', '2iso639' => null, 'locale' => 'mlg', 'localeFallback' => 'mlg'),
               'mlt'     => array('language' => 'Maltese', '3iso639' => 'mlt', '2iso639' => null, 'locale' => 'mlt', 'localeFallback' => 'mlt'),
               'mn'      => array('language' => 'Mongolian', '3iso639' => 'mon', '2iso639' => 'mn', 'locale' => 'mn', 'localeFallback' => 'mn'),
               'mnc'     => array('language' => 'Manchu', '3iso639' => 'haw', '2iso639' => null, 'locale' => 'haw', 'localeFallback' => 'haw'),
               'mni'     => array('language' => 'Manipuri', '3iso639' => 'mni', '2iso639' => null, 'locale' => 'mni', 'localeFallback' => 'mni'),
               'mno'     => array('language' => 'Manobo languages', '3iso639' => 'mno', '2iso639' => null, 'locale' => 'mno', 'localeFallback' => 'mno'),
               'mo'      => array('language' => 'Moldavian', '3iso639' => 'mol', '2iso639' => 'mo', 'locale' => 'mo', 'localeFallback' => 'mo'),
               'moh'     => array('language' => 'Mohawk', '3iso639' => 'moh', '2iso639' => null, 'locale' => 'moh', 'localeFallback' => 'moh'),
               'mol'     => array('language' => 'Moldavian', '3iso639' => 'mol', '2iso639' => null, 'locale' => 'mol', 'localeFallback' => 'mol'),
               'mon'     => array('language' => 'Mongolian', '3iso639' => 'mon', '2iso639' => null, 'locale' => 'mon', 'localeFallback' => 'mon'),
               'mos'     => array('language' => 'Mossi', '3iso639' => 'mos', '2iso639' => null, 'locale' => 'mos', 'localeFallback' => 'mos'),
               'mr'      => array('language' => 'Marathi', '3iso639' => 'mar', '2iso639' => 'mr', 'locale' => 'mr', 'localeFallback' => 'mr'),
               'ms'      => array('language' => 'Malay', '3iso639' => 'may', '2iso639' => 'ms', 'locale' => 'ms', 'localeFallback' => 'ms'),
               'mt'      => array('language' => 'Maltese', '3iso639' => 'mlt', '2iso639' => 'mt', 'locale' => 'mt', 'localeFallback' => 'mt'),
               'mun'     => array('language' => 'Munda languages', '3iso639' => 'mun', '2iso639' => null, 'locale' => 'mun', 'localeFallback' => 'mun'),
               'mus'     => array('language' => 'Creek', '3iso639' => 'mus', '2iso639' => null, 'locale' => 'mus', 'localeFallback' => 'mus'),
               'mwl'     => array('language' => 'Mirandese', '3iso639' => 'mwl', '2iso639' => null, 'locale' => 'mwl', 'localeFallback' => 'mwl'),
               'mwr'     => array('language' => 'Marwari', '3iso639' => 'mwr', '2iso639' => null, 'locale' => 'mwr', 'localeFallback' => 'mwr'),
               'my'      => array('language' => 'Burmese', '3iso639' => 'bur', '2iso639' => 'my', 'locale' => 'my', 'localeFallback' => 'my'),
               'myn'     => array('language' => 'Mayan languages', '3iso639' => 'myn', '2iso639' => null, 'locale' => 'myn', 'localeFallback' => 'myn'),
               'myv'     => array('language' => 'Erzya', '3iso639' => 'myv', '2iso639' => null, 'locale' => 'myv', 'localeFallback' => 'myv'),
               'na'      => array('language' => 'Nauru', '3iso639' => 'nau', '2iso639' => 'na', 'locale' => 'na', 'localeFallback' => 'na'),
               'nah'     => array('language' => 'Nahuatl', '3iso639' => 'nah', '2iso639' => null, 'locale' => 'nah', 'localeFallback' => 'nah'),
               'nai'     => array('language' => 'North American Indian', '3iso639' => 'nai', '2iso639' => null, 'locale' => 'nai', 'localeFallback' => 'nai'),
               'nap'     => array('language' => 'Neapolitan', '3iso639' => 'nap', '2iso639' => null, 'locale' => 'nap', 'localeFallback' => 'nap'),
               'nau'     => array('language' => 'Nauru', '3iso639' => 'nau', '2iso639' => null, 'locale' => 'nau', 'localeFallback' => 'nau'),
               'nav'     => array('language' => 'Navajo; Navaho', '3iso639' => 'nav', '2iso639' => null, 'locale' => 'nav', 'localeFallback' => 'nav'),
               'nb'      => array('language' => 'Norwegian (Bokmal)', '3iso639' => 'nob', '2iso639' => 'nb', 'locale' => 'nb', 'localeFallback' => 'nb'),
               'nbl'     => array('language' => 'Ndebele, South; South Ndebele', '3iso639' => 'nbl', '2iso639' => null, 'locale' => 'nbl', 'localeFallback' => 'nbl'),
               'nd'      => array('language' => 'North Ndebele', '3iso639' => 'nde', '2iso639' => 'nd', 'locale' => 'nd', 'localeFallback' => 'nd'),
               'nde'     => array('language' => 'Ndebele, North; North Ndebele', '3iso639' => 'nde', '2iso639' => null, 'locale' => 'nde', 'localeFallback' => 'nde'),
               'ndo'     => array('language' => 'Ndonga', '3iso639' => 'ndo', '2iso639' => null, 'locale' => 'ndo', 'localeFallback' => 'ndo'),
               'nds'     => array('language' => 'Low German; Low Saxon;', '3iso639' => 'nds', '2iso639' => null, 'locale' => 'nds', 'localeFallback' => 'nds'),
               'ne'      => array('language' => 'Nepali (India)', '3iso639' => 'hrv', '2iso639' => 'hr', 'locale' => 'hr', 'localeFallback' => 'hr'),
               'nep'     => array('language' => 'Nepali', '3iso639' => 'nep', '2iso639' => null, 'locale' => 'nep', 'localeFallback' => 'nep'),
               'new'     => array('language' => 'Newari; Nepal Bhasa', '3iso639' => 'new', '2iso639' => null, 'locale' => 'new', 'localeFallback' => 'new'),
               'ng'      => array('language' => 'Ndonga', '3iso639' => 'ndo', '2iso639' => 'ng', 'locale' => 'ng', 'localeFallback' => 'ng'),
               'nia'     => array('language' => 'Nias', '3iso639' => 'nia', '2iso639' => null, 'locale' => 'nia', 'localeFallback' => 'nia'),
               'nic'     => array('language' => 'Niger-Kordofanian (Other)', '3iso639' => 'nic', '2iso639' => null, 'locale' => 'nic', 'localeFallback' => 'nic'),
               'niu'     => array('language' => 'Niuean', '3iso639' => 'niu', '2iso639' => null, 'locale' => 'niu', 'localeFallback' => 'niu'),
               'nl'      => array('language' => 'Dutch (Netherlands)', '3iso639' => 'dut', '2iso639' => 'nl', 'locale' => 'nl', 'localeFallback' => 'nl'),
               'nl-be'   => array('language' => 'Dutch (Belgium)', '3iso639' => 'dut', '2iso639' => 'nl', 'locale' => 'nl_BE', 'localeFallback' => 'nl'),
               'nn'      => array('language' => 'Norwegian (Nynorsk)', '3iso639' => 'nno', '2iso639' => 'nn', 'locale' => 'nn', 'localeFallback' => 'nn'),
               'nno'     => array('language' => 'Norwegian Nynorsk; Nynorsk, Norwegian', '3iso639' => 'nno', '2iso639' => null, 'locale' => 'nno', 'localeFallback' => 'nno'),
               'no'      => array('language' => 'Norwegian Bokm�l', '3iso639' => 'nob', '2iso639' => 'no', 'locale' => 'no', 'localeFallback' => 'no'),
               'nob'     => array('language' => 'Norwegian Bokm�l; Bokm�l, Norwegian', '3iso639' => 'nob', '2iso639' => null, 'locale' => 'nob', 'localeFallback' => 'nob'),
               'nog'     => array('language' => 'Nogai', '3iso639' => 'nog', '2iso639' => null, 'locale' => 'nog', 'localeFallback' => 'nog'),
               'non'     => array('language' => 'Norse, Old', '3iso639' => 'non', '2iso639' => null, 'locale' => 'non', 'localeFallback' => 'non'),
               'nor'     => array('language' => 'Norwegian', '3iso639' => 'nor', '2iso639' => null, 'locale' => 'nor', 'localeFallback' => 'nor'),
               'nr'      => array('language' => 'South Ndebele', '3iso639' => 'nbl', '2iso639' => 'nr', 'locale' => 'nr', 'localeFallback' => 'nr'),
               'nso'     => array('language' => 'Northern Sotho; Pedi; Sepedi', '3iso639' => 'nso', '2iso639' => null, 'locale' => 'nso', 'localeFallback' => 'nso'),
               'nub'     => array('language' => 'Nubian languages', '3iso639' => 'nub', '2iso639' => null, 'locale' => 'nub', 'localeFallback' => 'nub'),
               'nv'      => array('language' => 'Navajo; Navaho', '3iso639' => 'nav', '2iso639' => 'nv', 'locale' => 'nv', 'localeFallback' => 'nv'),
               'nwc'     => array('language' => 'Classical Newari; Old Newari; Classical Nepal Bhasa', '3iso639' => 'nwc', '2iso639' => null, 'locale' => 'nwc', 'localeFallback' => 'nwc'),
               'ny'      => array('language' => 'Chichewa; Chewa; Nyanja', '3iso639' => 'nya', '2iso639' => 'ny', 'locale' => 'ny', 'localeFallback' => 'ny'),
               'nya'     => array('language' => 'Chichewa; Chewa; Nyanja', '3iso639' => 'nya', '2iso639' => null, 'locale' => 'nya', 'localeFallback' => 'nya'),
               'nym'     => array('language' => 'Nyamwezi', '3iso639' => 'nym', '2iso639' => null, 'locale' => 'nym', 'localeFallback' => 'nym'),
               'nyn'     => array('language' => 'Nyankole', '3iso639' => 'nyn', '2iso639' => null, 'locale' => 'nyn', 'localeFallback' => 'nyn'),
               'nyo'     => array('language' => 'Nyoro', '3iso639' => 'nyo', '2iso639' => null, 'locale' => 'nyo', 'localeFallback' => 'nyo'),
               'nzi'     => array('language' => 'Nzima', '3iso639' => 'nzi', '2iso639' => null, 'locale' => 'nzi', 'localeFallback' => 'nzi'),
               'oc'      => array('language' => 'Occitan (post 1500); Proven�al', '3iso639' => 'oci', '2iso639' => 'oc', 'locale' => 'oc', 'localeFallback' => 'oc'),
               'oci'     => array('language' => 'Occitan; Proven�al', '3iso639' => 'oci', '2iso639' => null, 'locale' => 'oci', 'localeFallback' => 'oci'),
               'oj'      => array('language' => 'Ojibwa', '3iso639' => 'oji', '2iso639' => 'oj', 'locale' => 'oj', 'localeFallback' => 'oj'),
               'oji'     => array('language' => 'Ojibwa', '3iso639' => 'oji', '2iso639' => null, 'locale' => 'oji', 'localeFallback' => 'oji'),
               'om'      => array('language' => 'Oromo', '3iso639' => 'orm', '2iso639' => 'om', 'locale' => 'om', 'localeFallback' => 'om'),
               'or'      => array('language' => 'Oriya', '3iso639' => 'ori', '2iso639' => 'or', 'locale' => 'or', 'localeFallback' => 'or'),
               'ori'     => array('language' => 'Oriya', '3iso639' => 'ori', '2iso639' => null, 'locale' => 'ori', 'localeFallback' => 'ori'),
               'orm'     => array('language' => 'Oromo', '3iso639' => 'orm', '2iso639' => null, 'locale' => 'orm', 'localeFallback' => 'orm'),
               'os'      => array('language' => 'Ossetian; Ossetic', '3iso639' => 'oss', '2iso639' => 'os', 'locale' => 'os', 'localeFallback' => 'os'),
               'osa'     => array('language' => 'Osage', '3iso639' => 'osa', '2iso639' => null, 'locale' => 'osa', 'localeFallback' => 'osa'),
               'oss'     => array('language' => 'Ossetian; Ossetic', '3iso639' => 'oss', '2iso639' => null, 'locale' => 'oss', 'localeFallback' => 'oss'),
               'ota'     => array('language' => 'Turkish, Ottoman', '3iso639' => 'ota', '2iso639' => null, 'locale' => 'ota', 'localeFallback' => 'ota'),
               'oto'     => array('language' => 'Otomian languages', '3iso639' => 'oto', '2iso639' => null, 'locale' => 'oto', 'localeFallback' => 'oto'),
               'pa'      => array('language' => 'Panjabi; Punjabi', '3iso639' => 'pan', '2iso639' => 'pa', 'locale' => 'pa', 'localeFallback' => 'pa'),
               'pa-in'   => array('language' => 'Punjabi (India)', '3iso639' => 'pan', '2iso639' => 'pa', 'locale' => 'pa_IN', 'localeFallback' => 'pa'),
               'pa-pk'   => array('language' => 'Punjabi (Pakistan)', '3iso639' => 'pan', '2iso639' => 'pa', 'locale' => 'pa_PK', 'localeFallback' => 'pa'),
               'paa'     => array('language' => 'Papuan (Other)', '3iso639' => 'paa', '2iso639' => null, 'locale' => 'paa', 'localeFallback' => 'paa'),
               'pag'     => array('language' => 'Pangasinan', '3iso639' => 'pag', '2iso639' => null, 'locale' => 'pag', 'localeFallback' => 'pag'),
               'pal'     => array('language' => 'Pahlavi', '3iso639' => 'pal', '2iso639' => null, 'locale' => 'pal', 'localeFallback' => 'pal'),
               'pam'     => array('language' => 'Pampanga', '3iso639' => 'pam', '2iso639' => null, 'locale' => 'pam', 'localeFallback' => 'pam'),
               'pan'     => array('language' => 'Panjabi; Punjabi', '3iso639' => 'pan', '2iso639' => null, 'locale' => 'pan', 'localeFallback' => 'pan'),
               'pap'     => array('language' => 'Papiamento', '3iso639' => 'pap', '2iso639' => null, 'locale' => 'pap', 'localeFallback' => 'pap'),
               'pau'     => array('language' => 'Palauan', '3iso639' => 'pau', '2iso639' => null, 'locale' => 'pau', 'localeFallback' => 'pau'),
               'peo'     => array('language' => 'Persian, Old', '3iso639' => 'peo', '2iso639' => null, 'locale' => 'peo', 'localeFallback' => 'peo'),
               'phi'     => array('language' => 'Philippine (Other)', '3iso639' => 'phi', '2iso639' => null, 'locale' => 'phi', 'localeFallback' => 'phi'),
               'phn'     => array('language' => 'Phoenician', '3iso639' => 'phn', '2iso639' => null, 'locale' => 'phn', 'localeFallback' => 'phn'),
               'pi'      => array('language' => 'Pali', '3iso639' => 'pli', '2iso639' => 'pi', 'locale' => 'pi', 'localeFallback' => 'pi'),
               'pl'      => array('language' => 'Polish', '3iso639' => 'pol', '2iso639' => 'pl', 'locale' => 'pl', 'localeFallback' => 'pl'),
               'pli'     => array('language' => 'Pali', '3iso639' => 'pli', '2iso639' => null, 'locale' => 'pli', 'localeFallback' => 'pli'),
               'pol'     => array('language' => 'Polish', '3iso639' => 'pol', '2iso639' => null, 'locale' => 'pol', 'localeFallback' => 'pol'),
               'pon'     => array('language' => 'Pohnpeian', '3iso639' => 'pon', '2iso639' => null, 'locale' => 'pon', 'localeFallback' => 'pon'),
               'por'     => array('language' => 'Portuguese', '3iso639' => 'por', '2iso639' => null, 'locale' => 'por', 'localeFallback' => 'por'),
               'pra'     => array('language' => 'Prakrit languages', '3iso639' => 'pra', '2iso639' => null, 'locale' => 'pra', 'localeFallback' => 'pra'),
               'pro'     => array('language' => 'Proven�al, Old', '3iso639' => 'pro', '2iso639' => null, 'locale' => 'pro', 'localeFallback' => 'pro'),
               'ps'      => array('language' => 'Pushto', '3iso639' => 'pus', '2iso639' => 'ps', 'locale' => 'ps', 'localeFallback' => 'ps'),
               'pt'      => array('language' => 'Portuguese (Portugal)', '3iso639' => 'por', '2iso639' => 'pt', 'locale' => 'pt', 'localeFallback' => 'pt'),
               'pt-br'   => array('language' => 'Portuguese (Brazil)', '3iso639' => 'por', '2iso639' => 'pt', 'locale' => 'pt_BR', 'localeFallback' => 'pt'),
               'pus'     => array('language' => 'Pushto', '3iso639' => 'pus', '2iso639' => null, 'locale' => 'pus', 'localeFallback' => 'pus'),
               'qu'      => array('language' => 'Quechua', '3iso639' => 'que', '2iso639' => 'qu', 'locale' => 'qu', 'localeFallback' => 'qu'),
               'que'     => array('language' => 'Quechua', '3iso639' => 'que', '2iso639' => null, 'locale' => 'que', 'localeFallback' => 'que'),
               'raj'     => array('language' => 'Rajasthani', '3iso639' => 'raj', '2iso639' => null, 'locale' => 'raj', 'localeFallback' => 'raj'),
               'rap'     => array('language' => 'Rapanui', '3iso639' => 'rap', '2iso639' => null, 'locale' => 'rap', 'localeFallback' => 'rap'),
               'rar'     => array('language' => 'Rarotongan', '3iso639' => 'rar', '2iso639' => null, 'locale' => 'rar', 'localeFallback' => 'rar'),
               'rm'      => array('language' => 'Raeto-Romance', '3iso639' => 'roh', '2iso639' => 'rm', 'locale' => 'rm', 'localeFallback' => 'rm'),
               'rn'      => array('language' => 'Rundi', '3iso639' => 'run', '2iso639' => 'rn', 'locale' => 'rn', 'localeFallback' => 'rn'),
               'ro'      => array('language' => 'Romanian', '3iso639' => 'rum', '2iso639' => 'ro', 'locale' => 'ro', 'localeFallback' => 'ro'),
               'ro-md'   => array('language' => 'Romanian (Moldova)', '3iso639' => 'rum', '2iso639' => 'ro', 'locale' => 'ro_MD', 'localeFallback' => 'ro'),
               'roa'     => array('language' => 'Romance (Other)', '3iso639' => 'roa', '2iso639' => null, 'locale' => 'roa', 'localeFallback' => 'roa'),
               'roh'     => array('language' => 'Raeto-Romance', '3iso639' => 'roh', '2iso639' => null, 'locale' => 'roh', 'localeFallback' => 'roh'),
               'rom'     => array('language' => 'Romany', '3iso639' => 'rom', '2iso639' => null, 'locale' => 'rom', 'localeFallback' => 'rom'),
               'ru'      => array('language' => 'Russian', '3iso639' => 'rus', '2iso639' => 'ru', 'locale' => 'ru', 'localeFallback' => 'ru'),
               'ru-md'   => array('language' => 'Russian (Moldova)', '3iso639' => 'rus', '2iso639' => 'ru', 'locale' => 'ru_MD', 'localeFallback' => 'ru'),
               'rup'     => array('language' => 'Aromanian', '3iso639' => 'rup', '2iso639' => null, 'locale' => 'rup', 'localeFallback' => 'rup'),
               'sa'      => array('language' => 'Sanskrit', '3iso639' => 'san', '2iso639' => 'sa', 'locale' => 'sa', 'localeFallback' => 'sa'),
               'sad'     => array('language' => 'Sandawe', '3iso639' => 'sad', '2iso639' => null, 'locale' => 'sad', 'localeFallback' => 'sad'),
               'sah'     => array('language' => 'Yakut', '3iso639' => 'sah', '2iso639' => null, 'locale' => 'sah', 'localeFallback' => 'sah'),
               'sai'     => array('language' => 'South American Indian (Other)', '3iso639' => 'sai', '2iso639' => null, 'locale' => 'sai', 'localeFallback' => 'sai'),
               'sal'     => array('language' => 'Salishan languages', '3iso639' => 'sal', '2iso639' => null, 'locale' => 'sal', 'localeFallback' => 'sal'),
               'sam'     => array('language' => 'Samaritan Aramaic', '3iso639' => 'sam', '2iso639' => null, 'locale' => 'sam', 'localeFallback' => 'sam'),
               'sas'     => array('language' => 'Sasak', '3iso639' => 'sas', '2iso639' => null, 'locale' => 'sas', 'localeFallback' => 'sas'),
               'sat'     => array('language' => 'Santali', '3iso639' => 'sat', '2iso639' => null, 'locale' => 'sat', 'localeFallback' => 'sat'),
               'sc'      => array('language' => 'Sardinian', '3iso639' => 'srd', '2iso639' => 'sc', 'locale' => 'sc', 'localeFallback' => 'sc'),
               'scn'     => array('language' => 'Sicilian', '3iso639' => 'scn', '2iso639' => null, 'locale' => 'scn', 'localeFallback' => 'scn'),
               'sco'     => array('language' => 'Scots', '3iso639' => 'sco', '2iso639' => null, 'locale' => 'sco', 'localeFallback' => 'sco'),
               'sd'      => array('language' => 'Sindhi', '3iso639' => 'snd', '2iso639' => 'sd', 'locale' => 'sd', 'localeFallback' => 'sd'),
               'se'      => array('language' => 'Northern Sami', '3iso639' => 'sme', '2iso639' => 'se', 'locale' => 'se', 'localeFallback' => 'se'),
               'sel'     => array('language' => 'Selkup', '3iso639' => 'sel', '2iso639' => null, 'locale' => 'sel', 'localeFallback' => 'sel'),
               'sem'     => array('language' => 'Semitic (Other)', '3iso639' => 'sem', '2iso639' => null, 'locale' => 'sem', 'localeFallback' => 'sem'),
               'sg'      => array('language' => 'Sango', '3iso639' => 'sag', '2iso639' => 'sg', 'locale' => 'sg', 'localeFallback' => 'sg'),
               'sga'     => array('language' => 'Irish, Old', '3iso639' => 'sga', '2iso639' => null, 'locale' => 'sga', 'localeFallback' => 'sga'),
               'shn'     => array('language' => 'Shan', '3iso639' => 'shn', '2iso639' => null, 'locale' => 'shn', 'localeFallback' => 'shn'),
               'si'      => array('language' => 'Sinhala; Sinhalese', '3iso639' => 'sin', '2iso639' => 'si', 'locale' => 'si', 'localeFallback' => 'si'),
               'sid'     => array('language' => 'Sidamo', '3iso639' => 'sid', '2iso639' => null, 'locale' => 'sid', 'localeFallback' => 'sid'),
               'sio'     => array('language' => 'Siouan languages', '3iso639' => 'sio', '2iso639' => null, 'locale' => 'sio', 'localeFallback' => 'sio'),
               'sit'     => array('language' => 'Sino-Tibetan (Other)', '3iso639' => 'sit', '2iso639' => null, 'locale' => 'sit', 'localeFallback' => 'sit'),
               'sk'      => array('language' => 'Slovak', '3iso639' => 'slo', '2iso639' => 'sk', 'locale' => 'sk', 'localeFallback' => 'sk'),
               'sl'      => array('language' => 'Slovenian', '3iso639' => 'slv', '2iso639' => 'sl', 'locale' => 'sl', 'localeFallback' => 'sl'),
               'sla'     => array('language' => 'Slavic (Other)', '3iso639' => 'sla', '2iso639' => null, 'locale' => 'sla', 'localeFallback' => 'sla'),
               'sm'      => array('language' => 'Samoan', '3iso639' => 'smo', '2iso639' => 'sm', 'locale' => 'sm', 'localeFallback' => 'sm'),
               'sma'     => array('language' => 'Southern Sami', '3iso639' => 'sma', '2iso639' => null, 'locale' => 'sma', 'localeFallback' => 'sma'),
               'smi'     => array('language' => 'Sami languages (Other)', '3iso639' => 'smi', '2iso639' => null, 'locale' => 'smi', 'localeFallback' => 'smi'),
               'smj'     => array('language' => 'Lule Sami', '3iso639' => 'smj', '2iso639' => null, 'locale' => 'smj', 'localeFallback' => 'smj'),
               'smn'     => array('language' => 'Inari Sami', '3iso639' => 'smn', '2iso639' => null, 'locale' => 'smn', 'localeFallback' => 'smn'),
               'sms'     => array('language' => 'Skolt Sami', '3iso639' => 'sms', '2iso639' => null, 'locale' => 'sms', 'localeFallback' => 'sms'),
               'sn'      => array('language' => 'Shona', '3iso639' => 'sna', '2iso639' => 'sn', 'locale' => 'sn', 'localeFallback' => 'sn'),
               'snk'     => array('language' => 'Soninke', '3iso639' => 'snk', '2iso639' => null, 'locale' => 'snk', 'localeFallback' => 'snk'),
               'so'      => array('language' => 'Somali', '3iso639' => 'som', '2iso639' => 'so', 'locale' => 'so', 'localeFallback' => 'so'),
               'sog'     => array('language' => 'Sogdian', '3iso639' => 'sog', '2iso639' => null, 'locale' => 'sog', 'localeFallback' => 'sog'),
               'son'     => array('language' => 'Songhai', '3iso639' => 'son', '2iso639' => null, 'locale' => 'son', 'localeFallback' => 'son'),
               'sq'      => array('language' => 'Albanian', '3iso639' => 'alb', '2iso639' => 'sq', 'locale' => 'sq', 'localeFallback' => 'sq'),
               'sr'      => array('language' => 'Serbian', '3iso639' => 'scc', '2iso639' => 'sr', 'locale' => 'sr', 'localeFallback' => 'sr'),
               'srr'     => array('language' => 'Serer', '3iso639' => 'srr', '2iso639' => null, 'locale' => 'srr', 'localeFallback' => 'srr'),
               'ss'      => array('language' => 'Swati', '3iso639' => 'ssw', '2iso639' => 'ss', 'locale' => 'ss', 'localeFallback' => 'ss'),
               'ssa'     => array('language' => 'Nilo-Saharan (Other)', '3iso639' => 'ssa', '2iso639' => null, 'locale' => 'ssa', 'localeFallback' => 'ssa'),
               'st'      => array('language' => 'Southern Sotho', '3iso639' => 'sot', '2iso639' => 'st', 'locale' => 'st', 'localeFallback' => 'st'),
               'su'      => array('language' => 'Sundanese', '3iso639' => 'sun', '2iso639' => 'su', 'locale' => 'su', 'localeFallback' => 'su'),
               'suk'     => array('language' => 'Sukuma', '3iso639' => 'suk', '2iso639' => null, 'locale' => 'suk', 'localeFallback' => 'suk'),
               'sus'     => array('language' => 'Susu', '3iso639' => 'sus', '2iso639' => null, 'locale' => 'sus', 'localeFallback' => 'sus'),
               'sux'     => array('language' => 'Sumerian', '3iso639' => 'sux', '2iso639' => null, 'locale' => 'sux', 'localeFallback' => 'sux'),
               'sv'      => array('language' => 'Swedish', '3iso639' => 'swe', '2iso639' => 'sv', 'locale' => 'sv', 'localeFallback' => 'sv'),
               'sv-fi'   => array('language' => 'Swedish (Finland)', '3iso639' => 'swe', '2iso639' => 'sv', 'locale' => 'sv_FI', 'localeFallback' => 'sv'),
               'sw'      => array('language' => 'Swahili', '3iso639' => 'swa', '2iso639' => 'sw', 'locale' => 'sw', 'localeFallback' => 'sw'),
               'swa'     => array('language' => 'Swahili', '3iso639' => 'swa', '2iso639' => null, 'locale' => 'swa', 'localeFallback' => 'swa'),
               'swe'     => array('language' => 'Swedish', '3iso639' => 'swe', '2iso639' => null, 'locale' => 'swe', 'localeFallback' => 'swe'),
               'syr'     => array('language' => 'Syriac', '3iso639' => 'syr', '2iso639' => null, 'locale' => 'syr', 'localeFallback' => 'syr'),
               'ta'      => array('language' => 'Tamil', '3iso639' => 'tam', '2iso639' => 'ta', 'locale' => 'ta', 'localeFallback' => 'ta'),
               'tai'     => array('language' => 'Tai (Other)', '3iso639' => 'tai', '2iso639' => null, 'locale' => 'tai', 'localeFallback' => 'tai'),
               'te'      => array('language' => 'Telugu', '3iso639' => 'tel', '2iso639' => 'te', 'locale' => 'te', 'localeFallback' => 'te'),
               'tem'     => array('language' => 'Timne', '3iso639' => 'tem', '2iso639' => null, 'locale' => 'tem', 'localeFallback' => 'tem'),
               'ter'     => array('language' => 'Tereno', '3iso639' => 'ter', '2iso639' => null, 'locale' => 'ter', 'localeFallback' => 'ter'),
               'tet'     => array('language' => 'Tetum', '3iso639' => 'tet', '2iso639' => null, 'locale' => 'tet', 'localeFallback' => 'tet'),
               'tg'      => array('language' => 'Tajik', '3iso639' => 'tgk', '2iso639' => 'tg', 'locale' => 'tg', 'localeFallback' => 'tg'),
               'th'      => array('language' => 'Thai', '3iso639' => 'tha', '2iso639' => 'th', 'locale' => 'th', 'localeFallback' => 'th'),
               'tig'     => array('language' => 'Tigre', '3iso639' => 'tig', '2iso639' => null, 'locale' => 'tig', 'localeFallback' => 'tig'),
               'tir'     => array('language' => 'Tigrinya|', '3iso639' => 'tir', '2iso639' => 'ti', 'locale' => 'ti', 'localeFallback' => 'ti'),
               'tiv'     => array('language' => 'Tiv', '3iso639' => 'tiv', '2iso639' => null, 'locale' => 'tiv', 'localeFallback' => 'tiv'),
               'tk'      => array('language' => 'Turkmen', '3iso639' => 'tuk', '2iso639' => 'tk', 'locale' => 'tk', 'localeFallback' => 'tk'),
               'tkl'     => array('language' => 'Tokelau', '3iso639' => 'tkl', '2iso639' => null, 'locale' => 'tkl', 'localeFallback' => 'tkl'),
               'tl'      => array('language' => 'Tagalog', '3iso639' => 'tgl', '2iso639' => 'tl', 'locale' => 'tl', 'localeFallback' => 'tl'),
               'tlh'     => array('language' => 'Klingon; tlhIngan-Hol', '3iso639' => 'tlh', '2iso639' => null, 'locale' => 'tlh', 'localeFallback' => 'tlh'),
               'tli'     => array('language' => 'Tlingit', '3iso639' => 'tli', '2iso639' => null, 'locale' => 'tli', 'localeFallback' => 'tli'),
               'tmh'     => array('language' => 'Tamashek', '3iso639' => 'tmh', '2iso639' => null, 'locale' => 'tmh', 'localeFallback' => 'tmh'),
               'tn'      => array('language' => 'Tswana', '3iso639' => 'tsn', '2iso639' => 'tn', 'locale' => 'tn', 'localeFallback' => 'tn'),
               'to'      => array('language' => 'Tonga (Tonga Islands)', '3iso639' => 'ton', '2iso639' => 'to', 'locale' => 'to', 'localeFallback' => 'to'),
               'tog'     => array('language' => 'Tonga (Nyasa)', '3iso639' => 'tog', '2iso639' => null, 'locale' => 'tog', 'localeFallback' => 'tog'),
               'tpi'     => array('language' => 'Tok Pisin', '3iso639' => 'tpi', '2iso639' => null, 'locale' => 'tpi', 'localeFallback' => 'tpi'),
               'tr'      => array('language' => 'Turkish', '3iso639' => 'tur', '2iso639' => 'tr', 'locale' => 'tr', 'localeFallback' => 'tr'),
               'ts'      => array('language' => 'Tsonga', '3iso639' => 'tso', '2iso639' => 'ts', 'locale' => 'ts', 'localeFallback' => 'ts'),
               'tsi'     => array('language' => 'Tsimshian', '3iso639' => 'tsi', '2iso639' => null, 'locale' => 'tsi', 'localeFallback' => 'tsi'),
               'tt'      => array('language' => 'Tatar', '3iso639' => 'tat', '2iso639' => 'tt', 'locale' => 'tt', 'localeFallback' => 'tt'),
               'tum'     => array('language' => 'Tumbuka', '3iso639' => 'tum', '2iso639' => null, 'locale' => 'tum', 'localeFallback' => 'tum'),
               'tup'     => array('language' => 'Tupi languages', '3iso639' => 'tup', '2iso639' => null, 'locale' => 'tup', 'localeFallback' => 'tup'),
               'tut'     => array('language' => 'Altaic (Other)', '3iso639' => 'tut', '2iso639' => null, 'locale' => 'tut', 'localeFallback' => 'tut'),
               'tvl'     => array('language' => 'Tuvalu', '3iso639' => 'tvl', '2iso639' => null, 'locale' => 'tvl', 'localeFallback' => 'tvl'),
               'tw'      => array('language' => 'Twi', '3iso639' => 'twi', '2iso639' => 'tw', 'locale' => 'tw', 'localeFallback' => 'tw'),
               'ty'      => array('language' => 'Tahitian', '3iso639' => 'tah', '2iso639' => 'ty', 'locale' => 'ty', 'localeFallback' => 'ty'),
               'tyv'     => array('language' => 'Tuvinian', '3iso639' => 'tyv', '2iso639' => null, 'locale' => 'tyv', 'localeFallback' => 'tyv'),
               'udm'     => array('language' => 'Udmurt', '3iso639' => 'udm', '2iso639' => null, 'locale' => 'udm', 'localeFallback' => 'udm'),
               'ug'      => array('language' => 'Uighur; Uyghur', '3iso639' => 'uig', '2iso639' => 'ug', 'locale' => 'ug', 'localeFallback' => 'ug'),
               'uga'     => array('language' => 'Ugaritic', '3iso639' => 'uga', '2iso639' => null, 'locale' => 'uga', 'localeFallback' => 'uga'),
               'uk'      => array('language' => 'Ukrainian', '3iso639' => 'ukr', '2iso639' => 'uk', 'locale' => 'uk', 'localeFallback' => 'uk'),
               'umb'     => array('language' => 'Umbundu', '3iso639' => 'umb', '2iso639' => null, 'locale' => 'umb', 'localeFallback' => 'umb'),
               'ur'      => array('language' => 'Urdu', '3iso639' => 'urd', '2iso639' => 'ur', 'locale' => 'ur', 'localeFallback' => 'ur'),
               'us'      => array('language' => 'English (United States)', '3iso639' => 'eng', '2iso639' => 'en', 'locale' => 'en_US', 'localeFallback' => 'en_US'),
               'uz'      => array('language' => 'Uzbek', '3iso639' => 'uzb', '2iso639' => 'uz', 'locale' => 'uz', 'localeFallback' => 'uz'),
               'vai'     => array('language' => 'Vai', '3iso639' => 'vai', '2iso639' => null, 'locale' => 'vai', 'localeFallback' => 'vai'),
               've'      => array('language' => 'Venda', '3iso639' => 'ven', '2iso639' => 've', 'locale' => 've', 'localeFallback' => 've'),
               'vi'      => array('language' => 'Vietnamese', '3iso639' => 'vie', '2iso639' => 'vi', 'locale' => 'vi', 'localeFallback' => 'vi'),
               'vo'      => array('language' => 'Volap�k', '3iso639' => 'vol', '2iso639' => 'vo', 'locale' => 'vo', 'localeFallback' => 'vo'),
               'vot'     => array('language' => 'Votic', '3iso639' => 'vot', '2iso639' => null, 'locale' => 'vot', 'localeFallback' => 'vot'),
               'wa'      => array('language' => 'Walloon', '3iso639' => 'wln', '2iso639' => 'wa', 'locale' => 'wa', 'localeFallback' => 'wa'),
               'wak'     => array('language' => 'Wakashan languages', '3iso639' => 'wak', '2iso639' => null, 'locale' => 'wak', 'localeFallback' => 'wak'),
               'wal'     => array('language' => 'Walamo', '3iso639' => 'wal', '2iso639' => null, 'locale' => 'wal', 'localeFallback' => 'wal'),
               'war'     => array('language' => 'Waray', '3iso639' => 'war', '2iso639' => null, 'locale' => 'war', 'localeFallback' => 'war'),
               'was'     => array('language' => 'Washo', '3iso639' => 'was', '2iso639' => null, 'locale' => 'was', 'localeFallback' => 'was'),
               'wen'     => array('language' => 'Sorbian languages', '3iso639' => 'wen', '2iso639' => null, 'locale' => 'wen', 'localeFallback' => 'wen'),
               'wo'      => array('language' => 'Wolof', '3iso639' => 'wol', '2iso639' => 'wo', 'locale' => 'wo', 'localeFallback' => 'wo'),
               'xal'     => array('language' => 'Kalmyk', '3iso639' => 'xal', '2iso639' => null, 'locale' => 'xal', 'localeFallback' => 'xal'),
               'xh'      => array('language' => 'Xhosa', '3iso639' => 'xho', '2iso639' => 'xh', 'locale' => 'xh', 'localeFallback' => 'xh'),
               'yao'     => array('language' => 'Yao', '3iso639' => 'yao', '2iso639' => null, 'locale' => 'yao', 'localeFallback' => 'yao'),
               'yap'     => array('language' => 'Yapese', '3iso639' => 'yap', '2iso639' => null, 'locale' => 'yap', 'localeFallback' => 'yap'),
               'yi'      => array('language' => 'Yiddish', '3iso639' => 'yid', '2iso639' => 'yi', 'locale' => 'yi', 'localeFallback' => 'yi'),
               'yo'      => array('language' => 'Yoruba', '3iso639' => 'yor', '2iso639' => 'yo', 'locale' => 'yo', 'localeFallback' => 'yo'),
               'ypk'     => array('language' => 'Yupik languages', '3iso639' => 'ypk', '2iso639' => null, 'locale' => 'ypk', 'localeFallback' => 'ypk'),
               'za'      => array('language' => 'Zhuang; Chuang', '3iso639' => 'zha', '2iso639' => 'za', 'locale' => 'za', 'localeFallback' => 'za'),
               'zap'     => array('language' => 'Zapotec', '3iso639' => 'zap', '2iso639' => null, 'locale' => 'zap', 'localeFallback' => 'zap'),
               'zen'     => array('language' => 'Zenaga', '3iso639' => 'zen', '2iso639' => null, 'locale' => 'zen', 'localeFallback' => 'zen'),
               'zh'      => array('language' => 'Chinese', '3iso639' => 'chi', '2iso639' => 'zh', 'locale' => 'zh', 'localeFallback' => 'zh'),
               'zh-cn'   => array('language' => 'Chinese (China)', '3iso639' => 'chi', '2iso639' => 'zh', 'locale' => 'zh_CN', 'localeFallback' => 'zh'),
               'zh-hk'   => array('language' => 'Chinese (Hong Kong SAR)', '3iso639' => 'chi', '2iso639' => 'zh', 'locale' => 'zh_HK', 'localeFallback' => 'zh'),
               'zh-mo'   => array('language' => 'Chinese (Macau SAR)', '3iso639' => 'chi', '2iso639' => 'zh', 'locale' => 'zh_MO', 'localeFallback' => 'zh'),
               'zh-sg'   => array('language' => 'Chinese (Singapore)', '3iso639' => 'chi', '2iso639' => 'zh', 'locale' => 'zh_SG', 'localeFallback' => 'zh'),
               'zh-tw'   => array('language' => 'Chinese (Taiwan)', '3iso639' => 'chi', '2iso639' => 'zh', 'locale' => 'zh_TW', 'localeFallback' => 'zh'),
               'znd'     => array('language' => 'Zande', '3iso639' => 'znd', '2iso639' => null, 'locale' => 'znd', 'localeFallback' => 'znd'),
               'zu'      => array('language' => 'Zulu', '3iso639' => 'zul', '2iso639' => 'zu', 'locale' => 'zu', 'localeFallback' => 'zu'),
               'zun'     => array('language' => 'Zuni', '3iso639' => 'zun', '2iso639' => null, 'locale' => 'zun', 'localeFallback' => 'zun'));

    function __construct()
    {
        parent::__construct();
    }

    function get($language)
    {
        if (!is_null($language))
        {
            return $this->_setLanguage($language);
        }
        else
        {
            return $this->_autoLanguage();
        }
    }

    function _setLanguage($language = 'eng')
    {
        if ((!is_null($language)) && (isset($this->_l10nCatalog[$this->_l10nMap[$language]])))
        {
            $this->language     = $this->_l10nCatalog[$this->_l10nMap[$language]]['language'];
            $this->languagePath = array(0 => $this->_l10nCatalog[$language]['locale'],
                                        1 => $this->_l10nCatalog[$language]['localeFallback'],
                                        2 => $this->_l10nCatalog[DEFAULT_LANGUAGE]['localeFallback']);
            $this->lang         = $language;
            $this->locale       = $this->_l10nCatalog[$this->_l10nMap[$language]]['locale'];
        }
        else
        {
            if(defined('DEFAULT_LANGUAGE'))
            {
                $this->language     = $this->_l10nCatalog[$this->_l10nMap[DEFAULT_LANGUAGE]]['language'];
                $this->languagePath = array(0 => $this->_l10nCatalog[$this->_l10nMap[DEFAULT_LANGUAGE]]['locale'],
                                            1 => $this->_l10nCatalog[$this->_l10nMap[DEFAULT_LANGUAGE]]['localeFallback']);
                $this->lang         = DEFAULT_LANGUAGE;
                $this->locale       = $this->_l10nCatalog[$this->_l10nMap[DEFAULT_LANGUAGE]]['locale'];
            }
        }
    }

    function _autoLanguage()
    {
        $_detectableLanguages = split ('[,;]', env('HTTP_ACCEPT_LANGUAGE'));

        foreach ($_detectableLanguages as $langKey => $key) {
            if (isset($this->_l10nCatalog[$langKey]))
            {
                $this->language     = $this->_l10nCatalog[$langKey]['language'];
                $this->languagePath = array(0 => $this->_l10nCatalog[$langKey]['locale'],
                                            1 => $this->_l10nCatalog[$langKey]['localeFallback'],
                                            2 => $this->_l10nCatalog[DEFAULT_LANGUAGE]['localeFallback']);
                $this->lang         = $langKey;
                $this->locale       = $this->_l10nCatalog[$langKey]['locale'];
                break;
            }
        }
    }
}

?>