MediaWiki:LanguageHandler.js

From Wikimini Stock
Jump to: navigation, search

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
// <source lang="javascript">
/*
  Some basic language support, use by the upload form rewrite.
 
  Author: [[User:Lupo]], January 2008
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)
 
  Choose whichever license of these you like best :-)
*/
 
var LanguageHandler = {
 
  languages2 : new Array (
    // Sorted by language name, not language code! Except for strange scripts... 
    {text : 'Авар', lang : 'av'},
    {text : 'Afar', lang : 'aa'}, 
    {text : 'Аҧсуа', lang : 'ab'},
    {text : 'Afrikaans', lang : 'af'}, 
    {text : 'Akan', lang : 'ak'}, 
    {text : 'አማርኛ', lang : 'am'},
    {text : 'Alemannisch', lang : 'als'},
    {text : 'Anglo Saxon', lang : 'ang'}, 
    {text : 'العربية', lang : 'ar'}, 
    {text : 'Aragonés', lang : 'an'},
    {text : 'Armãneashce', lang : 'roa-rup'},
    {text : 'Arpetan', lang : 'frp'},
    {text : 'ܐܪܡܝܐ', lang : 'arc'},
    {text : 'অসমীয়া', lang : 'as'},
    {text : 'Asturianu', lang : 'ast'},
    {text : 'Avañe\'ẽ', lang : 'gn'},
    {text : 'Aymar', lang : 'ay'},
    {text : 'Azərbaycan', lang : 'az'},
 
    {text : 'Башҡорт', lang : 'ba'},
    {text : 'Беларуская', lang : 'be'},
    {text : 'Беларуская (тарашкевіца)', lang : 'be-tarask'},
    {text : 'Български', lang : 'bg'},
    {text : 'Bamanankan', lang : 'bm'},
    {text : 'Bân-lâm-gú', lang : 'zh-min-nan'}, // Or 'nan', or 'minnan'
    {text : 'Bikol Central', lang : 'bcl'},
    {text : 'Bislama', lang : 'bi'},
    {text : 'भोजपुरी', lang : 'bh'},
    {text : 'বাংলা', lang : 'bn'},
    {text : 'བོད་ཡིག', lang : 'bo'},
    {text : 'বিষ্ণুপ্রিয়া মণিপুরী', lang : 'bpy'},
    {text : 'Bosanski', lang : 'bs'},
    {text : 'Brezhoneg', lang : 'br'},
    {text : 'ᨅᨔ ᨕᨘᨁᨗ', lang : 'bug'},
 
    {text : 'Чăвашла', lang : 'cv'},
    {text : 'Català', lang : 'ca'},
    {text : 'Cebuano', lang : 'ceb'},
    {text : 'ᏣᎳᎩ', lang : 'chr'},
    {text : 'Chi-Chewa', lang : 'ny'},
    {text : 'Cmique Itom', lang : 'sei'},
    {text : 'Corsu', lang : 'co'},
    {text : 'Česky', lang : 'cs'},
    {text : 'Словѣньскъ', lang : 'cu'},
    {text : '(Cuengh)', lang : 'za'},
    {text : 'Cymraeg', lang : 'cy'},
 
    {text : 'Dansk', lang : 'da'},
    {text : 'Deitsch', lang : 'pdc'},
    {text : 'Deutsch', lang : 'de'},
    {text : 'Diné bizaad', lang : 'nv'},
    {text : 'Dolnoserbski', lang : 'dsb'},
    {text : 'ދިވެހިބަސް', lang : 'dv'},
    {text : 'ཇོང་ཁ', lang : 'dz'},
 
    {text : 'Eʋegbe', lang : 'ee'},
    {text : 'Eesti', lang : 'et'},
    {text : 'Ekakairũ Naoero', lang : 'na'},
    {text : 'Ελληνικά', lang : 'el'},
    {text : 'Emiliàn e rumagnòl', lang : 'eml'},
    {text : 'English', lang : 'en'},
    {text : 'эрзянь кель', lang : 'myv'},
    {text : 'Esperanto', lang : 'eo'},
    {text : 'Español', lang : 'es'},
    {text : 'Estremeñu', lang : 'ext'},
    {text : 'Euskara', lang : 'eu'},
 
    {text : 'فارسی', lang : 'fa'},
    {text : 'Français', lang : 'fr'},
    {text : 'Français cadien', lang : 'frc'},
    {text : 'Frysk', lang : 'fy'},
    {text : 'Fulfulde', lang : 'ff'},
    {text : 'Furlan', lang : 'fur'},
    {text : 'Føroyskt', lang : 'fo'},
 
    {text : 'Gaeilge', lang : 'ga'},
    {text : 'Gagauz', lang : 'gag'},
    {text : '贛語', lang : 'gan'},
    {text : 'Gàidhlig', lang : 'gd'},
    {text : 'Galego', lang : 'gl'},
    {text : 'ГІалгІай Ğalğaj', lang : 'inh'},
    {text : 'Gegë', lang : 'aln'},
    {text : 'گیلکی', lang : 'glk'},
    {text : '𐌲𐌿𐍄𐌹𐍃𐌺', lang : 'got'},
    {text : 'ગુજરાતી', lang : 'gu'},
 
    {text : 'Hak-kâ-fa', lang : 'hak'},
    {text : 'Hawai`i', lang : 'haw'},
    {text : 'עברית', lang : 'he'},
    {text : 'हिन्दी', lang : 'hi'},
    {text : 'Hornjoserbsce', lang : 'hsb'},
    {text : 'Hrvatski', lang : 'hr'},
    {text : 'Հայերեն', lang : 'hy'},
 
    {text : 'Ido', lang : 'io'},
    {text : 'Igbo', lang : 'ig'},
    {text : 'Ilokano', lang : 'ilo'},
    {text : 'Bahasa Indonesia', lang : 'id'},
    {text : 'Interlingua', lang : 'ia'},
    {text : 'Interlingue', lang : 'ie'},
    {text : 'ᐃᓄᒃᑎᑐᑦ', lang : 'ike-cans'},
    {text : 'inuktitut', lang : 'ike-latn'},
    {text : 'ᐃᓄᒃᑎᑐᑦ/inuktitut', lang : 'iu'},
    {text : 'ꆇꉙ', lang : 'ii'},
    {text : 'Iñupiak', lang : 'ik'},
    {text : 'Иронау', lang : 'os'},
    {text : 'Íslenska', lang : 'is'},
    {text : 'Italiano', lang : 'it'},
 
    {text : '日本語', lang : 'ja'},
    {text : 'Basa Jawa', lang : 'jv'},
 
    {text : 'Kalaallisut', lang : 'kl'},
    {text : 'Kaszëbsczi', lang : 'csb'},
    {text : 'Қазақша', lang : 'kk'},
    {text : 'ქართული', lang : 'ka'},
    {text : 'Kernewek', lang : 'kw'},
    {text : 'Kinaray-a', lang : 'krj'},
    {text : 'Kiswahili', lang : 'sw'},
    {text : 'Коми', lang : 'kv'},
    {text : 'Kotava', lang : 'avk'},
    {text : 'Kongo', lang : 'kg'},
    {text : 'ភាសាខ្មែរ', lang : 'km'},
    {text : 'ಕನ್ನಡ', lang : 'kn'},
    {text : '한국어', lang : 'ko'},
    {text : 'कश्मीरी - (كشميري)', lang : 'ks'},
    {text : 'Kreyòl ayisyen', lang : 'ht'},
    {text : 'Kurdî / كوردی', lang : 'ku'},
    {text : 'Кыргызча', lang : 'ky'},
    {text : '‪Къырымтатарджа‬', lang : 'crh-cyrl'},
 
    {text : 'Ladin', lang : 'lld'},
    {text : 'Ladino', lang : 'lad'},
    {text : 'Лакку', lang : 'lbe'},
    {text : 'Latina', lang : 'la'},
    {text : 'Latviešu', lang : 'lv'},
    {text : 'Lëtzebuergesch', lang : 'lb'},
    {text : 'Lietuvių', lang : 'lt'},
    {text : 'Líguru', lang : 'lij'},
    {text : 'Limburgs', lang : 'li'},
    {text : 'Lingála', lang : 'ln'},
    {text : 'Lingua Franca Nova', lang : 'lfn'},
    {text : 'Lojban', lang : 'jbo'},
    {text : 'Luganda', lang : 'lg'},
    {text : 'Lumbaart', lang : 'lmo'},
    {text : 'ລາວ', lang : 'lo'},
 
    {text : 'Magyar', lang : 'hu'},
    {text : 'Македонски', lang : 'mk'},
    {text : 'Malagasy', lang : 'mg'},
    {text : 'Malti', lang : 'mt'},
    {text : 'Māori', lang : 'mi'},
    {text : 'Mapudungun', lang : 'arn'},
    {text : 'Bahasa Melayu', lang : 'ms'},
    {text : 'Middelnederlands', lang : 'dum'},
    {text : 'Mìng-dĕ̤ng-ngṳ̄', lang : 'cdo'},
    {text : 'Mizo ţawng', lang : 'lus'},
    {text : 'മലയാളം', lang : 'ml'},
    {text : 'мокшень кяль', lang : 'mdf'},
    {text : 'Монгол', lang : 'mn'},
    {text : 'मराठी', lang : 'mr'},
    {text : 'Myanmasa', lang : 'my'},
    {text : 'مَزِروني', lang : 'mzn'},
 
    {text : 'Na Vosa Vakaviti', lang : 'fj'},
    {text : 'Nahuatl', lang : 'nah'},
    {text : 'Nedersaksisch', lang : 'nds-nl'},
    {text : 'Nnapulitano', lang : 'nap'},
    {text : 'नेपाली', lang : 'ne'},
    {text : 'नेपाल भाषा', lang : 'new'},
    {text : 'Nederlands', lang : 'nl'},
    {text : '‪Norsk (nynorsk)‬', lang : 'nn'},
    {text : '‪Norsk (bokmål)‬', lang : 'no'},
    {text : 'Norrǿna', lang : 'non'},
    {text : 'Novial', lang : 'nov'},
    {text : 'Нохчийн', lang : 'ce'},
 
    {text : 'Occitan', lang : 'oc'},
    {text : 'ଓଡ଼ିଆ', lang : 'or'},
    {text : 'O\'zbek', lang : 'uz'},
 
    {text : 'ਪੰਜਾਬੀ', lang : 'pa'},
    {text : 'Pangasinan', lang : 'pag'},
    {text : 'Papiamentu', lang : 'pap'},
    {text : 'पािऴ', lang : 'pi'},
    {text : 'Piemontèis', lang : 'pms'},
    {text : 'Plattdüütsch', lang : 'nds'},
    {text : 'Polski', lang : 'pl'},
    {text : 'Ποντιακά', lang : 'pnt'},
    {text : 'پښتو', lang : 'ps'},
    {text : 'Português', lang : 'pt'},
    {text : 'Português do Brasil', lang : 'pt-br'},
 
    {text : 'Qaraqalpaqsha', lang : 'kaa'},
    {text : 'Qırımtatarca', lang : 'crh'},
 
    {text : 'Reo Mā`ohi', lang : 'ty'},
    {text : 'Ripoarisch', lang : 'ksh'},
    {text : 'Română', lang : 'ro'},
    {text : 'Romani', lang : 'rmy'},
    {text : 'Runa Simi', lang : 'qu'},
    {text : 'Rumantsch', lang : 'rm'},
    {text : 'Русский', lang : 'ru'},
 
    {text : 'संस्कृत', lang : 'sa'},
    {text : 'Sámegiella', lang : 'se'},
    {text : 'Sranantongo', lang : 'srn'},
    {text : 'Sardu', lang : 'sc'},
    {text : 'Sassaresu', lang : 'sdc'},
    {text : 'Scots', lang : 'sco'},
    {text : 'Саха тыла', lang : 'sah'},
    {text : 'Seeltersk', lang : 'stq'},
    {text : 'Sesotho sa Leboa', lang : 'nso'},
    {text : 'Setswana', lang : 'tn'},
    {text : 'Shqip', lang : 'sq'},
    {text : 'Sicilianu', lang : 'scn'},
    {text : 'سنڌي', lang : 'sd'},
    {text : 'Silozi', lang : 'loz'},
    {text : 'සිංහල', lang: 'si'},
    {text : 'SiSwati', lang : 'ss'},
    {text : 'Slovenčina', lang : 'sk'},
    {text : 'Slovenščina', lang : 'sl'},
    {text : 'chiShona', lang : 'sn'},
    {text : 'Soomaaliga', lang : 'so'},
    {text : 'Српски / Srpski', lang : 'sr'},
    {text : 'Basa Sunda', lang : 'su'},
    {text : 'Suomi', lang : 'fi'},
    {text : 'Svenska', lang : 'sv'},
 
    {text : 'Tagalog', lang : 'tl'},
    {text : 'Taqbaylit', lang : 'kab'},
    {text : 'Tshivenda', lang : 've'},
    {text : 'Tašlḥiyt', lang : 'shi'},
    {text : 'Tatarça', lang : 'tt'},
    {text : 'தமிழ்', lang : 'ta'},
    {text : 'తెలుగు', lang : 'te'},
    {text : 'Tetun', lang : 'tet'},
    {text : 'Tok Pisin', lang : 'tpi'},
    {text : 'faka-Tonga', lang : 'to'},
    {text : 'Тоҷикӣ', lang : 'tg'},
    {text : 'ไทย', lang : 'th'},
    {text : 'ትግርኛ', lang : 'ti'},
    {text : 'Türkçe', lang : 'tr'},
    {text : 'Türkmen', lang : 'tk'},
    {text : 'Тыва дыл', lang : 'tyv'},
 
    {text : 'Удмурт', lang : 'udm'},
    {text : 'Українська', lang : 'uk'},
    {text : 'Uyghurche‎ / ئۇيغۇرچە', lang : 'ug'},
    {text : 'اردو', lang : 'ur'},
 
    {text : 'Vèneto', lang : 'vec'},
    {text : 'Tiếng Việt', lang : 'vi'},
    {text : 'West-Vlams', lang : 'vls'},
    {text : 'Volapük', lang : 'vo'},
    {text : 'Võro', lang : 'fiu-vro'},
 
    {text : 'Walon', lang : 'wa'},
    {text : 'Winaray', lang : 'war'},
    {text : 'Wolof', lang : 'wo'},
    {text : '吴语', lang : 'wuu'},
 
    {text : 'Хальмг', lang : 'xal'},
    {text : 'isiXhosa', lang : 'xh'},
 
    {text : 'מיזרח־ייִדיש', lang : 'ydd'},
    {text : 'ייִדיש', lang : 'yi'},
    {text : '粵語', lang : 'yue'},
 
    {text : 'Zazaki', lang : 'diq'},
    {text : 'Zeêuws', lang : 'zea'},
    {text : 'Žemaitėška', lang : 'bat-smg'},
    {text : '中文', lang : 'zh'},
    {text : '古文 / 文言文', lang : 'zh-classical'},
    {text : '‪中文(中国大陆)‬', lang : 'zh-cn'},
    {text : '‪中文(简体)‬', lang : 'zh-hans'},
    {text : '‪中文(繁體)‬', lang : 'zh-hant'},
    {text : '‪中文(香港)‬', lang : 'zh-hk'},
 
    {text : '‪中文(新加坡)‬', lang : 'zh-sg'},
    {text : '‪中文(台灣)‬', lang : 'zh-tw'},
    {text : '粵語', lang : 'zh-yue'},
 
    {text : 'Åarjelsaemien gïele', lang : 'sma'}
  ),
 
  languages : new Array (
    // Sorted by language name, not language code! Except for strange scripts... 
    {text : 'العربية', lang : 'ar'}, 
    {text : 'Deutsch', lang : 'de'},
    {text : 'English', lang : 'en'},
    {text : 'Español', lang : 'es'},
    {text : 'Français', lang : 'fr'},
    {text : 'Italiano', lang : 'it'},
    {text : 'Svenska', lang : 'sv'}
  ),

  getSelect : function (id, preSelect, unknownLabel)
  {
    var select = document.createElement ('select');
    if (id != null) {
      select.setAttribute ('id', id);
      select.setAttribute ('name', id);
    }
    // Must have a text node. IE6 doesn't know Node.TEXT_NODE...
    while (unknownLabel && unknownLabel.nodeType != 3)
      unknownLabel = unknownLabel.firstChild;
    if (unknownLabel) {
      var unknown_option = document.createElement ('option');
      unknown_option.setAttribute ('value', 'unknown');
      unknown_option.appendChild (
        document.createTextNode (unknownLabel.data.replace (/^\s+/, "").replace (/\s+$/, "")));
      if (preSelect == null) unknown_option.setAttribute ('selected', 'selected');
      select.appendChild (unknown_option);
    }
    for (var i = 0; i < LanguageHandler.languages.length; i++) {
      var option = document.createElement ('option');
      option.setAttribute ('value', LanguageHandler.languages[i].lang);
      if (LanguageHandler.languages[i].lang == preSelect)
        option.setAttribute ('selected', 'selected');
      option.appendChild (document.createTextNode (LanguageHandler.languages[i].text));
      select.appendChild (option);
    }
    return select;      
  },
 
  closestIndex : function (langCode)
  {
    if (typeof (langCode) != 'string' || langCode == null || langCode.length == 0) return -1;
    // Check if we have it.
    if (langCode == 'nan' || langCode == 'minnan') langCode = 'zh-min-nan';
    for (var i = 0; i < LanguageHandler.languages.length; i++) {
      if (LanguageHandler.languages[i].lang == langCode) return i;
    }
    // Check for prefix
    var dash = langCode.indexOf ('-');
    if (dash >= 0)
      return LanguageHandler.closestIndex (langCode.substring (0, dash));
    return -1;
  },
 
  closestLanguage : function (langCode)
  {
    var idx = LanguageHandler.closestIndex (langCode);
    if (idx < 0) return null;
    return LanguageHandler.languages[idx].lang;
  },
 
  getPrefix : function (langStr)
  {
    // Given a string, check if any prefix substring matches one of the language codes. If so, return
    // the length of the longest matching language code, otherwise, return zero.
    // Note: if languageHandler.languages were sorted by length of language code, this could be sped up
    // by stopping on the first match. But the benefits of human-readability of the list in alphabetical
    // order outweigh this performance consideration.
    var match_length = 0;
    for (var i = 0; i < LanguageHandler.languages.length; i++) {
      var l = LanguageHandler.languages[i].lang.length;
      if (   l <= langStr.length && l > match_length
          && langStr.substr (0, l) == LanguageHandler.languages[i].lang)
        match_length = l;
    }
    return match_length;
  }
 
} // end LanguageHandler
 
// </source>