on master help sign in
filter langauges
c677aeemarc
searx/engines/gigablast.py+9−1
@@ -40,6 +40,12 @@ url_xpath = './/url'
40title_xpath = './/title'
40title_xpath = './/title'
41content_xpath = './/sum'
41content_xpath = './/sum'
42
42
43+supported_languages = ["en", "fr", "es", "ru", "tr", "ja", "zh-CN", "zh-TW", "ko", "de",
44+ "nl", "it", "fi", "sv", "no", "pt", "vi", "ar", "he", "id", "el",
45+ "th", "hi", "bn", "pl", "tl", "la", "eo", "ca", "bg", "tx", "sr",
46+ "hu", "da", "lt", "cs", "gl", "ka", "gd", "go", "ro", "ga", "lv",
47+ "hy", "is", "ag", "gv", "io", "fa", "te", "vv", "mg", "ku", "lb", "et"]
48+
43
49
44# do search-request
50# do search-request
45def request(query, params):
51def request(query, params):
@@ -48,7 +54,9 @@ def request(query, params):
48 if params['language'] == 'all':
54 if params['language'] == 'all':
49 language = 'xx'
55 language = 'xx'
50 else:
56 else:
51− language = params['language'].split('-')[0]
57+ language = params['language'].replace('-', '_').lower()
58+ if language.split('-')[0] != 'zh':
59+ language = language.split('-')[0]
52
60
53 if params['safesearch'] >= 1:
61 if params['safesearch'] >= 1:
54 safesearch = 1
62 safesearch = 1
searx/engines/google.py+19−15
@@ -23,20 +23,20 @@ categories = ['general']
23paging = True
23paging = True
24language_support = True
24language_support = True
25use_locale_domain = True
25use_locale_domain = True
26−supported_languages = ['de', 'en', 'es', 'es_419', 'fr', 'hr', 'it', 'nl', 'pl', 'pt-BR',
27− 'pt-PT', 'vi', 'tr', 'ru', 'ar', 'th', 'ko', 'zh-CN', 'zh-TW', 'ja',
28− 'ach', 'af', 'ak', 'az', 'ms', 'ban', 'xx_bork', 'bs', 'br', 'ca',
26+supported_languages = ["ach", "af", "ak", "az", "ms", "ban", "xx-bork", "bs", "br", "ca",
29− 'ceb', 'ckb', 'cs', 'sn', 'co', 'cy', 'da', 'yo', 'et', 'xx_elmer',
27+ "ceb", "ckb", "cs", "sn", "co", "cy", "da", "de", "yo", "et",
30− 'eo', 'eu', 'ee', 'tl', 'fo', 'gaa', 'ga', 'gd', 'gl', 'gn', 'xx_hacker',
28+ "xx-elmer", "en", "es", "es-419", "eo", "eu", "ee", "tl", "fo", "fr",
29+ "gaa", "ga", "gd", "gl", "gn", "xx-hacker", "ht", "ha", "hr", "haw",
31− 'ht', 'ha', 'haw', 'bem', 'ig', 'rn', 'id', 'ia', 'zu', 'is', 'jw', 'rw',
30+ "bem", "ig", "rn", "id", "ia", "zu", "is", "it", "jw", "rw", "sw",
32− 'sw', 'tlh', 'kg', 'mfe', 'kri', 'la', 'lv', 'to', 'lt', 'ln', 'loz',
31+ "tlh", "kg", "mfe", "kri", "la", "lv", "to", "lt", "ln", "loz",
33− 'lua', 'lg', 'hu', 'mg', 'mt', 'mi', 'pcm', 'no', 'nso', 'ny', 'nn',
32+ "lua", "lg", "hu", "mg", "mt", "mi", "nl", "pcm", "no", "nso",
34− 'uz', 'oc', 'om', 'xx_pirate', 'pt', 'ro', 'mo', 'rm', 'qu', 'nyn', 'crs',
33+ "ny", "nn", "uz", "oc", "om", "xx-pirate", "pl", "pt-BR", "pt-PT",
35− 'sq', 'sd', 'sk', 'sl', 'so', 'st', 'sr_ME', 'sr_Latn', 'su', 'fi', 'sv',
34+ "ro", "rm", "qu", "nyn", "crs", "sq", "sd", "sk", "sl", "so", "st",
35+ "sr-ME", "sr-Latn", "su", "fi", "sv", "tg", "tt", "vi", "tn", "tum",
36− 'tg', 'tt', 'tn', 'tum', 'tk', 'tw', 'fy', 'wo', 'xh', 'el', 'be', 'bg',
36+ "tr", "tk", "tw", "fy", "wo", "xh", "el", "be", "bg", "ky", "kk", "mk",
37− 'ky', 'kk', 'mk', 'mn', 'sr', 'uk', 'ka', 'hy', 'yi', 'iw', 'ug', 'ur',
37+ "mn", "ru", "sr", "uk", "ka", "hy", "yi", "iw", "ug", "ur", "ar", "ps",
38− 'ps', 'fa', 'ti', 'am', 'ne', 'mr', 'hi', 'bn', 'pa', 'gu', 'or', 'ta',
38+ "fa", "ti", "am", "ne", "mr", "hi", "bn", "pa", "gu", "or", "ta", "te",
39− 'te', 'kn', 'ml', 'si', 'lo', 'my', 'km', 'chr']
39+ "kn", "ml", "si", "th", "lo", "my", "km", "chr", "ko", "zh-CN", "zh-TW", "ja"]
40time_range_support = True
40time_range_support = True
41
41
42# based on https://en.wikipedia.org/wiki/List_of_Google_domains and tests
42# based on https://en.wikipedia.org/wiki/List_of_Google_domains and tests
@@ -181,8 +181,12 @@ def request(query, params):
181 language = 'en'
181 language = 'en'
182 country = 'US'
182 country = 'US'
183 url_lang = ''
183 url_lang = ''
184+ elif params['language'][:2] == 'jv':
185+ language = 'jw'
186+ country = 'ID'
187+ url_lang = 'lang_jw'
184 else:
188 else:
185− language_array = params['language'].lower().split('_')
189+ language_array = params['language'].lower().split('-')
186 if len(language_array) == 2:
190 if len(language_array) == 2:
187 country = language_array[1]
191 country = language_array[1]
188 else:
192 else:
searx/languages.py+18−50
@@ -32,9 +32,7 @@ language_codes = (
32 (u"en-NZ", u"English", u"", u"English"),
32 (u"en-NZ", u"English", u"", u"English"),
33 (u"got", u"𐌲𐌿𐍄𐌹𐍃𐌺", u"", u"Gothic"),
33 (u"got", u"𐌲𐌿𐍄𐌹𐍃𐌺", u"", u"Gothic"),
34 (u"vls", u"West-Vlams", u"", u"West Flemish"),
34 (u"vls", u"West-Vlams", u"", u"West Flemish"),
35− (u"ro", u"Română", u"", u"Romanian"),
36 (u"bxr", u"Буряад", u"", u"Buryat"),
35 (u"bxr", u"Буряад", u"", u"Buryat"),
37− (u"fiu-vro", u"Võro", u"", u"Võro"),
38 (u"diq", u"Zazaki", u"", u"Zazaki"),
36 (u"diq", u"Zazaki", u"", u"Zazaki"),
39 (u"zh", u"中文", u"", u"Chinese"),
37 (u"zh", u"中文", u"", u"Chinese"),
40 (u"pms", u"Piemontèis", u"", u"Piedmontese"),
38 (u"pms", u"Piemontèis", u"", u"Piedmontese"),
@@ -42,28 +40,25 @@ language_codes = (
42 (u"zh-HK", u"中文", u"", u"Chinese"),
40 (u"zh-HK", u"中文", u"", u"Chinese"),
43 (u"zu", u"isiZulu", u"", u"Zulu"),
41 (u"zu", u"isiZulu", u"", u"Zulu"),
44 (u"tet", u"Tetun", u"", u"Tetum"),
42 (u"tet", u"Tetun", u"", u"Tetum"),
45− (u"es-PE", u"Español", u"", u"Spanish"),
43+ (u"zh-CN", u"中文 (简体)", u"", u""),
46 (u"new", u"नेपाल भाषा", u"", u"Newar"),
44 (u"new", u"नेपाल भाषा", u"", u"Newar"),
45+ (u"ro-RO", u"Română", u"", u"Romanian"),
47 (u"lez", u"Лезги чІал (Lezgi č’al)", u"", u"Lezgian"),
46 (u"lez", u"Лезги чІал (Lezgi č’al)", u"", u"Lezgian"),
48 (u"glk", u"گیلکی", u"", u"Gilaki"),
47 (u"glk", u"گیلکی", u"", u"Gilaki"),
49 (u"ko-KR", u"한국어", u"", u"Korean"),
48 (u"ko-KR", u"한국어", u"", u"Korean"),
50 (u"id-ID", u"Bahasa Indonesia", u"", u"Indonesian"),
49 (u"id-ID", u"Bahasa Indonesia", u"", u"Indonesian"),
51− (u"cho", u"Choctaw", u"", u"Choctaw"),
52 (u"chr", u"ᏣᎳᎩ", u"", u"Cherokee"),
50 (u"chr", u"ᏣᎳᎩ", u"", u"Cherokee"),
53 (u"vi", u"Tiếng Việt", u"", u"Vietnamese"),
51 (u"vi", u"Tiếng Việt", u"", u"Vietnamese"),
54 (u"chy", u"Tsetsêhestâhese", u"", u"Cheyenne"),
52 (u"chy", u"Tsetsêhestâhese", u"", u"Cheyenne"),
55− (u"is", u"Íslenska", u"", u"Icelandic"),
56 (u"tk", u"تركمن / Туркмен", u"", u"Turkmen"),
53 (u"tk", u"تركمن / Туркмен", u"", u"Turkmen"),
57 (u"da-DK", u"Dansk", u"", u"Danish"),
54 (u"da-DK", u"Dansk", u"", u"Danish"),
58 (u"pfl", u"Pälzisch", u"", u"Palatinate German"),
55 (u"pfl", u"Pälzisch", u"", u"Palatinate German"),
59 (u"hu-HU", u"Magyar", u"", u"Hungarian"),
56 (u"hu-HU", u"Magyar", u"", u"Hungarian"),
60− (u"he-IL", u"עברית", u"", u"Hebrew"),
61 (u"mg", u"Malagasy", u"", u"Malagasy"),
57 (u"mg", u"Malagasy", u"", u"Malagasy"),
62 (u"ml", u"മലയാളം", u"", u"Malayalam"),
58 (u"ml", u"മലയാളം", u"", u"Malayalam"),
63 (u"mo", u"Молдовеняскэ", u"", u"Moldovan"),
59 (u"mo", u"Молдовеняскэ", u"", u"Moldovan"),
64 (u"mn", u"Монгол", u"", u"Mongolian"),
60 (u"mn", u"Монгол", u"", u"Mongolian"),
65 (u"mi", u"Māori", u"", u"Maori"),
61 (u"mi", u"Māori", u"", u"Maori"),
66− (u"mh", u"Ebon", u"", u"Marshallese"),
67 (u"mk", u"Македонски", u"", u"Macedonian"),
62 (u"mk", u"Македонски", u"", u"Macedonian"),
68 (u"mt", u"Malti", u"", u"Maltese"),
63 (u"mt", u"Malti", u"", u"Maltese"),
69 (u"ms", u"Bahasa Melayu", u"", u"Malay"),
64 (u"ms", u"Bahasa Melayu", u"", u"Malay"),
@@ -75,7 +70,6 @@ language_codes = (
75 (u"pl-PL", u"Polski", u"", u"Polish"),
70 (u"pl-PL", u"Polski", u"", u"Polish"),
76 (u"sl-SL", u"Slovenščina", u"", u"Slovenian"),
71 (u"sl-SL", u"Slovenščina", u"", u"Slovenian"),
77 (u"csb", u"Kaszëbsczi", u"", u"Kashubian"),
72 (u"csb", u"Kaszëbsczi", u"", u"Kashubian"),
78− (u"cbk-zam", u"Chavacano de Zamboanga", u"", u"Zamboanga Chavacano"),
79 (u"nyn", u"Runyankore", u"", u""),
73 (u"nyn", u"Runyankore", u"", u""),
80 (u"ig", u"Igbo", u"", u"Igbo"),
74 (u"ig", u"Igbo", u"", u"Igbo"),
81 (u"fr", u"Français", u"", u"French"),
75 (u"fr", u"Français", u"", u"French"),
@@ -88,7 +82,7 @@ language_codes = (
88 (u"fj", u"Na Vosa Vakaviti", u"", u"Fijian"),
82 (u"fj", u"Na Vosa Vakaviti", u"", u"Fijian"),
89 (u"fo", u"Føroyskt", u"", u"Faroese"),
83 (u"fo", u"Føroyskt", u"", u"Faroese"),
90 (u"ss", u"SiSwati", u"", u"Swati"),
84 (u"ss", u"SiSwati", u"", u"Swati"),
91− (u"roa-tara", u"Tarandíne", u"", u"Tarantino"),
85+ (u"sr", u"Српски / Srpski", u"", u"Serbian"),
92 (u"sq", u"Shqip", u"", u"Albanian"),
86 (u"sq", u"Shqip", u"", u"Albanian"),
93 (u"sw", u"Kiswahili", u"", u"Swahili"),
87 (u"sw", u"Kiswahili", u"", u"Swahili"),
94 (u"sv", u"Svenska", u"", u"Swedish"),
88 (u"sv", u"Svenska", u"", u"Swedish"),
@@ -104,7 +98,7 @@ language_codes = (
104 (u"sc", u"Sardu", u"", u"Sardinian"),
98 (u"sc", u"Sardu", u"", u"Sardinian"),
105 (u"pt-BR", u"português (Brasil)", u"", u""),
99 (u"pt-BR", u"português (Brasil)", u"", u""),
106 (u"sa", u"संस्कृतम्", u"", u"Sanskrit"),
100 (u"sa", u"संस्कृतम्", u"", u"Sanskrit"),
107− (u"sg", u"Sängö", u"", u"Sango"),
101+ (u"he-IL", u"עברית", u"", u"Hebrew"),
108 (u"se", u"Sámegiella", u"", u"Northern Sami"),
102 (u"se", u"Sámegiella", u"", u"Northern Sami"),
109 (u"sd", u"سنڌي، سندھی ، सिन्ध", u"", u"Sindhi"),
103 (u"sd", u"سنڌي، سندھی ، सिन्ध", u"", u"Sindhi"),
110 (u"fr-CH", u"Français", u"", u"French"),
104 (u"fr-CH", u"Français", u"", u"French"),
@@ -112,7 +106,6 @@ language_codes = (
112 (u"it-CH", u"Italiano", u"", u"Italian"),
106 (u"it-CH", u"Italiano", u"", u"Italian"),
113 (u"wuu", u"吴语", u"", u"Wu"),
107 (u"wuu", u"吴语", u"", u"Wu"),
114 (u"fr-CA", u"Français", u"", u"French"),
108 (u"fr-CA", u"Français", u"", u"French"),
115− (u"ar-XA", u"العربية", u"", u"Arabic"),
116 (u"kbd", u"Адыгэбзэ (Adighabze)", u"", u"Kabardian Circassian"),
109 (u"kbd", u"Адыгэбзэ (Adighabze)", u"", u"Kabardian Circassian"),
117 (u"no-NO", u"Norsk (Bokmål)", u"", u"Norwegian (Bokmål)"),
110 (u"no-NO", u"Norsk (Bokmål)", u"", u"Norwegian (Bokmål)"),
118 (u"ca-ES", u"Català", u"", u"Catalan"),
111 (u"ca-ES", u"Català", u"", u"Catalan"),
@@ -130,14 +123,13 @@ language_codes = (
130 (u"yi", u"ייִדיש", u"", u"Yiddish"),
123 (u"yi", u"ייִדיש", u"", u"Yiddish"),
131 (u"ceb", u"Sinugboanong Binisaya", u"", u"Cebuano"),
124 (u"ceb", u"Sinugboanong Binisaya", u"", u"Cebuano"),
132 (u"yo", u"Yorùbá", u"", u"Yoruba"),
125 (u"yo", u"Yorùbá", u"", u"Yoruba"),
133− (u"ro-RO", u"Română", u"", u"Romanian"),
126+ (u"ru-RU", u"Русский", u"", u"Russian"),
134 (u"bar", u"Boarisch", u"", u"Bavarian"),
127 (u"bar", u"Boarisch", u"", u"Bavarian"),
135 (u"nov", u"Novial", u"", u"Novial"),
128 (u"nov", u"Novial", u"", u"Novial"),
136 (u"sr-ME", u"srpski (Crna Gora)", u"", u""),
129 (u"sr-ME", u"srpski (Crna Gora)", u"", u""),
137 (u"es-CL", u"Español", u"", u"Spanish"),
130 (u"es-CL", u"Español", u"", u"Spanish"),
138 (u"es-CO", u"Español", u"", u"Spanish"),
131 (u"es-CO", u"Español", u"", u"Spanish"),
139 (u"nl-NL", u"Nederlands", u"", u"Dutch"),
132 (u"nl-NL", u"Nederlands", u"", u"Dutch"),
140− (u"map-bms", u"Basa Banyumasan", u"", u"Banyumasan"),
141 (u"el", u"Ελληνικά", u"", u"Greek"),
133 (u"el", u"Ελληνικά", u"", u"Greek"),
142 (u"eo", u"Esperanto", u"", u"Esperanto"),
134 (u"eo", u"Esperanto", u"", u"Esperanto"),
143 (u"en", u"English", u"", u"English"),
135 (u"en", u"English", u"", u"English"),
@@ -151,7 +143,7 @@ language_codes = (
151 (u"rw", u"Ikinyarwanda", u"", u"Kinyarwanda"),
143 (u"rw", u"Ikinyarwanda", u"", u"Kinyarwanda"),
152 (u"rm", u"Rumantsch", u"", u"Romansh"),
144 (u"rm", u"Rumantsch", u"", u"Romansh"),
153 (u"rn", u"Kirundi", u"", u"Kirundi"),
145 (u"rn", u"Kirundi", u"", u"Kirundi"),
154− (u"es-419", u"español (Latinoamérica)", u"", u""),
146+ (u"ro", u"Română", u"", u"Romanian"),
155 (u"dsb", u"Dolnoserbski", u"", u"Lower Sorbian"),
147 (u"dsb", u"Dolnoserbski", u"", u"Lower Sorbian"),
156 (u"ast", u"Asturianu", u"", u"Asturian"),
148 (u"ast", u"Asturianu", u"", u"Asturian"),
157 (u"lmo", u"Lumbaart", u"", u"Lombard"),
149 (u"lmo", u"Lumbaart", u"", u"Lombard"),
@@ -161,17 +153,13 @@ language_codes = (
161 (u"koi", u"Перем Коми (Perem Komi)", u"", u"Komi-Permyak"),
153 (u"koi", u"Перем Коми (Perem Komi)", u"", u"Komi-Permyak"),
162 (u"tr-TR", u"Türkçe", u"", u"Turkish"),
154 (u"tr-TR", u"Türkçe", u"", u"Turkish"),
163 (u"pnt", u"Ποντιακά", u"", u"Pontic"),
155 (u"pnt", u"Ποντιακά", u"", u"Pontic"),
164− (u"es-XL", u"Español", u"", u"Spanish"),
165 (u"fi-FI", u"Suomi", u"", u"Finnish"),
156 (u"fi-FI", u"Suomi", u"", u"Finnish"),
166 (u"pnb", u"شاہ مکھی پنجابی (Shāhmukhī Pañjābī)", u"", u"Western Punjabi"),
157 (u"pnb", u"شاہ مکھی پنجابی (Shāhmukhī Pañjābī)", u"", u"Western Punjabi"),
167− (u"udm", u"Удмурт кыл", u"", u"Udmurt"),
158+ (u"ar-SA", u"العربية", u"", u"Arabic"),
168 (u"bem", u"Ichibemba", u"", u""),
159 (u"bem", u"Ichibemba", u"", u""),
169− (u"roa-rup", u"Armãneashce", u"", u"Aromanian"),
160+ (u"en-ZA", u"English", u"", u"English"),
170− (u"sr-Latn", u"srpski (latinica)", u"", u""),
171 (u"stq", u"Seeltersk", u"", u"Saterland Frisian"),
161 (u"stq", u"Seeltersk", u"", u"Saterland Frisian"),
172− (u"sr", u"Српски / Srpski", u"", u"Serbian"),
173 (u"ang", u"Englisc", u"", u"Anglo-Saxon"),
162 (u"ang", u"Englisc", u"", u"Anglo-Saxon"),
174− (u"ru-RU", u"Русский", u"", u"Russian"),
175 (u"lbe", u"Лакку", u"", u"Lak"),
163 (u"lbe", u"Лакку", u"", u"Lak"),
176 (u"min", u"Minangkabau", u"", u"Minangkabau"),
164 (u"min", u"Minangkabau", u"", u"Minangkabau"),
177 (u"es-US", u"Español", u"", u"Spanish"),
165 (u"es-US", u"Español", u"", u"Spanish"),
@@ -184,14 +172,13 @@ language_codes = (
184 (u"kg", u"KiKongo", u"", u"Kongo"),
172 (u"kg", u"KiKongo", u"", u"Kongo"),
185 (u"ckb", u"Soranî / کوردی", u"", u"Sorani"),
173 (u"ckb", u"Soranî / کوردی", u"", u"Sorani"),
186 (u"kk", u"Қазақша", u"", u"Kazakh"),
174 (u"kk", u"Қазақша", u"", u"Kazakh"),
187− (u"kj", u"Kuanyama", u"", u"Kuanyama"),
175+ (u"sg", u"Sängö", u"", u"Sango"),
188 (u"ki", u"Gĩkũyũ", u"", u"Kikuyu"),
176 (u"ki", u"Gĩkũyũ", u"", u"Kikuyu"),
189 (u"ko", u"한국어", u"", u"Korean"),
177 (u"ko", u"한국어", u"", u"Korean"),
190 (u"kn", u"ಕನ್ನಡ", u"", u"Kannada"),
178 (u"kn", u"ಕನ್ನಡ", u"", u"Kannada"),
191 (u"tpi", u"Tok Pisin", u"", u"Tok Pisin"),
179 (u"tpi", u"Tok Pisin", u"", u"Tok Pisin"),
192 (u"kl", u"Kalaallisut", u"", u"Greenlandic"),
180 (u"kl", u"Kalaallisut", u"", u"Greenlandic"),
193 (u"ks", u"कश्मीरी / كشميري", u"", u"Kashmiri"),
181 (u"ks", u"कश्मीरी / كشميري", u"", u"Kashmiri"),
194− (u"kr", u"Kanuri", u"", u"Kanuri"),
195 (u"ext", u"Estremeñu", u"", u"Extremaduran"),
182 (u"ext", u"Estremeñu", u"", u"Extremaduran"),
196 (u"kw", u"Kernewek/Karnuack", u"", u"Cornish"),
183 (u"kw", u"Kernewek/Karnuack", u"", u"Cornish"),
197 (u"kv", u"Коми", u"", u"Komi"),
184 (u"kv", u"Коми", u"", u"Komi"),
@@ -202,7 +189,7 @@ language_codes = (
202 (u"en-GB", u"English", u"", u"English"),
189 (u"en-GB", u"English", u"", u"English"),
203 (u"xmf", u"მარგალური (Margaluri)", u"", u"Mingrelian"),
190 (u"xmf", u"მარგალური (Margaluri)", u"", u"Mingrelian"),
204 (u"jam", u"Jamaican Creole English", u"", u"Patois"),
191 (u"jam", u"Jamaican Creole English", u"", u"Patois"),
205− (u"ar-SA", u"العربية", u"", u"Arabic"),
192+ (u"udm", u"Удмурт кыл", u"", u"Udmurt"),
206 (u"ksh", u"Ripoarisch", u"", u"Ripuarian"),
193 (u"ksh", u"Ripoarisch", u"", u"Ripuarian"),
207 (u"ms-MY", u"Bahasa Melayu", u"", u"Malay"),
194 (u"ms-MY", u"Bahasa Melayu", u"", u"Malay"),
208 (u"de", u"Deutsch", u"", u"German"),
195 (u"de", u"Deutsch", u"", u"German"),
@@ -219,13 +206,10 @@ language_codes = (
219 (u"rmy", u"romani - रोमानी", u"", u"Romani"),
206 (u"rmy", u"romani - रोमानी", u"", u"Romani"),
220 (u"arc", u"ܐܪܡܝܐ", u"", u"Aramaic"),
207 (u"arc", u"ܐܪܡܝܐ", u"", u"Aramaic"),
221 (u"th-TH", u"ไทย", u"", u"Thai"),
208 (u"th-TH", u"ไทย", u"", u"Thai"),
222− (u"mus", u"Muskogee", u"", u"Muscogee"),
223 (u"lua", u"Luba-Lulua", u"", u""),
209 (u"lua", u"Luba-Lulua", u"", u""),
224− (u"en-ZA", u"English", u"", u"English"),
225 (u"wa", u"Walon", u"", u"Walloon"),
210 (u"wa", u"Walon", u"", u"Walloon"),
226 (u"wo", u"Wolof", u"", u"Wolof"),
211 (u"wo", u"Wolof", u"", u"Wolof"),
227 (u"jv", u"Basa Jawa", u"", u"Javanese"),
212 (u"jv", u"Basa Jawa", u"", u"Javanese"),
228− (u"jw", u"Javanese", u"", u""),
229 (u"fr-BE", u"Français", u"", u"French"),
213 (u"fr-BE", u"Français", u"", u"French"),
230 (u"tum", u"chiTumbuka", u"", u"Tumbuka"),
214 (u"tum", u"chiTumbuka", u"", u"Tumbuka"),
231 (u"ja", u"日本語", u"", u"Japanese"),
215 (u"ja", u"日本語", u"", u"Japanese"),
@@ -233,12 +217,9 @@ language_codes = (
233 (u"ilo", u"Ilokano", u"", u"Ilokano"),
217 (u"ilo", u"Ilokano", u"", u"Ilokano"),
234 (u"tlh", u"Klingon", u"", u""),
218 (u"tlh", u"Klingon", u"", u""),
235 (u"pdc", u"Deitsch", u"", u"Pennsylvania German"),
219 (u"pdc", u"Deitsch", u"", u"Pennsylvania German"),
236− (u"aa", u"Afar", u"", u"Afar"),
237 (u"ch", u"Chamoru", u"", u"Chamorro"),
220 (u"ch", u"Chamoru", u"", u"Chamorro"),
238 (u"co", u"Corsu", u"", u"Corsican"),
221 (u"co", u"Corsu", u"", u"Corsican"),
239− (u"simple", u"Simple English", u"", u"Simple English"),
240 (u"ca", u"Català", u"", u"Catalan"),
222 (u"ca", u"Català", u"", u"Catalan"),
241− (u"xx-pirate", u"Pirate", u"", u""),
242 (u"ce", u"Нохчийн", u"", u"Chechen"),
223 (u"ce", u"Нохчийн", u"", u"Chechen"),
243 (u"cy", u"Cymraeg", u"", u"Welsh"),
224 (u"cy", u"Cymraeg", u"", u"Welsh"),
244 (u"sah", u"Саха тыла (Saxa Tyla)", u"", u"Sakha"),
225 (u"sah", u"Саха тыла (Saxa Tyla)", u"", u"Sakha"),
@@ -254,30 +235,26 @@ language_codes = (
254 (u"frp", u"Arpitan", u"", u"Franco-Provençal"),
235 (u"frp", u"Arpitan", u"", u"Franco-Provençal"),
255 (u"xal", u"Хальмг", u"", u"Kalmyk"),
236 (u"xal", u"Хальмг", u"", u"Kalmyk"),
256 (u"pi", u"पाऴि", u"", u"Pali"),
237 (u"pi", u"पाऴि", u"", u"Pali"),
257− (u"it-IT", u"Italiano", u"", u"Italian"),
238+ (u"ak", u"Akana", u"", u"Akan"),
258 (u"pl", u"Polski", u"", u"Polish"),
239 (u"pl", u"Polski", u"", u"Polish"),
259 (u"nrm", u"Nouormand/Normaund", u"", u"Norman"),
240 (u"nrm", u"Nouormand/Normaund", u"", u"Norman"),
260 (u"en-US", u"English", u"", u"English"),
241 (u"en-US", u"English", u"", u"English"),
261 (u"gan", u"贛語", u"", u"Gan"),
242 (u"gan", u"贛語", u"", u"Gan"),
262− (u"bat-smg", u"Žemaitėška", u"", u"Samogitian"),
263− (u"en-UK", u"English", u"", u"English"),
264 (u"gag", u"Gagauz", u"", u"Gagauz"),
243 (u"gag", u"Gagauz", u"", u"Gagauz"),
265 (u"an", u"Aragonés", u"", u"Aragonese"),
244 (u"an", u"Aragonés", u"", u"Aragonese"),
266 (u"gaa", u"Ga", u"", u""),
245 (u"gaa", u"Ga", u"", u""),
267 (u"fur", u"Furlan", u"", u"Friulian"),
246 (u"fur", u"Furlan", u"", u"Friulian"),
268− (u"kr-KR", u"Kanuri", u"", u"Kanuri"),
247+ (u"es-PE", u"Español", u"", u"Spanish"),
269− (u"zh-CN", u"中文 (简体)", u"", u""),
270 (u"tl-PH", u"Tagalog", u"", u"Tagalog"),
248 (u"tl-PH", u"Tagalog", u"", u"Tagalog"),
271 (u"en-IN", u"English", u"", u"English"),
249 (u"en-IN", u"English", u"", u"English"),
272 (u"ve", u"Tshivenda", u"", u"Venda"),
250 (u"ve", u"Tshivenda", u"", u"Venda"),
273 (u"en-ID", u"English", u"", u"English"),
251 (u"en-ID", u"English", u"", u"English"),
274 (u"en-IE", u"English", u"", u"English"),
252 (u"en-IE", u"English", u"", u"English"),
275− (u"xx-bork", u"Bork, bork, bork!", u"", u""),
253+ (u"is", u"Íslenska", u"", u"Icelandic"),
276 (u"iu", u"ᐃᓄᒃᑎᑐᑦ", u"", u"Inuktitut"),
254 (u"iu", u"ᐃᓄᒃᑎᑐᑦ", u"", u"Inuktitut"),
277 (u"it", u"Italiano", u"", u"Italian"),
255 (u"it", u"Italiano", u"", u"Italian"),
278 (u"iw", u"עברית", u"", u""),
256 (u"iw", u"עברית", u"", u""),
279 (u"vo", u"Volapük", u"", u"Volapük"),
257 (u"vo", u"Volapük", u"", u"Volapük"),
280− (u"ii", u"ꆇꉙ", u"", u"Sichuan Yi"),
281 (u"ik", u"Iñupiak", u"", u"Inupiak"),
258 (u"ik", u"Iñupiak", u"", u"Inupiak"),
282 (u"io", u"Ido", u"", u"Ido"),
259 (u"io", u"Ido", u"", u"Ido"),
283 (u"ia", u"Interlingua", u"", u"Interlingua"),
260 (u"ia", u"Interlingua", u"", u"Interlingua"),
@@ -288,7 +265,7 @@ language_codes = (
288 (u"pap", u"Papiamentu", u"", u"Papiamentu"),
265 (u"pap", u"Papiamentu", u"", u"Papiamentu"),
289 (u"pag", u"Pangasinan", u"", u"Pangasinan"),
266 (u"pag", u"Pangasinan", u"", u"Pangasinan"),
290 (u"pam", u"Kapampangan", u"", u"Kapampangan"),
267 (u"pam", u"Kapampangan", u"", u"Kapampangan"),
291− (u"lv-LV", u"Latviešu", u"", u"Latvian"),
268+ (u"nl", u"Nederlands", u"", u"Dutch"),
292 (u"mzn", u"مَزِروني", u"", u"Mazandarani"),
269 (u"mzn", u"مَزِروني", u"", u"Mazandarani"),
293 (u"nl-BE", u"Nederlands", u"", u"Dutch"),
270 (u"nl-BE", u"Nederlands", u"", u"Dutch"),
294 (u"sk-SK", u"Slovenčina", u"", u"Slovak"),
271 (u"sk-SK", u"Slovenčina", u"", u"Slovak"),
@@ -297,6 +274,7 @@ language_codes = (
297 (u"de-DE", u"Deutsch", u"", u"German"),
274 (u"de-DE", u"Deutsch", u"", u"German"),
298 (u"jbo", u"Lojban", u"", u"Lojban"),
275 (u"jbo", u"Lojban", u"", u"Lojban"),
299 (u"mfe", u"kreol morisien", u"", u""),
276 (u"mfe", u"kreol morisien", u"", u""),
277+ (u"tcy", u"Tulu", u"", u"ತುಳು"),
300 (u"hak", u"Hak-kâ-fa / 客家話", u"", u"Hakka"),
278 (u"hak", u"Hak-kâ-fa / 客家話", u"", u"Hakka"),
301 (u"ny", u"Chichewa", u"", u"Chichewa"),
279 (u"ny", u"Chichewa", u"", u"Chichewa"),
302 (u"ady", u"Адыгэбзэ", u"", u"Adyghe"),
280 (u"ady", u"Адыгэбзэ", u"", u"Adyghe"),
@@ -308,7 +286,6 @@ language_codes = (
308 (u"en-MY", u"English", u"", u"English"),
286 (u"en-MY", u"English", u"", u"English"),
309 (u"sv-SE", u"Svenska", u"", u"Swedish"),
287 (u"sv-SE", u"Svenska", u"", u"Swedish"),
310 (u"de-AT", u"Deutsch", u"", u"German"),
288 (u"de-AT", u"Deutsch", u"", u"German"),
311− (u"xx-elmer", u"Elmer Fudd", u"", u""),
312 (u"hsb", u"Hornjoserbsce", u"", u"Upper Sorbian"),
289 (u"hsb", u"Hornjoserbsce", u"", u"Upper Sorbian"),
313 (u"be", u"Беларуская", u"", u"Belarusian"),
290 (u"be", u"Беларуская", u"", u"Belarusian"),
314 (u"bg", u"Български", u"", u"Bulgarian"),
291 (u"bg", u"Български", u"", u"Bulgarian"),
@@ -328,25 +305,20 @@ language_codes = (
328 (u"ach", u"Acoli", u"", u""),
305 (u"ach", u"Acoli", u"", u""),
329 (u"oc", u"Occitan", u"", u"Occitan"),
306 (u"oc", u"Occitan", u"", u"Occitan"),
330 (u"kri", u"Krio (Sierra Leone)", u"", u""),
307 (u"kri", u"Krio (Sierra Leone)", u"", u""),
331− (u"be-tarask", u"Беларуская (тарашкевіца)", u"", u"Belarusian (Taraškievica)"),
332 (u"krc", u"Къарачай-Малкъар (Qarachay-Malqar)", u"", u"Karachay-Balkar"),
308 (u"krc", u"Къарачай-Малкъар (Qarachay-Malqar)", u"", u"Karachay-Balkar"),
333 (u"nds", u"Plattdüütsch", u"", u"Low Saxon"),
309 (u"nds", u"Plattdüütsch", u"", u"Low Saxon"),
334 (u"os", u"Иронау", u"", u"Ossetian"),
310 (u"os", u"Иронау", u"", u"Ossetian"),
335 (u"or", u"ଓଡ଼ିଆ", u"", u"Oriya"),
311 (u"or", u"ଓଡ଼ିଆ", u"", u"Oriya"),
336 (u"nso", u"Sepedi", u"", u"Northern Sotho"),
312 (u"nso", u"Sepedi", u"", u"Northern Sotho"),
337 (u"bjn", u"Bahasa Banjar", u"", u"Banjar"),
313 (u"bjn", u"Bahasa Banjar", u"", u"Banjar"),
338− (u"xx-hacker", u"Hacker", u"", u""),
339− (u"zh-min-nan", u"Bân-lâm-gú", u"", u"Min Nan"),
340 (u"pa", u"ਪੰਜਾਬੀ", u"", u"Punjabi"),
314 (u"pa", u"ਪੰਜਾਬੀ", u"", u"Punjabi"),
341 (u"loz", u"Lozi", u"", u""),
315 (u"loz", u"Lozi", u"", u""),
342 (u"war", u"Winaray", u"", u"Waray-Waray"),
316 (u"war", u"Winaray", u"", u"Waray-Waray"),
343− (u"hz", u"Otsiherero", u"", u"Herero"),
344 (u"hy", u"Հայերեն", u"", u"Armenian"),
317 (u"hy", u"Հայերեն", u"", u"Armenian"),
345 (u"hr", u"Hrvatski", u"", u"Croatian"),
318 (u"hr", u"Hrvatski", u"", u"Croatian"),
346 (u"ht", u"Krèyol ayisyen", u"", u"Haitian"),
319 (u"ht", u"Krèyol ayisyen", u"", u"Haitian"),
347 (u"hu", u"Magyar", u"", u"Hungarian"),
320 (u"hu", u"Magyar", u"", u"Hungarian"),
348 (u"hi", u"हिन्दी", u"", u"Hindi"),
321 (u"hi", u"हिन्दी", u"", u"Hindi"),
349− (u"ho", u"Hiri Motu", u"", u"Hiri Motu"),
350 (u"ha", u"هَوُسَ", u"", u"Hausa"),
322 (u"ha", u"هَوُسَ", u"", u"Hausa"),
351 (u"bug", u"Basa Ugi", u"", u"Buginese"),
323 (u"bug", u"Basa Ugi", u"", u"Buginese"),
352 (u"he", u"עברית", u"", u"Hebrew"),
324 (u"he", u"עברית", u"", u"Hebrew"),
@@ -359,7 +331,7 @@ language_codes = (
359 (u"pih", u"Norfuk", u"", u"Norfolk"),
331 (u"pih", u"Norfuk", u"", u"Norfolk"),
360 (u"ab", u"Аҧсуа", u"", u"Abkhazian"),
332 (u"ab", u"Аҧсуа", u"", u"Abkhazian"),
361 (u"af", u"Afrikaans", u"", u"Afrikaans"),
333 (u"af", u"Afrikaans", u"", u"Afrikaans"),
362− (u"ak", u"Akana", u"", u"Akan"),
334+ (u"it-IT", u"Italiano", u"", u"Italian"),
363 (u"am", u"አማርኛ", u"", u"Amharic"),
335 (u"am", u"አማርኛ", u"", u"Amharic"),
364 (u"myv", u"Эрзянь (Erzjanj Kelj)", u"", u"Erzya"),
336 (u"myv", u"Эрзянь (Erzjanj Kelj)", u"", u"Erzya"),
365 (u"as", u"অসমীয়া", u"", u"Assamese"),
337 (u"as", u"অসমীয়া", u"", u"Assamese"),
@@ -370,21 +342,17 @@ language_codes = (
370 (u"ay", u"Aymar", u"", u"Aymara"),
342 (u"ay", u"Aymar", u"", u"Aymara"),
371 (u"az", u"Azərbaycanca", u"", u"Azerbaijani"),
343 (u"az", u"Azərbaycanca", u"", u"Azerbaijani"),
372 (u"es-ES", u"Español", u"", u"Spanish"),
344 (u"es-ES", u"Español", u"", u"Spanish"),
373− (u"nl", u"Nederlands", u"", u"Dutch"),
345+ (u"lv-LV", u"Latviešu", u"", u"Latvian"),
374 (u"nn", u"Nynorsk", u"", u"Norwegian (Nynorsk)"),
346 (u"nn", u"Nynorsk", u"", u"Norwegian (Nynorsk)"),
375 (u"no", u"Norsk (Bokmål)", u"", u"Norwegian (Bokmål)"),
347 (u"no", u"Norsk (Bokmål)", u"", u"Norwegian (Bokmål)"),
376 (u"na", u"dorerin Naoero", u"", u"Nauruan"),
348 (u"na", u"dorerin Naoero", u"", u"Nauruan"),
377 (u"nah", u"Nāhuatl", u"", u"Nahuatl"),
349 (u"nah", u"Nāhuatl", u"", u"Nahuatl"),
378 (u"ne", u"नेपाली", u"", u"Nepali"),
350 (u"ne", u"नेपाली", u"", u"Nepali"),
379− (u"ng", u"Oshiwambo", u"", u"Ndonga"),
380 (u"en-AU", u"English", u"", u"English"),
351 (u"en-AU", u"English", u"", u"English"),
381 (u"nap", u"Nnapulitano", u"", u"Neapolitan"),
352 (u"nap", u"Nnapulitano", u"", u"Neapolitan"),
382 (u"nv", u"Diné bizaad", u"", u"Navajo"),
353 (u"nv", u"Diné bizaad", u"", u"Navajo"),
383 (u"ku", u"Kurdî / كوردی", u"", u"Kurdish"),
354 (u"ku", u"Kurdî / كوردی", u"", u"Kurdish"),
384 (u"cs-CZ", u"Čeština", u"", u"Czech"),
355 (u"cs-CZ", u"Čeština", u"", u"Czech"),
385− (u"zh-yue", u"粵語", u"", u"Cantonese"),
386 (u"en-SG", u"English", u"", u"English"),
356 (u"en-SG", u"English", u"", u"English"),
387− (u"zh-classical", u"古文 / 文言文", u"", u"Classical Chinese"),
388− (u"bcl", u"Bikol", u"", u"Central Bicolano"),
357+ (u"bcl", u"Bikol", u"", u"Central Bicolano")
389− (u"en-XA", u"English", u"", u"English")
390)
358)
utils/update_languages.py+35−6
@@ -11,7 +11,7 @@
11
11
12from requests import get
12from requests import get
13from re import sub
13from re import sub
14−from lxml.html import fromstring
14+from lxml.html import fromstring, tostring
15from json import loads
15from json import loads
16from sys import path
16from sys import path
17path.append('../searx')
17path.append('../searx')
@@ -25,6 +25,28 @@ google_json_name = 'google.preferences.langMap'
25
25
26languages = {}
26languages = {}
27
27
28+
29+# To filter out invalid codes and dialects.
30+def valid_code(lang_code):
31+ # filter invalid codes
32+ if lang_code[:2] == 'xx'\
33+ or lang_code == 'jw'\
34+ or lang_code[-2:] == 'UK'\
35+ or lang_code[-2:] == 'XA'\
36+ or lang_code[-2:] == 'XL':
37+ return False
38+
39+ # filter dialects
40+ lang_code = lang_code.split('-')
41+ if len(lang_code) > 2 or len(lang_code[0]) > 3:
42+ return False
43+ if len(lang_code) == 2 and len(lang_code[1]) > 2:
44+ print lang_code
45+ return False
46+
47+ return True
48+
49+
28# Get language names from Wikipedia.
50# Get language names from Wikipedia.
29def get_wikipedia_languages():
51def get_wikipedia_languages():
30 response = get(wiki_languages_url)
52 response = get(wiki_languages_url)
@@ -38,10 +60,13 @@ def get_wikipedia_languages():
38 code = td[3].xpath('./a')[0].text
60 code = td[3].xpath('./a')[0].text
39 name = td[2].xpath('./a')[0].text
61 name = td[2].xpath('./a')[0].text
40 english_name = td[1].xpath('./a')[0].text
62 english_name = td[1].xpath('./a')[0].text
63+ articles = int(td[4].xpath('./a/b')[0].text.replace(',',''))
41
64
65+ # exclude languages with few articles and language variants
42− if code not in languages:
66+ if code not in languages and articles >= 100 and valid_code(code):
43 languages[code] = (name, '', english_name)
67 languages[code] = (name, '', english_name)
44
68
69+
45# Get language names from Google.
70# Get language names from Google.
46def get_google_languages():
71def get_google_languages():
47 response = get(google_languages_url)
72 response = get(google_languages_url)
@@ -51,25 +76,27 @@ def get_google_languages():
51 code = option.xpath('./@value')[0]
76 code = option.xpath('./@value')[0]
52 name = option.text[:-1]
77 name = option.text[:-1]
53
78
54− if code not in languages:
79+ if code not in languages and valid_code(code):
55 languages[code] = (name, '', '')
80 languages[code] = (name, '', '')
56
81
82+
57# Join all language lists.
83# Join all language lists.
58# iterate all languages supported by each engine
84# iterate all languages supported by each engine
59def join_language_lists():
85def join_language_lists():
60 for engine_name in engines:
86 for engine_name in engines:
61 for locale in engines[engine_name].supported_languages:
87 for locale in engines[engine_name].supported_languages:
62 locale = locale.replace('_', '-')
88 locale = locale.replace('_', '-')
63− if locale not in languages:
89+ if locale not in languages and valid_code(locale):
64 # try to get language name
90 # try to get language name
65 language = languages.get(locale.split('-')[0], None)
91 language = languages.get(locale.split('-')[0], None)
66 if language == None:
92 if language == None:
67− print engine_name + ": " + locale
93+ # print engine_name + ": " + locale
68 continue
94 continue
69
95
70 (name, country, english) = language
96 (name, country, english) = language
71 languages[locale] = (name, country, english)
97 languages[locale] = (name, country, english)
72
98
99+
73# Write languages.py.
100# Write languages.py.
74def write_languages_file():
101def write_languages_file():
75 new_file = open('languages.py', 'w')
102 new_file = open('languages.py', 'w')
@@ -81,7 +108,7 @@ def write_languages_file():
81 (name, country, english) = languages[code]
108 (name, country, english) = languages[code]
82 file_content += '\n (u"' + code + '"'\
109 file_content += '\n (u"' + code + '"'\
83 + ', u"' + name + '"'\
110 + ', u"' + name + '"'\
84− + ', u"' + country[1:-1] + '"'\
111+ + ', u"' + country + '"'\
85 + ', u"' + english + '"),'
112 + ', u"' + english + '"),'
86 # remove last comma
113 # remove last comma
87 file_content = file_content[:-1]
114 file_content = file_content[:-1]
@@ -89,11 +116,13 @@ def write_languages_file():
89 new_file.write(file_content.encode('utf8'))
116 new_file.write(file_content.encode('utf8'))
90 new_file.close()
117 new_file.close()
91
118
119+
92def main():
120def main():
93 get_wikipedia_languages()
121 get_wikipedia_languages()
94 get_google_languages()
122 get_google_languages()
95 join_language_lists()
123 join_language_lists()
96 write_languages_file()
124 write_languages_file()
97
125
126+
98if __name__ == "__main__":
127if __name__ == "__main__":
99 main()
128 main()