浏览代码

filter langauges

marc 8 年前
父节点
当前提交
c677aee58a
共有 4 个文件被更改,包括 81 次插入72 次删除
  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'
40 40
 title_xpath = './/title'
41 41
 content_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 50
 # do search-request
45 51
 def request(query, params):
@@ -48,7 +54,9 @@ def request(query, params):
48 54
     if params['language'] == 'all':
49 55
         language = 'xx'
50 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 61
     if params['safesearch'] >= 1:
54 62
         safesearch = 1

+ 19
- 15
searx/engines/google.py 查看文件

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

+ 18
- 50
searx/languages.py 查看文件

@@ -32,9 +32,7 @@ language_codes = (
32 32
     (u"en-NZ", u"English", u"", u"English"),
33 33
     (u"got", u"𐌲𐌿𐍄𐌹𐍃𐌺", u"", u"Gothic"),
34 34
     (u"vls", u"West-Vlams", u"", u"West Flemish"),
35
-    (u"ro", u"Română", u"", u"Romanian"),
36 35
     (u"bxr", u"Буряад", u"", u"Buryat"),
37
-    (u"fiu-vro", u"Võro", u"", u"Võro"),
38 36
     (u"diq", u"Zazaki", u"", u"Zazaki"),
39 37
     (u"zh", u"中文", u"", u"Chinese"),
40 38
     (u"pms", u"Piemontèis", u"", u"Piedmontese"),
@@ -42,28 +40,25 @@ language_codes = (
42 40
     (u"zh-HK", u"中文", u"", u"Chinese"),
43 41
     (u"zu", u"isiZulu", u"", u"Zulu"),
44 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 44
     (u"new", u"नेपाल भाषा", u"", u"Newar"),
45
+    (u"ro-RO", u"Română", u"", u"Romanian"),
47 46
     (u"lez", u"Лезги чІал (Lezgi č’al)", u"", u"Lezgian"),
48 47
     (u"glk", u"گیلکی", u"", u"Gilaki"),
49 48
     (u"ko-KR", u"한국어", u"", u"Korean"),
50 49
     (u"id-ID", u"Bahasa Indonesia", u"", u"Indonesian"),
51
-    (u"cho", u"Choctaw", u"", u"Choctaw"),
52 50
     (u"chr", u"ᏣᎳᎩ", u"", u"Cherokee"),
53 51
     (u"vi", u"Tiếng Việt", u"", u"Vietnamese"),
54 52
     (u"chy", u"Tsetsêhestâhese", u"", u"Cheyenne"),
55
-    (u"is", u"Íslenska", u"", u"Icelandic"),
56 53
     (u"tk", u"تركمن / Туркмен", u"", u"Turkmen"),
57 54
     (u"da-DK", u"Dansk", u"", u"Danish"),
58 55
     (u"pfl", u"Pälzisch", u"", u"Palatinate German"),
59 56
     (u"hu-HU", u"Magyar", u"", u"Hungarian"),
60
-    (u"he-IL", u"עברית", u"", u"Hebrew"),
61 57
     (u"mg", u"Malagasy", u"", u"Malagasy"),
62 58
     (u"ml", u"മലയാളം", u"", u"Malayalam"),
63 59
     (u"mo", u"Молдовеняскэ", u"", u"Moldovan"),
64 60
     (u"mn", u"Монгол", u"", u"Mongolian"),
65 61
     (u"mi", u"Māori", u"", u"Maori"),
66
-    (u"mh", u"Ebon", u"", u"Marshallese"),
67 62
     (u"mk", u"Македонски", u"", u"Macedonian"),
68 63
     (u"mt", u"Malti", u"", u"Maltese"),
69 64
     (u"ms", u"Bahasa Melayu", u"", u"Malay"),
@@ -75,7 +70,6 @@ language_codes = (
75 70
     (u"pl-PL", u"Polski", u"", u"Polish"),
76 71
     (u"sl-SL", u"Slovenščina", u"", u"Slovenian"),
77 72
     (u"csb", u"Kaszëbsczi", u"", u"Kashubian"),
78
-    (u"cbk-zam", u"Chavacano de Zamboanga", u"", u"Zamboanga Chavacano"),
79 73
     (u"nyn", u"Runyankore", u"", u""),
80 74
     (u"ig", u"Igbo", u"", u"Igbo"),
81 75
     (u"fr", u"Français", u"", u"French"),
@@ -88,7 +82,7 @@ language_codes = (
88 82
     (u"fj", u"Na Vosa Vakaviti", u"", u"Fijian"),
89 83
     (u"fo", u"Føroyskt", u"", u"Faroese"),
90 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 86
     (u"sq", u"Shqip", u"", u"Albanian"),
93 87
     (u"sw", u"Kiswahili", u"", u"Swahili"),
94 88
     (u"sv", u"Svenska", u"", u"Swedish"),
@@ -104,7 +98,7 @@ language_codes = (
104 98
     (u"sc", u"Sardu", u"", u"Sardinian"),
105 99
     (u"pt-BR", u"português (Brasil)", u"", u""),
106 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 102
     (u"se", u"Sámegiella", u"", u"Northern Sami"),
109 103
     (u"sd", u"سنڌي، سندھی ، सिन्ध", u"", u"Sindhi"),
110 104
     (u"fr-CH", u"Français", u"", u"French"),
@@ -112,7 +106,6 @@ language_codes = (
112 106
     (u"it-CH", u"Italiano", u"", u"Italian"),
113 107
     (u"wuu", u"吴语", u"", u"Wu"),
114 108
     (u"fr-CA", u"Français", u"", u"French"),
115
-    (u"ar-XA", u"العربية", u"", u"Arabic"),
116 109
     (u"kbd", u"Адыгэбзэ (Adighabze)", u"", u"Kabardian Circassian"),
117 110
     (u"no-NO", u"Norsk (Bokmål)", u"", u"Norwegian (Bokmål)"),
118 111
     (u"ca-ES", u"Català", u"", u"Catalan"),
@@ -130,14 +123,13 @@ language_codes = (
130 123
     (u"yi", u"ייִדיש", u"", u"Yiddish"),
131 124
     (u"ceb", u"Sinugboanong Binisaya", u"", u"Cebuano"),
132 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 127
     (u"bar", u"Boarisch", u"", u"Bavarian"),
135 128
     (u"nov", u"Novial", u"", u"Novial"),
136 129
     (u"sr-ME", u"srpski (Crna Gora)", u"", u""),
137 130
     (u"es-CL", u"Español", u"", u"Spanish"),
138 131
     (u"es-CO", u"Español", u"", u"Spanish"),
139 132
     (u"nl-NL", u"Nederlands", u"", u"Dutch"),
140
-    (u"map-bms", u"Basa Banyumasan", u"", u"Banyumasan"),
141 133
     (u"el", u"Ελληνικά", u"", u"Greek"),
142 134
     (u"eo", u"Esperanto", u"", u"Esperanto"),
143 135
     (u"en", u"English", u"", u"English"),
@@ -151,7 +143,7 @@ language_codes = (
151 143
     (u"rw", u"Ikinyarwanda", u"", u"Kinyarwanda"),
152 144
     (u"rm", u"Rumantsch", u"", u"Romansh"),
153 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 147
     (u"dsb", u"Dolnoserbski", u"", u"Lower Sorbian"),
156 148
     (u"ast", u"Asturianu", u"", u"Asturian"),
157 149
     (u"lmo", u"Lumbaart", u"", u"Lombard"),
@@ -161,17 +153,13 @@ language_codes = (
161 153
     (u"koi", u"Перем Коми (Perem Komi)", u"", u"Komi-Permyak"),
162 154
     (u"tr-TR", u"Türkçe", u"", u"Turkish"),
163 155
     (u"pnt", u"Ποντιακά", u"", u"Pontic"),
164
-    (u"es-XL", u"Español", u"", u"Spanish"),
165 156
     (u"fi-FI", u"Suomi", u"", u"Finnish"),
166 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 159
     (u"bem", u"Ichibemba", u"", u""),
169
-    (u"roa-rup", u"Armãneashce", u"", u"Aromanian"),
170
-    (u"sr-Latn", u"srpski (latinica)", u"", u""),
160
+    (u"en-ZA", u"English", u"", u"English"),
171 161
     (u"stq", u"Seeltersk", u"", u"Saterland Frisian"),
172
-    (u"sr", u"Српски / Srpski", u"", u"Serbian"),
173 162
     (u"ang", u"Englisc", u"", u"Anglo-Saxon"),
174
-    (u"ru-RU", u"Русский", u"", u"Russian"),
175 163
     (u"lbe", u"Лакку", u"", u"Lak"),
176 164
     (u"min", u"Minangkabau", u"", u"Minangkabau"),
177 165
     (u"es-US", u"Español", u"", u"Spanish"),
@@ -184,14 +172,13 @@ language_codes = (
184 172
     (u"kg", u"KiKongo", u"", u"Kongo"),
185 173
     (u"ckb", u"Soranî / کوردی", u"", u"Sorani"),
186 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 176
     (u"ki", u"Gĩkũyũ", u"", u"Kikuyu"),
189 177
     (u"ko", u"한국어", u"", u"Korean"),
190 178
     (u"kn", u"ಕನ್ನಡ", u"", u"Kannada"),
191 179
     (u"tpi", u"Tok Pisin", u"", u"Tok Pisin"),
192 180
     (u"kl", u"Kalaallisut", u"", u"Greenlandic"),
193 181
     (u"ks", u"कश्मीरी / كشميري", u"", u"Kashmiri"),
194
-    (u"kr", u"Kanuri", u"", u"Kanuri"),
195 182
     (u"ext", u"Estremeñu", u"", u"Extremaduran"),
196 183
     (u"kw", u"Kernewek/Karnuack", u"", u"Cornish"),
197 184
     (u"kv", u"Коми", u"", u"Komi"),
@@ -202,7 +189,7 @@ language_codes = (
202 189
     (u"en-GB", u"English", u"", u"English"),
203 190
     (u"xmf", u"მარგალური (Margaluri)", u"", u"Mingrelian"),
204 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 193
     (u"ksh", u"Ripoarisch", u"", u"Ripuarian"),
207 194
     (u"ms-MY", u"Bahasa Melayu", u"", u"Malay"),
208 195
     (u"de", u"Deutsch", u"", u"German"),
@@ -219,13 +206,10 @@ language_codes = (
219 206
     (u"rmy", u"romani - रोमानी", u"", u"Romani"),
220 207
     (u"arc", u"ܐܪܡܝܐ", u"", u"Aramaic"),
221 208
     (u"th-TH", u"ไทย", u"", u"Thai"),
222
-    (u"mus", u"Muskogee", u"", u"Muscogee"),
223 209
     (u"lua", u"Luba-Lulua", u"", u""),
224
-    (u"en-ZA", u"English", u"", u"English"),
225 210
     (u"wa", u"Walon", u"", u"Walloon"),
226 211
     (u"wo", u"Wolof", u"", u"Wolof"),
227 212
     (u"jv", u"Basa Jawa", u"", u"Javanese"),
228
-    (u"jw", u"Javanese", u"", u""),
229 213
     (u"fr-BE", u"Français", u"", u"French"),
230 214
     (u"tum", u"chiTumbuka", u"", u"Tumbuka"),
231 215
     (u"ja", u"日本語", u"", u"Japanese"),
@@ -233,12 +217,9 @@ language_codes = (
233 217
     (u"ilo", u"Ilokano", u"", u"Ilokano"),
234 218
     (u"tlh", u"Klingon", u"", u""),
235 219
     (u"pdc", u"Deitsch", u"", u"Pennsylvania German"),
236
-    (u"aa", u"Afar", u"", u"Afar"),
237 220
     (u"ch", u"Chamoru", u"", u"Chamorro"),
238 221
     (u"co", u"Corsu", u"", u"Corsican"),
239
-    (u"simple", u"Simple English", u"", u"Simple English"),
240 222
     (u"ca", u"Català", u"", u"Catalan"),
241
-    (u"xx-pirate", u"Pirate", u"", u""),
242 223
     (u"ce", u"Нохчийн", u"", u"Chechen"),
243 224
     (u"cy", u"Cymraeg", u"", u"Welsh"),
244 225
     (u"sah", u"Саха тыла (Saxa Tyla)", u"", u"Sakha"),
@@ -254,30 +235,26 @@ language_codes = (
254 235
     (u"frp", u"Arpitan", u"", u"Franco-Provençal"),
255 236
     (u"xal", u"Хальмг", u"", u"Kalmyk"),
256 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 239
     (u"pl", u"Polski", u"", u"Polish"),
259 240
     (u"nrm", u"Nouormand/Normaund", u"", u"Norman"),
260 241
     (u"en-US", u"English", u"", u"English"),
261 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 243
     (u"gag", u"Gagauz", u"", u"Gagauz"),
265 244
     (u"an", u"Aragonés", u"", u"Aragonese"),
266 245
     (u"gaa", u"Ga", u"", u""),
267 246
     (u"fur", u"Furlan", u"", u"Friulian"),
268
-    (u"kr-KR", u"Kanuri", u"", u"Kanuri"),
269
-    (u"zh-CN", u"中文 (简体)", u"", u""),
247
+    (u"es-PE", u"Español", u"", u"Spanish"),
270 248
     (u"tl-PH", u"Tagalog", u"", u"Tagalog"),
271 249
     (u"en-IN", u"English", u"", u"English"),
272 250
     (u"ve", u"Tshivenda", u"", u"Venda"),
273 251
     (u"en-ID", u"English", u"", u"English"),
274 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 254
     (u"iu", u"ᐃᓄᒃᑎᑐᑦ", u"", u"Inuktitut"),
277 255
     (u"it", u"Italiano", u"", u"Italian"),
278 256
     (u"iw", u"עברית", u"", u""),
279 257
     (u"vo", u"Volapük", u"", u"Volapük"),
280
-    (u"ii", u"ꆇꉙ", u"", u"Sichuan Yi"),
281 258
     (u"ik", u"Iñupiak", u"", u"Inupiak"),
282 259
     (u"io", u"Ido", u"", u"Ido"),
283 260
     (u"ia", u"Interlingua", u"", u"Interlingua"),
@@ -288,7 +265,7 @@ language_codes = (
288 265
     (u"pap", u"Papiamentu", u"", u"Papiamentu"),
289 266
     (u"pag", u"Pangasinan", u"", u"Pangasinan"),
290 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 269
     (u"mzn", u"مَزِروني", u"", u"Mazandarani"),
293 270
     (u"nl-BE", u"Nederlands", u"", u"Dutch"),
294 271
     (u"sk-SK", u"Slovenčina", u"", u"Slovak"),
@@ -297,6 +274,7 @@ language_codes = (
297 274
     (u"de-DE", u"Deutsch", u"", u"German"),
298 275
     (u"jbo", u"Lojban", u"", u"Lojban"),
299 276
     (u"mfe", u"kreol morisien", u"", u""),
277
+    (u"tcy", u"Tulu", u"", u"ತುಳು"),
300 278
     (u"hak", u"Hak-kâ-fa / 客家話", u"", u"Hakka"),
301 279
     (u"ny", u"Chichewa", u"", u"Chichewa"),
302 280
     (u"ady", u"Адыгэбзэ", u"", u"Adyghe"),
@@ -308,7 +286,6 @@ language_codes = (
308 286
     (u"en-MY", u"English", u"", u"English"),
309 287
     (u"sv-SE", u"Svenska", u"", u"Swedish"),
310 288
     (u"de-AT", u"Deutsch", u"", u"German"),
311
-    (u"xx-elmer", u"Elmer Fudd", u"", u""),
312 289
     (u"hsb", u"Hornjoserbsce", u"", u"Upper Sorbian"),
313 290
     (u"be", u"Беларуская", u"", u"Belarusian"),
314 291
     (u"bg", u"Български", u"", u"Bulgarian"),
@@ -328,25 +305,20 @@ language_codes = (
328 305
     (u"ach", u"Acoli", u"", u""),
329 306
     (u"oc", u"Occitan", u"", u"Occitan"),
330 307
     (u"kri", u"Krio (Sierra Leone)", u"", u""),
331
-    (u"be-tarask", u"Беларуская (тарашкевіца)", u"", u"Belarusian (Taraškievica)"),
332 308
     (u"krc", u"Къарачай-Малкъар (Qarachay-Malqar)", u"", u"Karachay-Balkar"),
333 309
     (u"nds", u"Plattdüütsch", u"", u"Low Saxon"),
334 310
     (u"os", u"Иронау", u"", u"Ossetian"),
335 311
     (u"or", u"ଓଡ଼ିଆ", u"", u"Oriya"),
336 312
     (u"nso", u"Sepedi", u"", u"Northern Sotho"),
337 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 314
     (u"pa", u"ਪੰਜਾਬੀ", u"", u"Punjabi"),
341 315
     (u"loz", u"Lozi", u"", u""),
342 316
     (u"war", u"Winaray", u"", u"Waray-Waray"),
343
-    (u"hz", u"Otsiherero", u"", u"Herero"),
344 317
     (u"hy", u"Հայերեն", u"", u"Armenian"),
345 318
     (u"hr", u"Hrvatski", u"", u"Croatian"),
346 319
     (u"ht", u"Krèyol ayisyen", u"", u"Haitian"),
347 320
     (u"hu", u"Magyar", u"", u"Hungarian"),
348 321
     (u"hi", u"हिन्दी", u"", u"Hindi"),
349
-    (u"ho", u"Hiri Motu", u"", u"Hiri Motu"),
350 322
     (u"ha", u"هَوُسَ", u"", u"Hausa"),
351 323
     (u"bug", u"Basa Ugi", u"", u"Buginese"),
352 324
     (u"he", u"עברית", u"", u"Hebrew"),
@@ -359,7 +331,7 @@ language_codes = (
359 331
     (u"pih", u"Norfuk", u"", u"Norfolk"),
360 332
     (u"ab", u"Аҧсуа", u"", u"Abkhazian"),
361 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 335
     (u"am", u"አማርኛ", u"", u"Amharic"),
364 336
     (u"myv", u"Эрзянь (Erzjanj Kelj)", u"", u"Erzya"),
365 337
     (u"as", u"অসমীয়া", u"", u"Assamese"),
@@ -370,21 +342,17 @@ language_codes = (
370 342
     (u"ay", u"Aymar", u"", u"Aymara"),
371 343
     (u"az", u"Azərbaycanca", u"", u"Azerbaijani"),
372 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 346
     (u"nn", u"Nynorsk", u"", u"Norwegian (Nynorsk)"),
375 347
     (u"no", u"Norsk (Bokmål)", u"", u"Norwegian (Bokmål)"),
376 348
     (u"na", u"dorerin Naoero", u"", u"Nauruan"),
377 349
     (u"nah", u"Nāhuatl", u"", u"Nahuatl"),
378 350
     (u"ne", u"नेपाली", u"", u"Nepali"),
379
-    (u"ng", u"Oshiwambo", u"", u"Ndonga"),
380 351
     (u"en-AU", u"English", u"", u"English"),
381 352
     (u"nap", u"Nnapulitano", u"", u"Neapolitan"),
382 353
     (u"nv", u"Diné bizaad", u"", u"Navajo"),
383 354
     (u"ku", u"Kurdî / كوردی", u"", u"Kurdish"),
384 355
     (u"cs-CZ", u"Čeština", u"", u"Czech"),
385
-    (u"zh-yue", u"粵語", u"", u"Cantonese"),
386 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"),
389
-    (u"en-XA", u"English", u"", u"English")
357
+    (u"bcl", u"Bikol", u"", u"Central Bicolano")
390 358
 )

+ 35
- 6
utils/update_languages.py 查看文件

@@ -11,7 +11,7 @@
11 11
 
12 12
 from requests import get
13 13
 from re import sub
14
-from lxml.html import fromstring
14
+from lxml.html import fromstring, tostring
15 15
 from json import loads
16 16
 from sys import path
17 17
 path.append('../searx')
@@ -25,6 +25,28 @@ google_json_name = 'google.preferences.langMap'
25 25
 
26 26
 languages = {}
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 50
 # Get language names from Wikipedia.
29 51
 def get_wikipedia_languages():
30 52
     response = get(wiki_languages_url)
@@ -38,10 +60,13 @@ def get_wikipedia_languages():
38 60
             code = td[3].xpath('./a')[0].text
39 61
             name = td[2].xpath('./a')[0].text
40 62
             english_name = td[1].xpath('./a')[0].text
63
+            articles = int(td[4].xpath('./a/b')[0].text.replace(',',''))
41 64
             
42
-            if code not in languages:
65
+            # exclude languages with few articles and language variants
66
+            if code not in languages and articles >= 100 and valid_code(code):
43 67
                 languages[code] = (name, '', english_name)
44 68
 
69
+
45 70
 # Get language names from Google.
46 71
 def get_google_languages():
47 72
     response = get(google_languages_url)
@@ -51,25 +76,27 @@ def get_google_languages():
51 76
         code = option.xpath('./@value')[0]
52 77
         name = option.text[:-1]
53 78
 
54
-        if code not in languages:
79
+        if code not in languages and valid_code(code):
55 80
             languages[code] = (name, '', '')
56 81
 
82
+
57 83
 # Join all language lists.
58 84
 # iterate all languages supported by each engine
59 85
 def join_language_lists():
60 86
     for engine_name in engines:
61 87
         for locale in engines[engine_name].supported_languages:
62 88
             locale = locale.replace('_', '-')
63
-            if locale not in languages:
89
+            if locale not in languages and valid_code(locale):
64 90
                 # try to get language name
65 91
                 language = languages.get(locale.split('-')[0], None)
66 92
                 if language == None:
67
-                    print engine_name + ": " + locale
93
+                    # print engine_name + ": " + locale
68 94
                     continue
69 95
 
70 96
                 (name, country, english) = language
71 97
                 languages[locale] = (name, country, english)
72 98
 
99
+
73 100
 # Write languages.py.
74 101
 def write_languages_file():
75 102
     new_file = open('languages.py', 'w')
@@ -81,7 +108,7 @@ def write_languages_file():
81 108
         (name, country, english) = languages[code]
82 109
         file_content += '\n    (u"' + code + '"'\
83 110
                         + ', u"' + name + '"'\
84
-                        + ', u"' + country[1:-1] + '"'\
111
+                        + ', u"' + country + '"'\
85 112
                         + ', u"' + english + '"),'
86 113
     # remove last comma
87 114
     file_content = file_content[:-1]
@@ -89,11 +116,13 @@ def write_languages_file():
89 116
     new_file.write(file_content.encode('utf8'))
90 117
     new_file.close()
91 118
 
119
+
92 120
 def main():
93 121
     get_wikipedia_languages()
94 122
     get_google_languages()
95 123
     join_language_lists()
96 124
     write_languages_file()
97 125
 
126
+
98 127
 if __name__ == "__main__":
99 128
     main()