filter langauges

This commit is contained in:
marc 2016-08-06 22:19:21 -05:00
parent 149802c569
commit c677aee58a
4 changed files with 81 additions and 72 deletions

View File

@ -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

View File

@ -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:

View File

@ -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")
)

View File

@ -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()