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'
 title_xpath = './/title'
 content_xpath = './/sum'
 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
 # do search-request
 def request(query, params):
 def request(query, params):
@@ -48,7 +54,9 @@ def request(query, params):
     if params['language'] == 'all':
     if params['language'] == 'all':
         language = 'xx'
         language = 'xx'
     else:
     else:
-        language = params['language'].split('-')[0]
+        language = params['language'].replace('-', '_').lower()
+        if language.split('-')[0] != 'zh':
+            language = language.split('-')[0]
 
 
     if params['safesearch'] >= 1:
     if params['safesearch'] >= 1:
         safesearch = 1
         safesearch = 1

+ 19 - 15
searx/engines/google.py

@@ -23,20 +23,20 @@ categories = ['general']
 paging = True
 paging = True
 language_support = True
 language_support = True
 use_locale_domain = 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
 time_range_support = True
 
 
 # based on https://en.wikipedia.org/wiki/List_of_Google_domains and tests
 # based on https://en.wikipedia.org/wiki/List_of_Google_domains and tests
@@ -181,8 +181,12 @@ def request(query, params):
         language = 'en'
         language = 'en'
         country = 'US'
         country = 'US'
         url_lang = ''
         url_lang = ''
+    elif params['language'][:2] == 'jv':
+        language = 'jw'
+        country = 'ID'
+        url_lang = 'lang_jw'
     else:
     else:
-        language_array = params['language'].lower().split('_')
+        language_array = params['language'].lower().split('-')
         if len(language_array) == 2:
         if len(language_array) == 2:
             country = language_array[1]
             country = language_array[1]
         else:
         else:

+ 18 - 50
searx/languages.py

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