r63627 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r63626‎ | r63627 | r63628 >
Date:02:39, 12 March 2010
Author:neilk
Status:ok (Comments)
Tags:
Comment:
A few useful files for sorting language codes by name (rather than by code, which is mostly pointless)
Modified paths:
  • /trunk/tools/langcodes (added) (history)
  • /trunk/tools/langcodes/README (added) (history)
  • /trunk/tools/langcodes/langs (added) (history)
  • /trunk/tools/langcodes/sortLangs.pl (added) (history)
  • /trunk/tools/langcodes/sorted (added) (history)

Diff [purge]

Index: trunk/tools/langcodes/sorted
@@ -0,0 +1,356 @@
 2+ { code: "ace", text: "Ac\u00e8h" },
 3+ { code: "af", text: "Afrikaans" },
 4+ { code: "ak", text: "Akan" },
 5+ { code: "als", text: "Alemannisch" },
 6+ { code: "gsw", text: "Alemannisch" },
 7+ { code: "ang", text: "Anglo-Saxon" },
 8+ { code: "an", text: "Aragon\u00e9s" },
 9+ { code: "roa-rup", text: "Arm\u00e3neashce" },
 10+ { code: "frp", text: "Arpetan" },
 11+ { code: "ast", text: "Asturianu" },
 12+ { code: "gn", text: "Ava\u00f1e'\u1ebd" },
 13+ { code: "ay", text: "Aymar aru" },
 14+ { code: "az", text: "Az\u0259rbaycan" },
 15+ { code: "id", text: "Bahasa Indonesia" },
 16+ { code: "ms", text: "Bahasa Melayu" },
 17+ { code: "bm", text: "Bamanankan" },
 18+ { code: "map-bms", text: "Basa Banyumasan" },
 19+ { code: "jv", text: "Basa Jawa" },
 20+ { code: "su", text: "Basa Sunda" },
 21+ { code: "bcl", text: "Bikol Central" },
 22+ { code: "bi", text: "Bislama" },
 23+ { code: "bar", text: "Boarisch" },
 24+ { code: "bs", text: "Bosanski" },
 25+ { code: "br", text: "Brezhoneg" },
 26+ { code: "nan", text: "B\u00e2n-l\u00e2m-g\u00fa" },
 27+ { code: "zh-min-nan", text: "B\u00e2n-l\u00e2m-g\u00fa" },
 28+ { code: "ca", text: "Catal\u00e0" },
 29+ { code: "ceb", text: "Cebuano" },
 30+ { code: "ch", text: "Chamoru" },
 31+ { code: "cbk-zam", text: "Chavacano de Zamboanga" },
 32+ { code: "ny", text: "Chi-Chewa" },
 33+ { code: "cho", text: "Choctaw" },
 34+ { code: "sei", text: "Cmique Itom" },
 35+ { code: "co", text: "Corsu" },
 36+ { code: "cy", text: "Cymraeg" },
 37+ { code: "da", text: "Dansk" },
 38+ { code: "dk", text: "Dansk (deprecated:da)" },
 39+ { code: "pdc", text: "Deitsch" },
 40+ { code: "de", text: "Deutsch" },
 41+ { code: "de-formal", text: "Deutsch (Sie-Form)" },
 42+ { code: "nv", text: "Din\u00e9 bizaad" },
 43+ { code: "dsb", text: "Dolnoserbski" },
 44+ { code: "na", text: "Dorerin Naoero" },
 45+ { code: "mh", text: "Ebon" },
 46+ { code: "et", text: "Eesti" },
 47+ { code: "eml", text: "Emili\u00e0n e rumagn\u00f2l" },
 48+ { code: "en", text: "English" },
 49+ { code: "en-gb", text: "English (British)" },
 50+ { code: "es", text: "Espa\u00f1ol" },
 51+ { code: "eo", text: "Esperanto" },
 52+ { code: "ext", text: "Estreme\u00f1u" },
 53+ { code: "eu", text: "Euskara" },
 54+ { code: "ee", text: "E\u028begbe" },
 55+ { code: "hif", text: "Fiji Hindi" },
 56+ { code: "hif-latn", text: "Fiji Hindi" },
 57+ { code: "fr", text: "Fran\u00e7ais" },
 58+ { code: "frc", text: "Fran\u00e7ais cadien" },
 59+ { code: "fy", text: "Frysk" },
 60+ { code: "ff", text: "Fulfulde" },
 61+ { code: "fur", text: "Furlan" },
 62+ { code: "fo", text: "F\u00f8royskt" },
 63+ { code: "ga", text: "Gaeilge" },
 64+ { code: "gv", text: "Gaelg" },
 65+ { code: "sm", text: "Gagana Samoa" },
 66+ { code: "gag", text: "Gagauz" },
 67+ { code: "gl", text: "Galego" },
 68+ { code: "aln", text: "Geg\u00eb" },
 69+ { code: "gd", text: "G\u00e0idhlig" },
 70+ { code: "ki", text: "G\u0129k\u0169y\u0169" },
 71+ { code: "hak", text: "Hak-k\u00e2-fa" },
 72+ { code: "haw", text: "Hawai`i" },
 73+ { code: "ho", text: "Hiri Motu" },
 74+ { code: "hsb", text: "Hornjoserbsce" },
 75+ { code: "hr", text: "Hrvatski" },
 76+ { code: "io", text: "Ido" },
 77+ { code: "ig", text: "Igbo" },
 78+ { code: "ilo", text: "Ilokano" },
 79+ { code: "hil", text: "Ilonggo" },
 80+ { code: "ia", text: "Interlingua" },
 81+ { code: "ie", text: "Interlingue" },
 82+ { code: "it", text: "Italiano" },
 83+ { code: "ik", text: "I\u00f1upiak" },
 84+ { code: "jut", text: "Jysk" },
 85+ { code: "kl", text: "Kalaallisut" },
 86+ { code: "kr", text: "Kanuri" },
 87+ { code: "pam", text: "Kapampangan" },
 88+ { code: "csb", text: "Kasz\u00ebbsczi" },
 89+ { code: "kw", text: "Kernowek" },
 90+ { code: "krj", text: "Kinaray-a" },
 91+ { code: "rw", text: "Kinyarwanda" },
 92+ { code: "rn", text: "Kirundi" },
 93+ { code: "sw", text: "Kiswahili" },
 94+ { code: "kg", text: "Kongo" },
 95+ { code: "avk", text: "Kotava" },
 96+ { code: "ht", text: "Krey\u00f2l ayisyen" },
 97+ { code: "kri", text: "Krio" },
 98+ { code: "ku", text: "Kurd\u00ee \/ \u0643\u0648\u0631\u062f\u06cc" },
 99+ { code: "kiu", text: "Kurmanc\u00ee" },
 100+ { code: "kj", text: "Kwanyama" },
 101+ { code: "lad", text: "Ladino" },
 102+ { code: "la", text: "Latina" },
 103+ { code: "lv", text: "Latvie\u0161u" },
 104+ { code: "lt", text: "Lietuvi\u0173" },
 105+ { code: "li", text: "Limburgs" },
 106+ { code: "lfn", text: "Lingua Franca Nova" },
 107+ { code: "ln", text: "Ling\u00e1la" },
 108+ { code: "jbo", text: "Lojban" },
 109+ { code: "lg", text: "Luganda" },
 110+ { code: "lmo", text: "Lumbaart" },
 111+ { code: "lb", text: "L\u00ebtzebuergesch" },
 112+ { code: "lij", text: "L\u00edguru" },
 113+ { code: "hu", text: "Magyar" },
 114+ { code: "mg", text: "Malagasy" },
 115+ { code: "mt", text: "Malti" },
 116+ { code: "arn", text: "Mapudungun" },
 117+ { code: "mwl", text: "Mirand\u00e9s" },
 118+ { code: "mus", text: "Mvskoke" },
 119+ { code: "cdo", text: "M\u00ecng-d\u0115\u0324ng-ng\u1e73\u0304" },
 120+ { code: "mi", text: "M\u0101ori" },
 121+ { code: "fj", text: "Na Vosa Vakaviti" },
 122+ { code: "nl", text: "Nederlands" },
 123+ { code: "nds-nl", text: "Nedersaksisch" },
 124+ { code: "niu", text: "Niu\u0113" },
 125+ { code: "nap", text: "Nnapulitano" },
 126+ { code: "pih", text: "Norfuk \/ Pitkern" },
 127+ { code: "nb", text: "Norsk (bokm\u00e5l)" },
 128+ { code: "no", text: "Norsk (bokm\u00e5l)" },
 129+ { code: "nn", text: "Norsk (nynorsk)" },
 130+ { code: "nrm", text: "Nouormand" },
 131+ { code: "nov", text: "Novial" },
 132+ { code: "nah", text: "N\u0101huatl" },
 133+ { code: "cr", text: "N\u0113hiyaw\u0113win \/ \u14c0\u1426\u1403\u152d\u140d\u140f\u1423" },
 134+ { code: "uz", text: "O'zbek" },
 135+ { code: "oc", text: "Occitan" },
 136+ { code: "om", text: "Oromoo" },
 137+ { code: "ng", text: "Oshiwambo" },
 138+ { code: "hz", text: "Otsiherero" },
 139+ { code: "pag", text: "Pangasinan" },
 140+ { code: "pap", text: "Papiamentu" },
 141+ { code: "pfl", text: "Pf\u00e4lzisch" },
 142+ { code: "pcd", text: "Picard" },
 143+ { code: "pms", text: "Piemont\u00e8is" },
 144+ { code: "nds", text: "Plattd\u00fc\u00fctsch" },
 145+ { code: "pdt", text: "Plautdietsch" },
 146+ { code: "pl", text: "Polski" },
 147+ { code: "pt", text: "Portugu\u00eas" },
 148+ { code: "pt-br", text: "Portugu\u00eas do Brasil" },
 149+ { code: "aa", text: "Qaf\u00e1r af" },
 150+ { code: "kaa", text: "Qaraqalpaqsha" },
 151+ { code: "crh", text: "Q\u0131r\u0131mtatarca" },
 152+ { code: "ty", text: "Reo M\u0101`ohi" },
 153+ { code: "ksh", text: "Ripoarisch" },
 154+ { code: "rmy", text: "Romani" },
 155+ { code: "ro", text: "Rom\u00e2n\u0103" },
 156+ { code: "rm", text: "Rumantsch" },
 157+ { code: "qu", text: "Runa Simi" },
 158+ { code: "sc", text: "Sardu" },
 159+ { code: "sdc", text: "Sassaresu" },
 160+ { code: "sli", text: "Schl\u00e4sch" },
 161+ { code: "de-ch", text: "Schweizer Hochdeutsch" },
 162+ { code: "sco", text: "Scots" },
 163+ { code: "stq", text: "Seeltersk" },
 164+ { code: "st", text: "Sesotho" },
 165+ { code: "nso", text: "Sesotho sa Leboa" },
 166+ { code: "tn", text: "Setswana" },
 167+ { code: "sq", text: "Shqip" },
 168+ { code: "ss", text: "SiSwati" },
 169+ { code: "scn", text: "Sicilianu" },
 170+ { code: "loz", text: "Silozi" },
 171+ { code: "simple", text: "Simple English" },
 172+ { code: "sk", text: "Sloven\u010dina" },
 173+ { code: "sl", text: "Sloven\u0161\u010dina" },
 174+ { code: "so", text: "Soomaaliga" },
 175+ { code: "ckb", text: "Soran\u00ee \/ \u06a9\u0648\u0631\u062f\u06cc" },
 176+ { code: "srn", text: "Sranantongo" },
 177+ { code: "sr-el", text: "Srpski (latinica)" },
 178+ { code: "sh", text: "Srpskohrvatski \/ \u0421\u0440\u043f\u0441\u043a\u043e\u0445\u0440\u0432\u0430\u0442\u0441\u043a\u0438" },
 179+ { code: "fi", text: "Suomi" },
 180+ { code: "sv", text: "Svenska" },
 181+ { code: "se", text: "S\u00e1megiella" },
 182+ { code: "sg", text: "S\u00e4ng\u00f6" },
 183+ { code: "tl", text: "Tagalog" },
 184+ { code: "kab", text: "Taqbaylit" },
 185+ { code: "roa-tara", text: "Tarand\u00edne" },
 186+ { code: "rif", text: "Tarifit" },
 187+ { code: "tt-latn", text: "Tatar\u00e7a" },
 188+ { code: "shi", text: "Ta\u0161l\u1e25iyt" },
 189+ { code: "tet", text: "Tetun" },
 190+ { code: "vi", text: "Ti\u1ebfng Vi\u1ec7t" },
 191+ { code: "tpi", text: "Tok Pisin" },
 192+ { code: "tokipona", text: "Toki Pona" },
 193+ { code: "tp", text: "Toki Pona (deprecated:tokipona)" },
 194+ { code: "chy", text: "Tsets\u00eahest\u00e2hese" },
 195+ { code: "ve", text: "Tshivenda" },
 196+ { code: "tw", text: "Twi" },
 197+ { code: "tk", text: "T\u00fcrkmen\u00e7e" },
 198+ { code: "tr", text: "T\u00fcrk\u00e7e" },
 199+ { code: "ug-latn", text: "Uyghurche\u200e" },
 200+ { code: "ug", text: "Uyghurche\u200e \/ \u0626\u06c7\u064a\u063a\u06c7\u0631\u0686\u06d5" },
 201+ { code: "za", text: "Vahcuengh" },
 202+ { code: "vep", text: "Vepsan kel'" },
 203+ { code: "ruq", text: "Vl\u0103he\u015fte" },
 204+ { code: "ruq-latn", text: "Vl\u0103he\u015fte" },
 205+ { code: "vo", text: "Volap\u00fck" },
 206+ { code: "vec", text: "V\u00e8neto" },
 207+ { code: "fiu-vro", text: "V\u00f5ro" },
 208+ { code: "vro", text: "V\u00f5ro" },
 209+ { code: "wa", text: "Walon" },
 210+ { code: "vls", text: "West-Vlams" },
 211+ { code: "war", text: "Winaray" },
 212+ { code: "wo", text: "Wolof" },
 213+ { code: "ts", text: "Xitsonga" },
 214+ { code: "yo", text: "Yor\u00f9b\u00e1" },
 215+ { code: "diq", text: "Zazaki" },
 216+ { code: "zea", text: "Ze\u00eauws" },
 217+ { code: "sn", text: "chiShona" },
 218+ { code: "tum", text: "chiTumbuka" },
 219+ { code: "ike-latn", text: "inuktitut" },
 220+ { code: "xh", text: "isiXhosa" },
 221+ { code: "zu", text: "isiZulu" },
 222+ { code: "to", text: "lea faka-Tonga" },
 223+ { code: "tg-latn", text: "tojik\u012b" },
 224+ { code: "is", text: "\u00cdslenska" },
 225+ { code: "de-at", text: "\u00d6sterreichisches Deutsch" },
 226+ { code: "szl", text: "\u015al\u016fnski" },
 227+ { code: "el", text: "\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac" },
 228+ { code: "pnt", text: "\u03a0\u03bf\u03bd\u03c4\u03b9\u03b1\u03ba\u03ac" },
 229+ { code: "av", text: "\u0410\u0432\u0430\u0440" },
 230+ { code: "ab", text: "\u0410\u04a7\u0441\u0443\u0430" },
 231+ { code: "ba", text: "\u0411\u0430\u0448\u04a1\u043e\u0440\u0442" },
 232+ { code: "be", text: "\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f" },
 233+ { code: "be-tarask", text: "\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f (\u0442\u0430\u0440\u0430\u0448\u043a\u0435\u0432\u0456\u0446\u0430)" },
 234+ { code: "be-x-old", text: "\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f (\u0442\u0430\u0440\u0430\u0448\u043a\u0435\u0432\u0456\u0446\u0430)" },
 235+ { code: "bxr", text: "\u0411\u0443\u0440\u044f\u0430\u0434" },
 236+ { code: "bg", text: "\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438" },
 237+ { code: "ruq-cyrl", text: "\u0412\u043b\u0430\u0445\u0435\u0441\u0442\u0435" },
 238+ { code: "inh", text: "\u0413\u0406\u0430\u043b\u0433\u0406\u0430\u0439 \u011eal\u011faj" },
 239+ { code: "os", text: "\u0418\u0440\u043e\u043d\u0430\u0443" },
 240+ { code: "kv", text: "\u041a\u043e\u043c\u0438" },
 241+ { code: "ky", text: "\u041a\u044b\u0440\u0433\u044b\u0437\u0447\u0430" },
 242+ { code: "lbe", text: "\u041b\u0430\u043a\u043a\u0443" },
 243+ { code: "lez", text: "\u041b\u0435\u0437\u0433\u0438" },
 244+ { code: "mk", text: "\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438" },
 245+ { code: "mdf", text: "\u041c\u043e\u043a\u0448\u0435\u043d\u044c" },
 246+ { code: "mo", text: "\u041c\u043e\u043b\u0434\u043e\u0432\u0435\u043d\u044f\u0441\u043a\u044d" },
 247+ { code: "mn", text: "\u041c\u043e\u043d\u0433\u043e\u043b" },
 248+ { code: "ce", text: "\u041d\u043e\u0445\u0447\u0438\u0439\u043d" },
 249+ { code: "mhr", text: "\u041e\u043b\u044b\u043a \u041c\u0430\u0440\u0438\u0439" },
 250+ { code: "ru", text: "\u0420\u0443\u0441\u0441\u043a\u0438\u0439" },
 251+ { code: "sah", text: "\u0421\u0430\u0445\u0430 \u0442\u044b\u043b\u0430" },
 252+ { code: "cu", text: "\u0421\u043b\u043e\u0432\u0463\u0301\u043d\u044c\u0441\u043a\u044a \/ \u2c14\u2c0e\u2c11\u2c02\u2c21\u2c10\u2c20\u2c14\u2c0d\u2c1f" },
 253+ { code: "sr-ec", text: "\u0421\u0440\u043f\u0441\u043a\u0438 (\u045b\u0438\u0440\u0438\u043b\u0438\u0446\u0430)" },
 254+ { code: "sr", text: "\u0421\u0440\u043f\u0441\u043a\u0438 \/ Srpski" },
 255+ { code: "tt-cyrl", text: "\u0422\u0430\u0442\u0430\u0440\u0447\u0430" },
 256+ { code: "tt", text: "\u0422\u0430\u0442\u0430\u0440\u0447\u0430\/Tatar\u00e7a" },
 257+ { code: "tg", text: "\u0422\u043e\u04b7\u0438\u043a\u04e3" },
 258+ { code: "tg-cyrl", text: "\u0422\u043e\u04b7\u0438\u043a\u04e3" },
 259+ { code: "tyv", text: "\u0422\u044b\u0432\u0430 \u0434\u044b\u043b" },
 260+ { code: "udm", text: "\u0423\u0434\u043c\u0443\u0440\u0442" },
 261+ { code: "uk", text: "\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430" },
 262+ { code: "xal", text: "\u0425\u0430\u043b\u044c\u043c\u0433" },
 263+ { code: "cv", text: "\u0427\u04d1\u0432\u0430\u0448\u043b\u0430" },
 264+ { code: "myv", text: "\u042d\u0440\u0437\u044f\u043d\u044c" },
 265+ { code: "kk", text: "\u049a\u0430\u0437\u0430\u049b\u0448\u0430" },
 266+ { code: "hy", text: "\u0540\u0561\u0575\u0565\u0580\u0565\u0576" },
 267+ { code: "yi", text: "\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9" },
 268+ { code: "he", text: "\u05e2\u05d1\u05e8\u05d9\u05ea" },
 269+ { code: "ug-arab", text: "\u0626\u06c7\u064a\u063a\u06c7\u0631\u0686\u06d5" },
 270+ { code: "ur", text: "\u0627\u0631\u062f\u0648" },
 271+ { code: "ar", text: "\u0627\u0644\u0639\u0631\u0628\u064a\u0629" },
 272+ { code: "bqi", text: "\u0628\u062e\u062a\u064a\u0627\u0631\u064a" },
 273+ { code: "bcc", text: "\u0628\u0644\u0648\u0686\u06cc \u0645\u06a9\u0631\u0627\u0646\u06cc" },
 274+ { code: "sd", text: "\u0633\u0646\u068c\u064a" },
 275+ { code: "fa", text: "\u0641\u0627\u0631\u0633\u06cc" },
 276+ { code: "arz", text: "\u0645\u0635\u0631\u0649" },
 277+ { code: "mzn", text: "\u0645\u064e\u0632\u0650\u0631\u0648\u0646\u064a" },
 278+ { code: "ha", text: "\u0647\u064e\u0648\u064f\u0633\u064e" },
 279+ { code: "pnb", text: "\u067e\u0646\u062c\u0627\u0628\u06cc" },
 280+ { code: "ps", text: "\u067e\u069a\u062a\u0648" },
 281+ { code: "glk", text: "\u06af\u06cc\u0644\u06a9\u06cc" },
 282+ { code: "arc", text: "\u0710\u072a\u0721\u071d\u0710" },
 283+ { code: "dv", text: "\u078b\u07a8\u0788\u07ac\u0780\u07a8\u0784\u07a6\u0790\u07b0" },
 284+ { code: "ks", text: "\u0915\u0936\u094d\u092e\u0940\u0930\u0940 - (\u0643\u0634\u0645\u064a\u0631\u064a)" },
 285+ { code: "new", text: "\u0928\u0947\u092a\u093e\u0932 \u092d\u093e\u0937\u093e" },
 286+ { code: "ne", text: "\u0928\u0947\u092a\u093e\u0932\u0940" },
 287+ { code: "pi", text: "\u092a\u093e\u093f\u0934" },
 288+ { code: "hif-deva", text: "\u092b\u093c\u0940\u091c\u0940 \u0939\u093f\u0928\u094d\u0926\u0940" },
 289+ { code: "bh", text: "\u092d\u094b\u091c\u092a\u0941\u0930\u0940" },
 290+ { code: "mr", text: "\u092e\u0930\u093e\u0920\u0940" },
 291+ { code: "mai", text: "\u092e\u0948\u0925\u093f\u0932\u0940" },
 292+ { code: "sa", text: "\u0938\u0902\u0938\u094d\u0915\u0943\u0924" },
 293+ { code: "hi", text: "\u0939\u093f\u0928\u094d\u0926\u0940" },
 294+ { code: "as", text: "\u0985\u09b8\u09ae\u09c0\u09af\u09bc\u09be" },
 295+ { code: "bpy", text: "\u0987\u09ae\u09be\u09b0 \u09a0\u09be\u09b0\/\u09ac\u09bf\u09b7\u09cd\u09a3\u09c1\u09aa\u09cd\u09b0\u09bf\u09af\u09bc\u09be \u09ae\u09a3\u09bf\u09aa\u09c1\u09b0\u09c0" },
 296+ { code: "bn", text: "\u09ac\u09be\u0982\u09b2\u09be" },
 297+ { code: "pa", text: "\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40" },
 298+ { code: "gu", text: "\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0" },
 299+ { code: "or", text: "\u0b13\u0b21\u0b3c\u0b3f\u0b06" },
 300+ { code: "ta", text: "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" },
 301+ { code: "te", text: "\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41" },
 302+ { code: "sma", text: "\u00c5arjelsaemien" },
 303+ { code: "kn", text: "\u0c95\u0ca8\u0ccd\u0ca8\u0ca1" },
 304+ { code: "tcy", text: "\u0ca4\u0cc1\u0cb3\u0cc1" },
 305+ { code: "ml", text: "\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02" },
 306+ { code: "si", text: "\u0dc3\u0dd2\u0d82\u0dc4\u0dbd" },
 307+ { code: "th", text: "\u0e44\u0e17\u0e22" },
 308+ { code: "lo", text: "\u0ea5\u0eb2\u0ea7" },
 309+ { code: "dz", text: "\u0f47\u0f7c\u0f44\u0f0b\u0f41" },
 310+ { code: "bo", text: "\u0f56\u0f7c\u0f51\u0f0b\u0f61\u0f72\u0f42" },
 311+ { code: "my", text: "\u1019\u103c\u1014\u103a\u1019\u102c\u1018\u102c\u101e\u102c" },
 312+ { code: "cs", text: "\u010cesky" },
 313+ { code: "xmf", text: "\u10db\u10d0\u10e0\u10d2\u10d0\u10da\u10e3\u10e0\u10d8" },
 314+ { code: "ka", text: "\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8" },
 315+ { code: "ti", text: "\u1275\u130d\u122d\u129b" },
 316+ { code: "am", text: "\u12a0\u121b\u122d\u129b" },
 317+ { code: "chr", text: "\u13e3\u13b3\u13a9" },
 318+ { code: "ike-cans", text: "\u1403\u14c4\u1483\u144e\u1450\u1466" },
 319+ { code: "iu", text: "\u1403\u14c4\u1483\u144e\u1450\u1466\/inuktitut" },
 320+ { code: "km", text: "\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a" },
 321+ { code: "bat-smg", text: "\u017demait\u0117\u0161ka" },
 322+ { code: "bug", text: "\u1a05\u1a14 \u1a15\u1a18\u1a01\u1a17" },
 323+ { code: "grc", text: "\u1f08\u03c1\u03c7\u03b1\u03af\u03b1 \u1f11\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u1f74" },
 324+ { code: "ku-latn", text: "\u202aKurd\u00ee (lat\u00een\u00ee)\u202c" },
 325+ { code: "kk-tr", text: "\u202aQazaq\u015fa (T\u00fcrk\u00efya)\u202c" },
 326+ { code: "kk-latn", text: "\u202aQazaq\u015fa (lat\u0131n)\u202c" },
 327+ { code: "crh-latn", text: "\u202aQ\u0131r\u0131mtatarca (Latin)\u202c" },
 328+ { code: "ckb-latn", text: "\u202aSoran\u00ee (lat\u00een\u00ee)\u202c" },
 329+ { code: "crh-cyrl", text: "\u202a\u041a\u044a\u044b\u0440\u044b\u043c\u0442\u0430\u0442\u0430\u0440\u0434\u0436\u0430 (\u041a\u0438\u0440\u0438\u043b\u043b)\u202c" },
 330+ { code: "kk-cyrl", text: "\u202a\u049a\u0430\u0437\u0430\u049b\u0448\u0430 (\u043a\u0438\u0440\u0438\u043b)\u202c" },
 331+ { code: "kk-kz", text: "\u202a\u049a\u0430\u0437\u0430\u049b\u0448\u0430 (\u049a\u0430\u0437\u0430\u049b\u0441\u0442\u0430\u043d)\u202c" },
 332+ { code: "kk-arab", text: "\u202b\u0642\u0627\u0632\u0627\u0642\u0634\u0627 (\u062a\u0674\u0648\u062a\u06d5)\u202c" },
 333+ { code: "kk-cn", text: "\u202b\u0642\u0627\u0632\u0627\u0642\u0634\u0627 (\u062c\u06c7\u0646\u06af\u0648)\u202c" },
 334+ { code: "ku-arab", text: "\u202b\u0643\u0648\u0631\u062f\u064a (\u0639\u06d5\u0631\u06d5\u0628\u06cc)\u202c" },
 335+ { code: "ckb-arab", text: "\u202b\u06a9\u0648\u0631\u062f\u06cc (\u0639\u06d5\u0631\u06d5\u0628\u06cc)\u202c" },
 336+ { code: "zh", text: "\u4e2d\u6587" },
 337+ { code: "zh-cn", text: "\u4e2d\u6587(\u4e2d\u56fd\u5927\u9646)" },
 338+ { code: "zh-tw", text: "\u4e2d\u6587(\u53f0\u7063)" },
 339+ { code: "zh-sg", text: "\u4e2d\u6587(\u65b0\u52a0\u5761)" },
 340+ { code: "zh-mo", text: "\u4e2d\u6587(\u6fb3\u9580)" },
 341+ { code: "zh-hans", text: "\u4e2d\u6587(\u7b80\u4f53)" },
 342+ { code: "zh-hant", text: "\u4e2d\u6587(\u7e41\u9ad4)" },
 343+ { code: "zh-hk", text: "\u4e2d\u6587(\u9999\u6e2f)" },
 344+ { code: "zh-my", text: "\u4e2d\u6587(\u9a6c\u6765\u897f\u4e9a)" },
 345+ { code: "wuu", text: "\u5434\u8bed" },
 346+ { code: "lzh", text: "\u6587\u8a00" },
 347+ { code: "zh-classical", text: "\u6587\u8a00" },
 348+ { code: "ja", text: "\u65e5\u672c\u8a9e" },
 349+ { code: "yue", text: "\u7cb5\u8a9e" },
 350+ { code: "zh-yue", text: "\u7cb5\u8a9e" },
 351+ { code: "gan", text: "\u8d1b\u8a9e" },
 352+ { code: "gan-hant", text: "\u8d1b\u8a9e(\u7e41\u9ad4)" },
 353+ { code: "gan-hans", text: "\u8d63\u8bed(\u7b80\u4f53)" },
 354+ { code: "ii", text: "\ua187\ua259" },
 355+ { code: "ko", text: "\ud55c\uad6d\uc5b4" },
 356+ { code: "ko-kp", text: "\ud55c\uad6d\uc5b4 (\uc870\uc120)" },
 357+ { code: "got", text: "\ud800\udf32\ud800\udf3f\ud800\udf44\ud800\udf39\ud800\udf43\ud800\udf3a" },
Index: trunk/tools/langcodes/langs
@@ -0,0 +1,357 @@
 2+Qaf\u00e1r af aa
 3+\u0410\u04a7\u0441\u0443\u0430 ab
 4+Ac\u00e8h ace
 5+Afrikaans af
 6+Akan ak
 7+Geg\u00eb aln
 8+Alemannisch als
 9+\u12a0\u121b\u122d\u129b am
 10+Aragon\u00e9s an
 11+Anglo-Saxon ang
 12+\u0627\u0644\u0639\u0631\u0628\u064a\u0629 ar
 13+\u0710\u072a\u0721\u071d\u0710 arc
 14+Mapudungun arn
 15+\u0645\u0635\u0631\u0649 arz
 16+\u0985\u09b8\u09ae\u09c0\u09af\u09bc\u09be as
 17+Asturianu ast
 18+\u0410\u0432\u0430\u0440 av
 19+Kotava avk
 20+Aymar aru ay
 21+Az\u0259rbaycan az
 22+\u0411\u0430\u0448\u04a1\u043e\u0440\u0442 ba
 23+Boarisch bar
 24+\u017demait\u0117\u0161ka bat-smg
 25+\u0628\u0644\u0648\u0686\u06cc \u0645\u06a9\u0631\u0627\u0646\u06cc bcc
 26+Bikol Central bcl
 27+\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f be
 28+\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f (\u0442\u0430\u0440\u0430\u0448\u043a\u0435\u0432\u0456\u0446\u0430) be-tarask
 29+\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f (\u0442\u0430\u0440\u0430\u0448\u043a\u0435\u0432\u0456\u0446\u0430) be-x-old
 30+\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 bg
 31+\u092d\u094b\u091c\u092a\u0941\u0930\u0940 bh
 32+Bislama bi
 33+Bamanankan bm
 34+\u09ac\u09be\u0982\u09b2\u09be bn
 35+\u0f56\u0f7c\u0f51\u0f0b\u0f61\u0f72\u0f42 bo
 36+\u0987\u09ae\u09be\u09b0 \u09a0\u09be\u09b0\/\u09ac\u09bf\u09b7\u09cd\u09a3\u09c1\u09aa\u09cd\u09b0\u09bf\u09af\u09bc\u09be \u09ae\u09a3\u09bf\u09aa\u09c1\u09b0\u09c0 bpy
 37+\u0628\u062e\u062a\u064a\u0627\u0631\u064a bqi
 38+Brezhoneg br
 39+Bosanski bs
 40+\u1a05\u1a14 \u1a15\u1a18\u1a01\u1a17 bug
 41+\u0411\u0443\u0440\u044f\u0430\u0434 bxr
 42+Catal\u00e0 ca
 43+Chavacano de Zamboanga cbk-zam
 44+M\u00ecng-d\u0115\u0324ng-ng\u1e73\u0304 cdo
 45+\u041d\u043e\u0445\u0447\u0438\u0439\u043d ce
 46+Cebuano ceb
 47+Chamoru ch
 48+Choctaw cho
 49+\u13e3\u13b3\u13a9 chr
 50+Tsets\u00eahest\u00e2hese chy
 51+Soran\u00ee \/ \u06a9\u0648\u0631\u062f\u06cc ckb
 52+\u202aSoran\u00ee (lat\u00een\u00ee)\u202c ckb-latn
 53+\u202b\u06a9\u0648\u0631\u062f\u06cc (\u0639\u06d5\u0631\u06d5\u0628\u06cc)\u202c ckb-arab
 54+Corsu co
 55+N\u0113hiyaw\u0113win \/ \u14c0\u1426\u1403\u152d\u140d\u140f\u1423 cr
 56+Q\u0131r\u0131mtatarca crh
 57+\u202aQ\u0131r\u0131mtatarca (Latin)\u202c crh-latn
 58+\u202a\u041a\u044a\u044b\u0440\u044b\u043c\u0442\u0430\u0442\u0430\u0440\u0434\u0436\u0430 (\u041a\u0438\u0440\u0438\u043b\u043b)\u202c crh-cyrl
 59+\u010cesky cs
 60+Kasz\u00ebbsczi csb
 61+\u0421\u043b\u043e\u0432\u0463\u0301\u043d\u044c\u0441\u043a\u044a \/ \u2c14\u2c0e\u2c11\u2c02\u2c21\u2c10\u2c20\u2c14\u2c0d\u2c1f cu
 62+\u0427\u04d1\u0432\u0430\u0448\u043b\u0430 cv
 63+Cymraeg cy
 64+Dansk da
 65+Deutsch de
 66+\u00d6sterreichisches Deutsch de-at
 67+Schweizer Hochdeutsch de-ch
 68+Deutsch (Sie-Form) de-formal
 69+Zazaki diq
 70+Dansk (deprecated:da) dk
 71+Dolnoserbski dsb
 72+\u078b\u07a8\u0788\u07ac\u0780\u07a8\u0784\u07a6\u0790\u07b0 dv
 73+\u0f47\u0f7c\u0f44\u0f0b\u0f41 dz
 74+E\u028begbe ee
 75+\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac el
 76+Emili\u00e0n e rumagn\u00f2l eml
 77+English en
 78+British English en-gb
 79+Esperanto eo
 80+Espa\u00f1ol es
 81+Eesti et
 82+Euskara eu
 83+Estreme\u00f1u ext
 84+\u0641\u0627\u0631\u0633\u06cc fa
 85+Fulfulde ff
 86+Suomi fi
 87+V\u00f5ro fiu-vro
 88+Na Vosa Vakaviti fj
 89+F\u00f8royskt fo
 90+Fran\u00e7ais fr
 91+Fran\u00e7ais cadien frc
 92+Arpetan frp
 93+Furlan fur
 94+Frysk fy
 95+Gaeilge ga
 96+Gagauz gag
 97+\u8d1b\u8a9e gan
 98+\u8d63\u8bed(\u7b80\u4f53) gan-hans
 99+\u8d1b\u8a9e(\u7e41\u9ad4) gan-hant
 100+G\u00e0idhlig gd
 101+Galego gl
 102+\u06af\u06cc\u0644\u06a9\u06cc glk
 103+Ava\u00f1e'\u1ebd gn
 104+\ud800\udf32\ud800\udf3f\ud800\udf44\ud800\udf39\ud800\udf43\ud800\udf3a got
 105+\u1f08\u03c1\u03c7\u03b1\u03af\u03b1 \u1f11\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u1f74 grc
 106+Alemannisch gsw
 107+\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0 gu
 108+Gaelg gv
 109+\u0647\u064e\u0648\u064f\u0633\u064e ha
 110+Hak-k\u00e2-fa hak
 111+Hawai`i haw
 112+\u05e2\u05d1\u05e8\u05d9\u05ea he
 113+\u0939\u093f\u0928\u094d\u0926\u0940 hi
 114+Fiji Hindi hif
 115+\u092b\u093c\u0940\u091c\u0940 \u0939\u093f\u0928\u094d\u0926\u0940 hif-deva
 116+Fiji Hindi hif-latn
 117+Ilonggo hil
 118+Hiri Motu ho
 119+Hrvatski hr
 120+Hornjoserbsce hsb
 121+Krey\u00f2l ayisyen ht
 122+Magyar hu
 123+\u0540\u0561\u0575\u0565\u0580\u0565\u0576 hy
 124+Otsiherero hz
 125+Interlingua ia
 126+Bahasa Indonesia id
 127+Interlingue ie
 128+Igbo ig
 129+\ua187\ua259 ii
 130+I\u00f1upiak ik
 131+\u1403\u14c4\u1483\u144e\u1450\u1466 ike-cans
 132+inuktitut ike-latn
 133+Ilokano ilo
 134+\u0413\u0406\u0430\u043b\u0433\u0406\u0430\u0439 \u011eal\u011faj inh
 135+Ido io
 136+\u00cdslenska is
 137+Italiano it
 138+\u1403\u14c4\u1483\u144e\u1450\u1466\/inuktitut iu
 139+\u65e5\u672c\u8a9e ja
 140+Lojban jbo
 141+Jysk jut
 142+Basa Jawa jv
 143+\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8 ka
 144+Qaraqalpaqsha kaa
 145+Taqbaylit kab
 146+Kongo kg
 147+G\u0129k\u0169y\u0169 ki
 148+Kurmanc\u00ee kiu
 149+Kwanyama kj
 150+\u049a\u0430\u0437\u0430\u049b\u0448\u0430 kk
 151+\u202b\u0642\u0627\u0632\u0627\u0642\u0634\u0627 (\u062a\u0674\u0648\u062a\u06d5)\u202c kk-arab
 152+\u202a\u049a\u0430\u0437\u0430\u049b\u0448\u0430 (\u043a\u0438\u0440\u0438\u043b)\u202c kk-cyrl
 153+\u202aQazaq\u015fa (lat\u0131n)\u202c kk-latn
 154+\u202b\u0642\u0627\u0632\u0627\u0642\u0634\u0627 (\u062c\u06c7\u0646\u06af\u0648)\u202c kk-cn
 155+\u202a\u049a\u0430\u0437\u0430\u049b\u0448\u0430 (\u049a\u0430\u0437\u0430\u049b\u0441\u0442\u0430\u043d)\u202c kk-kz
 156+\u202aQazaq\u015fa (T\u00fcrk\u00efya)\u202c kk-tr
 157+Kalaallisut kl
 158+\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a km
 159+\u0c95\u0ca8\u0ccd\u0ca8\u0ca1 kn
 160+\ud55c\uad6d\uc5b4 ko
 161+\ud55c\uad6d\uc5b4 (\uc870\uc120) ko-kp
 162+Kanuri kr
 163+Krio kri
 164+Kinaray-a krj
 165+\u0915\u0936\u094d\u092e\u0940\u0930\u0940 - (\u0643\u0634\u0645\u064a\u0631\u064a) ks
 166+Ripoarisch ksh
 167+Kurd\u00ee \/ \u0643\u0648\u0631\u062f\u06cc ku
 168+\u202aKurd\u00ee (lat\u00een\u00ee)\u202c ku-latn
 169+\u202b\u0643\u0648\u0631\u062f\u064a (\u0639\u06d5\u0631\u06d5\u0628\u06cc)\u202c ku-arab
 170+\u041a\u043e\u043c\u0438 kv
 171+Kernowek kw
 172+\u041a\u044b\u0440\u0433\u044b\u0437\u0447\u0430 ky
 173+Latina la
 174+Ladino lad
 175+L\u00ebtzebuergesch lb
 176+\u041b\u0430\u043a\u043a\u0443 lbe
 177+\u041b\u0435\u0437\u0433\u0438 lez
 178+Lingua Franca Nova lfn
 179+Luganda lg
 180+Limburgs li
 181+L\u00edguru lij
 182+Lumbaart lmo
 183+Ling\u00e1la ln
 184+\u0ea5\u0eb2\u0ea7 lo
 185+Silozi loz
 186+Lietuvi\u0173 lt
 187+Latvie\u0161u lv
 188+\u6587\u8a00 lzh
 189+\u092e\u0948\u0925\u093f\u0932\u0940 mai
 190+Basa Banyumasan map-bms
 191+\u041c\u043e\u043a\u0448\u0435\u043d\u044c mdf
 192+Malagasy mg
 193+Ebon mh
 194+\u041e\u043b\u044b\u043a \u041c\u0430\u0440\u0438\u0439 mhr
 195+M\u0101ori mi
 196+\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 mk
 197+\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02 ml
 198+\u041c\u043e\u043d\u0433\u043e\u043b mn
 199+\u041c\u043e\u043b\u0434\u043e\u0432\u0435\u043d\u044f\u0441\u043a\u044d mo
 200+\u092e\u0930\u093e\u0920\u0940 mr
 201+Bahasa Melayu ms
 202+Malti mt
 203+Mvskoke mus
 204+Mirand\u00e9s mwl
 205+\u1019\u103c\u1014\u103a\u1019\u102c\u1018\u102c\u101e\u102c my
 206+\u042d\u0440\u0437\u044f\u043d\u044c myv
 207+\u0645\u064e\u0632\u0650\u0631\u0648\u0646\u064a mzn
 208+Dorerin Naoero na
 209+N\u0101huatl nah
 210+B\u00e2n-l\u00e2m-g\u00fa nan
 211+Nnapulitano nap
 212+Norsk (bokm\u00e5l) nb
 213+Plattd\u00fc\u00fctsch nds
 214+Nedersaksisch nds-nl
 215+\u0928\u0947\u092a\u093e\u0932\u0940 ne
 216+\u0928\u0947\u092a\u093e\u0932 \u092d\u093e\u0937\u093e new
 217+Oshiwambo ng
 218+Niu\u0113 niu
 219+Nederlands nl
 220+Norsk (nynorsk) nn
 221+Norsk (bokm\u00e5l) no
 222+Novial nov
 223+Nouormand nrm
 224+Sesotho sa Leboa nso
 225+Din\u00e9 bizaad nv
 226+Chi-Chewa ny
 227+Occitan oc
 228+Oromoo om
 229+\u0b13\u0b21\u0b3c\u0b3f\u0b06 or
 230+\u0418\u0440\u043e\u043d\u0430\u0443 os
 231+\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40 pa
 232+Pangasinan pag
 233+Kapampangan pam
 234+Papiamentu pap
 235+Picard pcd
 236+Deitsch pdc
 237+Plautdietsch pdt
 238+Pf\u00e4lzisch pfl
 239+\u092a\u093e\u093f\u0934 pi
 240+Norfuk \/ Pitkern pih
 241+Polski pl
 242+Piemont\u00e8is pms
 243+\u067e\u0646\u062c\u0627\u0628\u06cc pnb
 244+\u03a0\u03bf\u03bd\u03c4\u03b9\u03b1\u03ba\u03ac pnt
 245+\u067e\u069a\u062a\u0648 ps
 246+Portugu\u00eas pt
 247+Portugu\u00eas do Brasil pt-br
 248+Runa Simi qu
 249+Tarifit rif
 250+Rumantsch rm
 251+Romani rmy
 252+Kirundi rn
 253+Rom\u00e2n\u0103 ro
 254+Arm\u00e3neashce roa-rup
 255+Tarand\u00edne roa-tara
 256+\u0420\u0443\u0441\u0441\u043a\u0438\u0439 ru
 257+Vl\u0103he\u015fte ruq
 258+\u0412\u043b\u0430\u0445\u0435\u0441\u0442\u0435 ruq-cyrl
 259+Vl\u0103he\u015fte ruq-latn
 260+Kinyarwanda rw
 261+\u0938\u0902\u0938\u094d\u0915\u0943\u0924 sa
 262+\u0421\u0430\u0445\u0430 \u0442\u044b\u043b\u0430 sah
 263+Sardu sc
 264+Sicilianu scn
 265+Scots sco
 266+\u0633\u0646\u068c\u064a sd
 267+Sassaresu sdc
 268+S\u00e1megiella se
 269+Cmique Itom sei
 270+S\u00e4ng\u00f6 sg
 271+Srpskohrvatski \/ \u0421\u0440\u043f\u0441\u043a\u043e\u0445\u0440\u0432\u0430\u0442\u0441\u043a\u0438 sh
 272+Ta\u0161l\u1e25iyt shi
 273+\u0dc3\u0dd2\u0d82\u0dc4\u0dbd si
 274+Simple English simple
 275+Sloven\u010dina sk
 276+Sloven\u0161\u010dina sl
 277+Schl\u00e4sch sli
 278+Gagana Samoa sm
 279+\u00c5arjelsaemien sma
 280+chiShona sn
 281+Soomaaliga so
 282+Shqip sq
 283+\u0421\u0440\u043f\u0441\u043a\u0438 \/ Srpski sr
 284+\u0421\u0440\u043f\u0441\u043a\u0438 (\u045b\u0438\u0440\u0438\u043b\u0438\u0446\u0430) sr-ec
 285+Srpski (latinica) sr-el
 286+Sranantongo srn
 287+SiSwati ss
 288+Sesotho st
 289+Seeltersk stq
 290+Basa Sunda su
 291+Svenska sv
 292+Kiswahili sw
 293+\u015al\u016fnski szl
 294+\u0ba4\u0bae\u0bbf\u0bb4\u0bcd ta
 295+\u0ca4\u0cc1\u0cb3\u0cc1 tcy
 296+\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41 te
 297+Tetun tet
 298+\u0422\u043e\u04b7\u0438\u043a\u04e3 tg
 299+\u0422\u043e\u04b7\u0438\u043a\u04e3 tg-cyrl
 300+tojik\u012b tg-latn
 301+\u0e44\u0e17\u0e22 th
 302+\u1275\u130d\u122d\u129b ti
 303+T\u00fcrkmen\u00e7e tk
 304+Tagalog tl
 305+Setswana tn
 306+lea faka-Tonga to
 307+Toki Pona tokipona
 308+Toki Pona (deprecated:tokipona) tp
 309+Tok Pisin tpi
 310+T\u00fcrk\u00e7e tr
 311+Xitsonga ts
 312+\u0422\u0430\u0442\u0430\u0440\u0447\u0430\/Tatar\u00e7a tt
 313+\u0422\u0430\u0442\u0430\u0440\u0447\u0430 tt-cyrl
 314+Tatar\u00e7a tt-latn
 315+chiTumbuka tum
 316+Twi tw
 317+Reo M\u0101`ohi ty
 318+\u0422\u044b\u0432\u0430 \u0434\u044b\u043b tyv
 319+\u0423\u0434\u043c\u0443\u0440\u0442 udm
 320+Uyghurche\u200e \/ \u0626\u06c7\u064a\u063a\u06c7\u0631\u0686\u06d5 ug
 321+\u0626\u06c7\u064a\u063a\u06c7\u0631\u0686\u06d5 ug-arab
 322+Uyghurche\u200e ug-latn
 323+\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430 uk
 324+\u0627\u0631\u062f\u0648 ur
 325+O'zbek uz
 326+Tshivenda ve
 327+V\u00e8neto vec
 328+Vepsan kel' vep
 329+Ti\u1ebfng Vi\u1ec7t vi
 330+West-Vlams vls
 331+Volap\u00fck vo
 332+V\u00f5ro vro
 333+Walon wa
 334+Winaray war
 335+Wolof wo
 336+\u5434\u8bed wuu
 337+\u0425\u0430\u043b\u044c\u043c\u0433 xal
 338+isiXhosa xh
 339+\u10db\u10d0\u10e0\u10d2\u10d0\u10da\u10e3\u10e0\u10d8 xmf
 340+\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9 yi
 341+Yor\u00f9b\u00e1 yo
 342+\u7cb5\u8a9e yue
 343+Vahcuengh za
 344+Ze\u00eauws zea
 345+\u4e2d\u6587 zh
 346+\u6587\u8a00 zh-classical
 347+\u4e2d\u6587(\u4e2d\u56fd\u5927\u9646) zh-cn
 348+\u4e2d\u6587(\u7b80\u4f53) zh-hans
 349+\u4e2d\u6587(\u7e41\u9ad4) zh-hant
 350+\u4e2d\u6587(\u9999\u6e2f) zh-hk
 351+B\u00e2n-l\u00e2m-g\u00fa zh-min-nan
 352+\u4e2d\u6587(\u6fb3\u9580) zh-mo
 353+\u4e2d\u6587(\u9a6c\u6765\u897f\u4e9a) zh-my
 354+\u4e2d\u6587(\u65b0\u52a0\u5761) zh-sg
 355+\u4e2d\u6587(\u53f0\u7063) zh-tw
 356+\u7cb5\u8a9e zh-yue
 357+isiZulu zu
 358+
Index: trunk/tools/langcodes/sortLangs.pl
@@ -0,0 +1,35 @@
 2+#!/usr/bin/perl -w
 3+
 4+#
 5+# invoke this script on the included 'langs' file
 6+# e.g. perl sortLangs.pl langs
 7+# to sort the entries by name, not by language code
 8+#
 9+
 10+use strict;
 11+
 12+my @lines = <>;
 13+my %memo;
 14+
 15+
 16+my @sorted = sort {
 17+ normalize($a) cmp normalize($b)
 18+} @lines;
 19+
 20+foreach my $line (@sorted) {
 21+ chomp($line);
 22+ my ($text, $code) = split(/\t/, $line, 2);
 23+ print qq[\t\t{ code: "$code", ] . (" " x (12-length($code))) . qq[ text: "$text" },\n];
 24+}
 25+
 26+sub normalize {
 27+ my ($s) = @_;
 28+ if (defined $memo{$s}) {
 29+ return $memo{$s};
 30+ }
 31+ my $norm = $s;
 32+ $norm =~ s/\\u([\da-f]+)/"\"\\x{" . $1 . "}\""/gee;
 33+ $memo{$s} = $norm;
 34+ return $norm;
 35+}
 36+
Index: trunk/tools/langcodes/README
@@ -0,0 +1,17 @@
 2+This directory contains a few files I found useful when making language menus in Javascript.
 3+
 4+The problem was that MediaWiki sorted the items in the language menu by the language code, but displayed languages by their
 5+localized name. This meant that the languages were in effectively random order and were very difficult to find. Arabic was right
 6+next to Austrian, and so on.
 7+
 8+This perl script can sort by the unicode name, and then outputs a suitable fragment of a data structure for Javascript. You
 9+may find it useful for PHP as well.
 10+
 11+Problems:
 12+ - At present there seem to be a lot of weird dupes and deprecated codes and other stuff which may not be good to include.
 13+ - Some languages have needless Left-to-Right markers, which affects how they sort
 14+ - A true lexicographic sort would probably look different (Cesky (Czech) should be up in the European scripts, not down among the Middle Eastern scripts)
 15+
 16+
 17+-- Neil Kandalgaonkar (neilk@wikimedia.org)
 18+ 11 March 2010

Comments

#Comment by Nikerabbit (talk | contribs)   09:19, 12 March 2010
- Some languages have needless Left-to-Right markers, which affects how they sort

Those were added because otherwise they would look like mess in "other languages" list due to the not-so-wonderful Unicode bidi algorithm.

#Comment by NeilK (talk | contribs)   18:37, 12 March 2010

please see the comments on this revision for my response.

#Comment by NeilK (talk | contribs)   18:24, 12 March 2010

@Nikerabbit: Could LTR markers be added by whatever builds the menu, when appropriate? It still seems wrong to hardcode it into the name of the language (for instance, Norwegian / Norsk).

#Comment by Nikerabbit (talk | contribs)   18:42, 12 March 2010

I have few ideas that I can't currently test:

  1. Use unicode-bidi: embed; for the link text.
  2. check if there is '(' and add ltr/rtl markers according to if the language is rtl or ltr.

The latter may be too slow, due to constructing lots of language objects. The first option may or may not work.

Status & tagging log