Browse Source

filter langauges

marc 8 years ago
parent
commit
c677aee58a
4 changed files with 81 additions and 72 deletions
  1. 9 1
      searx/engines/gigablast.py
  2. 19 15
      searx/engines/google.py
  3. 18 50
      searx/languages.py
  4. 35 6
      utils/update_languages.py

+ 9 - 1
searx/engines/gigablast.py

@@ -40,6 +40,12 @@ url_xpath = './/url'
 title_xpath = './/title'
 content_xpath = './/sum'
 
+supported_languages = ["en", "fr", "es", "ru", "tr", "ja", "zh-CN", "zh-TW", "ko", "de",
+                       "nl", "it", "fi", "sv", "no", "pt", "vi", "ar", "he", "id", "el",
+                       "th", "hi", "bn", "pl", "tl", "la", "eo", "ca", "bg", "tx", "sr",
+                       "hu", "da", "lt", "cs", "gl", "ka", "gd", "go", "ro", "ga", "lv",
+                       "hy", "is", "ag", "gv", "io", "fa", "te", "vv", "mg", "ku", "lb", "et"] 
+
 
 # do search-request
 def request(query, params):
@@ -48,7 +54,9 @@ def request(query, params):
     if params['language'] == 'all':
         language = 'xx'
     else:
-        language = params['language'].split('-')[0]
+        language = params['language'].replace('-', '_').lower()
+        if language.split('-')[0] != 'zh':
+            language = language.split('-')[0]
 
     if params['safesearch'] >= 1:
         safesearch = 1

+ 19 - 15
searx/engines/google.py

@@ -23,20 +23,20 @@ categories = ['general']
 paging = True
 language_support = True
 use_locale_domain = True
-supported_languages = ['de', 'en', 'es', 'es_419', 'fr', 'hr', 'it', 'nl', 'pl', 'pt-BR',
-                       'pt-PT', 'vi', 'tr', 'ru', 'ar', 'th', 'ko', 'zh-CN', 'zh-TW', 'ja',
-                       'ach', 'af', 'ak', 'az', 'ms', 'ban', 'xx_bork', 'bs', 'br', 'ca',
-                       'ceb', 'ckb', 'cs', 'sn', 'co', 'cy', 'da', 'yo', 'et', 'xx_elmer',
-                       'eo', 'eu', 'ee', 'tl', 'fo', 'gaa', 'ga', 'gd', 'gl', 'gn', 'xx_hacker',
-                       'ht', 'ha', 'haw', 'bem', 'ig', 'rn', 'id', 'ia', 'zu', 'is', 'jw', 'rw',
-                       'sw', 'tlh', 'kg', 'mfe', 'kri', 'la', 'lv', 'to', 'lt', 'ln', 'loz',
-                       'lua', 'lg', 'hu', 'mg', 'mt', 'mi', 'pcm', 'no', 'nso', 'ny', 'nn',
-                       'uz', 'oc', 'om', 'xx_pirate', 'pt', 'ro', 'mo', 'rm', 'qu', 'nyn', 'crs',
-                       'sq', 'sd', 'sk', 'sl', 'so', 'st', 'sr_ME', 'sr_Latn', 'su', 'fi', 'sv',
-                       'tg', 'tt', 'tn', 'tum', 'tk', 'tw', 'fy', 'wo', 'xh', 'el', 'be', 'bg',
-                       'ky', 'kk', 'mk', 'mn', 'sr', 'uk', 'ka', 'hy', 'yi', 'iw', 'ug', 'ur',
-                       'ps', 'fa', 'ti', 'am', 'ne', 'mr', 'hi', 'bn', 'pa', 'gu', 'or', 'ta',
-                       'te', 'kn', 'ml', 'si', 'lo', 'my', 'km', 'chr']
+supported_languages = ["ach", "af", "ak", "az", "ms", "ban", "xx-bork", "bs", "br", "ca",
+                       "ceb", "ckb", "cs", "sn", "co", "cy", "da", "de", "yo", "et",
+                       "xx-elmer", "en", "es", "es-419", "eo", "eu", "ee", "tl", "fo", "fr",
+                       "gaa", "ga", "gd", "gl", "gn", "xx-hacker", "ht", "ha", "hr", "haw",
+                       "bem", "ig", "rn", "id", "ia", "zu", "is", "it", "jw", "rw", "sw",
+                       "tlh", "kg", "mfe", "kri", "la", "lv", "to", "lt", "ln", "loz",
+                       "lua", "lg", "hu", "mg", "mt", "mi", "nl", "pcm", "no", "nso",
+                       "ny", "nn", "uz", "oc", "om", "xx-pirate", "pl", "pt-BR", "pt-PT",
+                       "ro", "rm", "qu", "nyn", "crs", "sq", "sd", "sk", "sl", "so", "st",
+                       "sr-ME", "sr-Latn", "su", "fi", "sv", "tg", "tt", "vi", "tn", "tum",
+                       "tr", "tk", "tw", "fy", "wo", "xh", "el", "be", "bg", "ky", "kk", "mk",
+                       "mn", "ru", "sr", "uk", "ka", "hy", "yi", "iw", "ug", "ur", "ar", "ps",
+                       "fa", "ti", "am", "ne", "mr", "hi", "bn", "pa", "gu", "or", "ta", "te",
+                       "kn", "ml", "si", "th", "lo", "my", "km", "chr", "ko", "zh-CN", "zh-TW", "ja"]
 time_range_support = True
 
 # based on https://en.wikipedia.org/wiki/List_of_Google_domains and tests
@@ -181,8 +181,12 @@ def request(query, params):
         language = 'en'
         country = 'US'
         url_lang = ''
+    elif params['language'][:2] == 'jv':
+        language = 'jw'
+        country = 'ID'
+        url_lang = 'lang_jw'
     else:
-        language_array = params['language'].lower().split('_')
+        language_array = params['language'].lower().split('-')
         if len(language_array) == 2:
             country = language_array[1]
         else:

+ 18 - 50
searx/languages.py

@@ -32,9 +32,7 @@ language_codes = (
     (u"en-NZ", u"English", u"", u"English"),
     (u"got", u"𐌲𐌿𐍄𐌹𐍃𐌺", u"", u"Gothic"),
     (u"vls", u"West-Vlams", u"", u"West Flemish"),
-    (u"ro", u"Română", u"", u"Romanian"),
     (u"bxr", u"Буряад", u"", u"Buryat"),
-    (u"fiu-vro", u"Võro", u"", u"Võro"),
     (u"diq", u"Zazaki", u"", u"Zazaki"),
     (u"zh", u"中文", u"", u"Chinese"),
     (u"pms", u"Piemontèis", u"", u"Piedmontese"),
@@ -42,28 +40,25 @@ language_codes = (
     (u"zh-HK", u"中文", u"", u"Chinese"),
     (u"zu", u"isiZulu", u"", u"Zulu"),
     (u"tet", u"Tetun", u"", u"Tetum"),
-    (u"es-PE", u"Español", u"", u"Spanish"),
+    (u"zh-CN", u"中文 (简体)", u"", u""),
     (u"new", u"नेपाल भाषा", u"", u"Newar"),
+    (u"ro-RO", u"Română", u"", u"Romanian"),
     (u"lez", u"Лезги чІал (Lezgi č’al)", u"", u"Lezgian"),
     (u"glk", u"گیلکی", u"", u"Gilaki"),
     (u"ko-KR", u"한국어", u"", u"Korean"),
     (u"id-ID", u"Bahasa Indonesia", u"", u"Indonesian"),
-    (u"cho", u"Choctaw", u"", u"Choctaw"),
     (u"chr", u"ᏣᎳᎩ", u"", u"Cherokee"),
     (u"vi", u"Tiếng Việt", u"", u"Vietnamese"),
     (u"chy", u"Tsetsêhestâhese", u"", u"Cheyenne"),
-    (u"is", u"Íslenska", u"", u"Icelandic"),
     (u"tk", u"تركمن / Туркмен", u"", u"Turkmen"),
     (u"da-DK", u"Dansk", u"", u"Danish"),
     (u"pfl", u"Pälzisch", u"", u"Palatinate German"),
     (u"hu-HU", u"Magyar", u"", u"Hungarian"),
-    (u"he-IL", u"עברית", u"", u"Hebrew"),
     (u"mg", u"Malagasy", u"", u"Malagasy"),
     (u"ml", u"മലയാളം", u"", u"Malayalam"),
     (u"mo", u"Молдовеняскэ", u"", u"Moldovan"),
     (u"mn", u"Монгол", u"", u"Mongolian"),
     (u"mi", u"Māori", u"", u"Maori"),
-    (u"mh", u"Ebon", u"", u"Marshallese"),
     (u"mk", u"Македонски", u"", u"Macedonian"),
     (u"mt", u"Malti", u"", u"Maltese"),
     (u"ms", u"Bahasa Melayu", u"", u"Malay"),
@@ -75,7 +70,6 @@ language_codes = (
     (u"pl-PL", u"Polski", u"", u"Polish"),
     (u"sl-SL", u"Slovenščina", u"", u"Slovenian"),
     (u"csb", u"Kaszëbsczi", u"", u"Kashubian"),
-    (u"cbk-zam", u"Chavacano de Zamboanga", u"", u"Zamboanga Chavacano"),
     (u"nyn", u"Runyankore", u"", u""),
     (u"ig", u"Igbo", u"", u"Igbo"),
     (u"fr", u"Français", u"", u"French"),
@@ -88,7 +82,7 @@ language_codes = (
     (u"fj", u"Na Vosa Vakaviti", u"", u"Fijian"),
     (u"fo", u"Føroyskt", u"", u"Faroese"),
     (u"ss", u"SiSwati", u"", u"Swati"),
-    (u"roa-tara", u"Tarandíne", u"", u"Tarantino"),
+    (u"sr", u"Српски / Srpski", u"", u"Serbian"),
     (u"sq", u"Shqip", u"", u"Albanian"),
     (u"sw", u"Kiswahili", u"", u"Swahili"),
     (u"sv", u"Svenska", u"", u"Swedish"),
@@ -104,7 +98,7 @@ language_codes = (
     (u"sc", u"Sardu", u"", u"Sardinian"),
     (u"pt-BR", u"português (Brasil)", u"", u""),
     (u"sa", u"संस्कृतम्", u"", u"Sanskrit"),
-    (u"sg", u"Sängö", u"", u"Sango"),
+    (u"he-IL", u"עברית", u"", u"Hebrew"),
     (u"se", u"Sámegiella", u"", u"Northern Sami"),
     (u"sd", u"سنڌي، سندھی ، सिन्ध", u"", u"Sindhi"),
     (u"fr-CH", u"Français", u"", u"French"),
@@ -112,7 +106,6 @@ language_codes = (
     (u"it-CH", u"Italiano", u"", u"Italian"),
     (u"wuu", u"吴语", u"", u"Wu"),
     (u"fr-CA", u"Français", u"", u"French"),
-    (u"ar-XA", u"العربية", u"", u"Arabic"),
     (u"kbd", u"Адыгэбзэ (Adighabze)", u"", u"Kabardian Circassian"),
     (u"no-NO", u"Norsk (Bokmål)", u"", u"Norwegian (Bokmål)"),
     (u"ca-ES", u"Català", u"", u"Catalan"),
@@ -130,14 +123,13 @@ language_codes = (
     (u"yi", u"ייִדיש", u"", u"Yiddish"),
     (u"ceb", u"Sinugboanong Binisaya", u"", u"Cebuano"),
     (u"yo", u"Yorùbá", u"", u"Yoruba"),
-    (u"ro-RO", u"Română", u"", u"Romanian"),
+    (u"ru-RU", u"Русский", u"", u"Russian"),
     (u"bar", u"Boarisch", u"", u"Bavarian"),
     (u"nov", u"Novial", u"", u"Novial"),
     (u"sr-ME", u"srpski (Crna Gora)", u"", u""),
     (u"es-CL", u"Español", u"", u"Spanish"),
     (u"es-CO", u"Español", u"", u"Spanish"),
     (u"nl-NL", u"Nederlands", u"", u"Dutch"),
-    (u"map-bms", u"Basa Banyumasan", u"", u"Banyumasan"),
     (u"el", u"Ελληνικά", u"", u"Greek"),
     (u"eo", u"Esperanto", u"", u"Esperanto"),
     (u"en", u"English", u"", u"English"),
@@ -151,7 +143,7 @@ language_codes = (
     (u"rw", u"Ikinyarwanda", u"", u"Kinyarwanda"),
     (u"rm", u"Rumantsch", u"", u"Romansh"),
     (u"rn", u"Kirundi", u"", u"Kirundi"),
-    (u"es-419", u"español (Latinoamérica)", u"", u""),
+    (u"ro", u"Română", u"", u"Romanian"),
     (u"dsb", u"Dolnoserbski", u"", u"Lower Sorbian"),
     (u"ast", u"Asturianu", u"", u"Asturian"),
     (u"lmo", u"Lumbaart", u"", u"Lombard"),
@@ -161,17 +153,13 @@ language_codes = (
     (u"koi", u"Перем Коми (Perem Komi)", u"", u"Komi-Permyak"),
     (u"tr-TR", u"Türkçe", u"", u"Turkish"),
     (u"pnt", u"Ποντιακά", u"", u"Pontic"),
-    (u"es-XL", u"Español", u"", u"Spanish"),
     (u"fi-FI", u"Suomi", u"", u"Finnish"),
     (u"pnb", u"شاہ مکھی پنجابی (Shāhmukhī Pañjābī)", u"", u"Western Punjabi"),
-    (u"udm", u"Удмурт кыл", u"", u"Udmurt"),
+    (u"ar-SA", u"العربية", u"", u"Arabic"),
     (u"bem", u"Ichibemba", u"", u""),
-    (u"roa-rup", u"Armãneashce", u"", u"Aromanian"),
-    (u"sr-Latn", u"srpski (latinica)", u"", u""),
+    (u"en-ZA", u"English", u"", u"English"),
     (u"stq", u"Seeltersk", u"", u"Saterland Frisian"),
-    (u"sr", u"Српски / Srpski", u"", u"Serbian"),
     (u"ang", u"Englisc", u"", u"Anglo-Saxon"),
-    (u"ru-RU", u"Русский", u"", u"Russian"),
     (u"lbe", u"Лакку", u"", u"Lak"),
     (u"min", u"Minangkabau", u"", u"Minangkabau"),
     (u"es-US", u"Español", u"", u"Spanish"),
@@ -184,14 +172,13 @@ language_codes = (
     (u"kg", u"KiKongo", u"", u"Kongo"),
     (u"ckb", u"Soranî / کوردی", u"", u"Sorani"),
     (u"kk", u"Қазақша", u"", u"Kazakh"),
-    (u"kj", u"Kuanyama", u"", u"Kuanyama"),
+    (u"sg", u"Sängö", u"", u"Sango"),
     (u"ki", u"Gĩkũyũ", u"", u"Kikuyu"),
     (u"ko", u"한국어", u"", u"Korean"),
     (u"kn", u"ಕನ್ನಡ", u"", u"Kannada"),
     (u"tpi", u"Tok Pisin", u"", u"Tok Pisin"),
     (u"kl", u"Kalaallisut", u"", u"Greenlandic"),
     (u"ks", u"कश्मीरी / كشميري", u"", u"Kashmiri"),
-    (u"kr", u"Kanuri", u"", u"Kanuri"),
     (u"ext", u"Estremeñu", u"", u"Extremaduran"),
     (u"kw", u"Kernewek/Karnuack", u"", u"Cornish"),
     (u"kv", u"Коми", u"", u"Komi"),
@@ -202,7 +189,7 @@ language_codes = (
     (u"en-GB", u"English", u"", u"English"),
     (u"xmf", u"მარგალური (Margaluri)", u"", u"Mingrelian"),
     (u"jam", u"Jamaican Creole English", u"", u"Patois"),
-    (u"ar-SA", u"العربية", u"", u"Arabic"),
+    (u"udm", u"Удмурт кыл", u"", u"Udmurt"),
     (u"ksh", u"Ripoarisch", u"", u"Ripuarian"),
     (u"ms-MY", u"Bahasa Melayu", u"", u"Malay"),
     (u"de", u"Deutsch", u"", u"German"),
@@ -219,13 +206,10 @@ language_codes = (
     (u"rmy", u"romani - रोमानी", u"", u"Romani"),
     (u"arc", u"ܐܪܡܝܐ", u"", u"Aramaic"),
     (u"th-TH", u"ไทย", u"", u"Thai"),
-    (u"mus", u"Muskogee", u"", u"Muscogee"),
     (u"lua", u"Luba-Lulua", u"", u""),
-    (u"en-ZA", u"English", u"", u"English"),
     (u"wa", u"Walon", u"", u"Walloon"),
     (u"wo", u"Wolof", u"", u"Wolof"),
     (u"jv", u"Basa Jawa", u"", u"Javanese"),
-    (u"jw", u"Javanese", u"", u""),
     (u"fr-BE", u"Français", u"", u"French"),
     (u"tum", u"chiTumbuka", u"", u"Tumbuka"),
     (u"ja", u"日本語", u"", u"Japanese"),
@@ -233,12 +217,9 @@ language_codes = (
     (u"ilo", u"Ilokano", u"", u"Ilokano"),
     (u"tlh", u"Klingon", u"", u""),
     (u"pdc", u"Deitsch", u"", u"Pennsylvania German"),
-    (u"aa", u"Afar", u"", u"Afar"),
     (u"ch", u"Chamoru", u"", u"Chamorro"),
     (u"co", u"Corsu", u"", u"Corsican"),
-    (u"simple", u"Simple English", u"", u"Simple English"),
     (u"ca", u"Català", u"", u"Catalan"),
-    (u"xx-pirate", u"Pirate", u"", u""),
     (u"ce", u"Нохчийн", u"", u"Chechen"),
     (u"cy", u"Cymraeg", u"", u"Welsh"),
     (u"sah", u"Саха тыла (Saxa Tyla)", u"", u"Sakha"),
@@ -254,30 +235,26 @@ language_codes = (
     (u"frp", u"Arpitan", u"", u"Franco-Provençal"),
     (u"xal", u"Хальмг", u"", u"Kalmyk"),
     (u"pi", u"पाऴि", u"", u"Pali"),
-    (u"it-IT", u"Italiano", u"", u"Italian"),
+    (u"ak", u"Akana", u"", u"Akan"),
     (u"pl", u"Polski", u"", u"Polish"),
     (u"nrm", u"Nouormand/Normaund", u"", u"Norman"),
     (u"en-US", u"English", u"", u"English"),
     (u"gan", u"贛語", u"", u"Gan"),
-    (u"bat-smg", u"Žemaitėška", u"", u"Samogitian"),
-    (u"en-UK", u"English", u"", u"English"),
     (u"gag", u"Gagauz", u"", u"Gagauz"),
     (u"an", u"Aragonés", u"", u"Aragonese"),
     (u"gaa", u"Ga", u"", u""),
     (u"fur", u"Furlan", u"", u"Friulian"),
-    (u"kr-KR", u"Kanuri", u"", u"Kanuri"),
-    (u"zh-CN", u"中文 (简体)", u"", u""),
+    (u"es-PE", u"Español", u"", u"Spanish"),
     (u"tl-PH", u"Tagalog", u"", u"Tagalog"),
     (u"en-IN", u"English", u"", u"English"),
     (u"ve", u"Tshivenda", u"", u"Venda"),
     (u"en-ID", u"English", u"", u"English"),
     (u"en-IE", u"English", u"", u"English"),
-    (u"xx-bork", u"Bork, bork, bork!", u"", u""),
+    (u"is", u"Íslenska", u"", u"Icelandic"),
     (u"iu", u"ᐃᓄᒃᑎᑐᑦ", u"", u"Inuktitut"),
     (u"it", u"Italiano", u"", u"Italian"),
     (u"iw", u"עברית", u"", u""),
     (u"vo", u"Volapük", u"", u"Volapük"),
-    (u"ii", u"ꆇꉙ", u"", u"Sichuan Yi"),
     (u"ik", u"Iñupiak", u"", u"Inupiak"),
     (u"io", u"Ido", u"", u"Ido"),
     (u"ia", u"Interlingua", u"", u"Interlingua"),
@@ -288,7 +265,7 @@ language_codes = (
     (u"pap", u"Papiamentu", u"", u"Papiamentu"),
     (u"pag", u"Pangasinan", u"", u"Pangasinan"),
     (u"pam", u"Kapampangan", u"", u"Kapampangan"),
-    (u"lv-LV", u"Latviešu", u"", u"Latvian"),
+    (u"nl", u"Nederlands", u"", u"Dutch"),
     (u"mzn", u"مَزِروني", u"", u"Mazandarani"),
     (u"nl-BE", u"Nederlands", u"", u"Dutch"),
     (u"sk-SK", u"Slovenčina", u"", u"Slovak"),
@@ -297,6 +274,7 @@ language_codes = (
     (u"de-DE", u"Deutsch", u"", u"German"),
     (u"jbo", u"Lojban", u"", u"Lojban"),
     (u"mfe", u"kreol morisien", u"", u""),
+    (u"tcy", u"Tulu", u"", u"ತುಳು"),
     (u"hak", u"Hak-kâ-fa / 客家話", u"", u"Hakka"),
     (u"ny", u"Chichewa", u"", u"Chichewa"),
     (u"ady", u"Адыгэбзэ", u"", u"Adyghe"),
@@ -308,7 +286,6 @@ language_codes = (
     (u"en-MY", u"English", u"", u"English"),
     (u"sv-SE", u"Svenska", u"", u"Swedish"),
     (u"de-AT", u"Deutsch", u"", u"German"),
-    (u"xx-elmer", u"Elmer Fudd", u"", u""),
     (u"hsb", u"Hornjoserbsce", u"", u"Upper Sorbian"),
     (u"be", u"Беларуская", u"", u"Belarusian"),
     (u"bg", u"Български", u"", u"Bulgarian"),
@@ -328,25 +305,20 @@ language_codes = (
     (u"ach", u"Acoli", u"", u""),
     (u"oc", u"Occitan", u"", u"Occitan"),
     (u"kri", u"Krio (Sierra Leone)", u"", u""),
-    (u"be-tarask", u"Беларуская (тарашкевіца)", u"", u"Belarusian (Taraškievica)"),
     (u"krc", u"Къарачай-Малкъар (Qarachay-Malqar)", u"", u"Karachay-Balkar"),
     (u"nds", u"Plattdüütsch", u"", u"Low Saxon"),
     (u"os", u"Иронау", u"", u"Ossetian"),
     (u"or", u"ଓଡ଼ିଆ", u"", u"Oriya"),
     (u"nso", u"Sepedi", u"", u"Northern Sotho"),
     (u"bjn", u"Bahasa Banjar", u"", u"Banjar"),
-    (u"xx-hacker", u"Hacker", u"", u""),
-    (u"zh-min-nan", u"Bân-lâm-gú", u"", u"Min Nan"),
     (u"pa", u"ਪੰਜਾਬੀ", u"", u"Punjabi"),
     (u"loz", u"Lozi", u"", u""),
     (u"war", u"Winaray", u"", u"Waray-Waray"),
-    (u"hz", u"Otsiherero", u"", u"Herero"),
     (u"hy", u"Հայերեն", u"", u"Armenian"),
     (u"hr", u"Hrvatski", u"", u"Croatian"),
     (u"ht", u"Krèyol ayisyen", u"", u"Haitian"),
     (u"hu", u"Magyar", u"", u"Hungarian"),
     (u"hi", u"हिन्दी", u"", u"Hindi"),
-    (u"ho", u"Hiri Motu", u"", u"Hiri Motu"),
     (u"ha", u"هَوُسَ", u"", u"Hausa"),
     (u"bug", u"Basa Ugi", u"", u"Buginese"),
     (u"he", u"עברית", u"", u"Hebrew"),
@@ -359,7 +331,7 @@ language_codes = (
     (u"pih", u"Norfuk", u"", u"Norfolk"),
     (u"ab", u"Аҧсуа", u"", u"Abkhazian"),
     (u"af", u"Afrikaans", u"", u"Afrikaans"),
-    (u"ak", u"Akana", u"", u"Akan"),
+    (u"it-IT", u"Italiano", u"", u"Italian"),
     (u"am", u"አማርኛ", u"", u"Amharic"),
     (u"myv", u"Эрзянь (Erzjanj Kelj)", u"", u"Erzya"),
     (u"as", u"অসমীয়া", u"", u"Assamese"),
@@ -370,21 +342,17 @@ language_codes = (
     (u"ay", u"Aymar", u"", u"Aymara"),
     (u"az", u"Azərbaycanca", u"", u"Azerbaijani"),
     (u"es-ES", u"Español", u"", u"Spanish"),
-    (u"nl", u"Nederlands", u"", u"Dutch"),
+    (u"lv-LV", u"Latviešu", u"", u"Latvian"),
     (u"nn", u"Nynorsk", u"", u"Norwegian (Nynorsk)"),
     (u"no", u"Norsk (Bokmål)", u"", u"Norwegian (Bokmål)"),
     (u"na", u"dorerin Naoero", u"", u"Nauruan"),
     (u"nah", u"Nāhuatl", u"", u"Nahuatl"),
     (u"ne", u"नेपाली", u"", u"Nepali"),
-    (u"ng", u"Oshiwambo", u"", u"Ndonga"),
     (u"en-AU", u"English", u"", u"English"),
     (u"nap", u"Nnapulitano", u"", u"Neapolitan"),
     (u"nv", u"Diné bizaad", u"", u"Navajo"),
     (u"ku", u"Kurdî / كوردی", u"", u"Kurdish"),
     (u"cs-CZ", u"Čeština", u"", u"Czech"),
-    (u"zh-yue", u"粵語", u"", u"Cantonese"),
     (u"en-SG", u"English", u"", u"English"),
-    (u"zh-classical", u"古文 / 文言文", u"", u"Classical Chinese"),
-    (u"bcl", u"Bikol", u"", u"Central Bicolano"),
-    (u"en-XA", u"English", u"", u"English")
+    (u"bcl", u"Bikol", u"", u"Central Bicolano")
 )

+ 35 - 6
utils/update_languages.py

@@ -11,7 +11,7 @@
 
 from requests import get
 from re import sub
-from lxml.html import fromstring
+from lxml.html import fromstring, tostring
 from json import loads
 from sys import path
 path.append('../searx')
@@ -25,6 +25,28 @@ google_json_name = 'google.preferences.langMap'
 
 languages = {}
 
+
+# To filter out invalid codes and dialects.
+def valid_code(lang_code):
+    # filter invalid codes
+    if lang_code[:2] == 'xx'\
+       or lang_code == 'jw'\
+       or lang_code[-2:] == 'UK'\
+       or lang_code[-2:] == 'XA'\
+       or lang_code[-2:] == 'XL':
+        return False
+
+    # filter dialects
+    lang_code = lang_code.split('-')
+    if len(lang_code) > 2 or len(lang_code[0]) > 3:
+        return False
+    if len(lang_code) == 2 and len(lang_code[1]) > 2:
+        print lang_code
+        return False
+        
+    return True
+
+
 # Get language names from Wikipedia.
 def get_wikipedia_languages():
     response = get(wiki_languages_url)
@@ -38,10 +60,13 @@ def get_wikipedia_languages():
             code = td[3].xpath('./a')[0].text
             name = td[2].xpath('./a')[0].text
             english_name = td[1].xpath('./a')[0].text
+            articles = int(td[4].xpath('./a/b')[0].text.replace(',',''))
             
-            if code not in languages:
+            # exclude languages with few articles and language variants
+            if code not in languages and articles >= 100 and valid_code(code):
                 languages[code] = (name, '', english_name)
 
+
 # Get language names from Google.
 def get_google_languages():
     response = get(google_languages_url)
@@ -51,25 +76,27 @@ def get_google_languages():
         code = option.xpath('./@value')[0]
         name = option.text[:-1]
 
-        if code not in languages:
+        if code not in languages and valid_code(code):
             languages[code] = (name, '', '')
 
+
 # Join all language lists.
 # iterate all languages supported by each engine
 def join_language_lists():
     for engine_name in engines:
         for locale in engines[engine_name].supported_languages:
             locale = locale.replace('_', '-')
-            if locale not in languages:
+            if locale not in languages and valid_code(locale):
                 # try to get language name
                 language = languages.get(locale.split('-')[0], None)
                 if language == None:
-                    print engine_name + ": " + locale
+                    # print engine_name + ": " + locale
                     continue
 
                 (name, country, english) = language
                 languages[locale] = (name, country, english)
 
+
 # Write languages.py.
 def write_languages_file():
     new_file = open('languages.py', 'w')
@@ -81,7 +108,7 @@ def write_languages_file():
         (name, country, english) = languages[code]
         file_content += '\n    (u"' + code + '"'\
                         + ', u"' + name + '"'\
-                        + ', u"' + country[1:-1] + '"'\
+                        + ', u"' + country + '"'\
                         + ', u"' + english + '"),'
     # remove last comma
     file_content = file_content[:-1]
@@ -89,11 +116,13 @@ def write_languages_file():
     new_file.write(file_content.encode('utf8'))
     new_file.close()
 
+
 def main():
     get_wikipedia_languages()
     get_google_languages()
     join_language_lists()
     write_languages_file()
 
+
 if __name__ == "__main__":
     main()