diff --git a/searx/engines/gigablast.py b/searx/engines/gigablast.py index e139842fa..125ffa0a6 100644 --- a/searx/engines/gigablast.py +++ b/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 diff --git a/searx/engines/google.py b/searx/engines/google.py index 375e627ba..31035be69 100644 --- a/searx/engines/google.py +++ b/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: diff --git a/searx/languages.py b/searx/languages.py index 011b11c02..dddd380d4 100644 --- a/searx/languages.py +++ b/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") ) diff --git a/utils/update_languages.py b/utils/update_languages.py index 5c340b01e..cb230c210 100644 --- a/utils/update_languages.py +++ b/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()