diff --git a/searx/data/engine_traits.json b/searx/data/engine_traits.json index 658b7582f..b4fdd8b28 100644 --- a/searx/data/engine_traits.json +++ b/searx/data/engine_traits.json @@ -3,8 +3,398 @@ "all_locale": null, "custom": {}, "data_type": "supported_languages", - "languages": {}, - "regions": {}, + "languages": { + "af": "af", + "am": "am", + "ar": "ar", + "as": "as", + "az": "az", + "be": "be", + "bg": "bg", + "bn": "bn", + "bs": "bs", + "ca": "ca", + "chr": "chr", + "cs": "cs", + "cy": "cy", + "da": "da", + "de": "de", + "el": "el", + "en": "en", + "es": "es", + "et": "et", + "eu": "eu", + "fa": "fa", + "fi": "fi", + "fil": "fil", + "fr": "fr", + "ga": "ga", + "gd": "gd", + "gl": "gl", + "gu": "gu", + "ha": "ha", + "he": "he", + "hi": "hi", + "hr": "hr", + "hu": "hu", + "hy": "hy", + "id": "id", + "ig": "ig", + "is": "is", + "it": "it", + "ja": "ja", + "ka": "ka", + "kk": "kk", + "km": "km", + "kn": "kn", + "ko": "ko", + "kok": "kok", + "ku": "ku", + "ky": "ky", + "lb": "lb", + "lo": "lo", + "lt": "lt", + "lv": "lv", + "mi": "mi", + "mk": "mk", + "ml": "ml", + "mn": "MN", + "mr": "mr", + "ms": "ms", + "mt": "mt", + "nb": "nb", + "ne": "ne", + "nl": "nl", + "nn": "nn", + "or": "or", + "pa": "pa", + "pa_Arab": "pa-Arab", + "pl": "pl", + "pt": "pt", + "qu": "quz", + "ro": "ro", + "ru": "ru", + "rw": "rw", + "sd": "sd", + "si": "si", + "sk": "sk", + "sl": "sl", + "sq": "sq", + "sr": "sr", + "sr_Latn": "sr_latn", + "sv": "sv", + "sw": "sw", + "ta": "ta", + "te": "te", + "tg": "tg", + "th": "th", + "ti": "ti", + "tk": "tk", + "tr": "tr", + "tt": "tt", + "ug": "ug", + "uk": "uk", + "ur": "ur", + "uz": "uz", + "vi": "vi", + "wo": "wo", + "xh": "xh", + "yo": "yo", + "zh": "zh_Hans", + "zh_Hans": "zh_Hans", + "zh_Hant": "zh_Hant", + "zu": "zu" + }, + "regions": { + "am-ET": "et", + "ar-AE": "ae", + "ar-BH": "bh", + "ar-DJ": "dj", + "ar-DZ": "dz", + "ar-EG": "eg", + "ar-ER": "er", + "ar-IL": "il", + "ar-IQ": "iq", + "ar-JO": "jo", + "ar-KM": "km", + "ar-KW": "kw", + "ar-LB": "lb", + "ar-LY": "ly", + "ar-MA": "ma", + "ar-MR": "mr", + "ar-OM": "om", + "ar-PS": "ps", + "ar-QA": "qa", + "ar-SA": "sa", + "ar-SD": "sd", + "ar-SO": "so", + "ar-SY": "sy", + "ar-TD": "td", + "ar-TN": "tn", + "ar-YE": "ye", + "az-AZ": "az", + "be-BY": "by", + "bg-BG": "bg", + "bn-BD": "bd", + "bs-BA": "ba", + "ca-AD": "ad", + "cs-CZ": "cz", + "da-DK": "dk", + "de-AT": "at", + "de-BE": "be", + "de-CH": "ch", + "de-DE": "de", + "de-LI": "li", + "de-LU": "lu", + "el-CY": "cy", + "el-GR": "gr", + "en-AG": "ag", + "en-AI": "ai", + "en-AS": "as", + "en-AU": "au", + "en-BB": "bb", + "en-BI": "bi", + "en-BM": "bm", + "en-BS": "bs", + "en-BW": "bw", + "en-BZ": "bz", + "en-CA": "ca", + "en-CC": "cc", + "en-CK": "ck", + "en-CM": "cm", + "en-CX": "cx", + "en-DM": "dm", + "en-ER": "er", + "en-FJ": "fj", + "en-FK": "fk", + "en-FM": "fm", + "en-GB": "gb", + "en-GD": "gd", + "en-GG": "gg", + "en-GH": "gh", + "en-GI": "gi", + "en-GM": "gm", + "en-GU": "gu", + "en-GY": "gy", + "en-HK": "hk", + "en-IE": "ie", + "en-IN": "in", + "en-JE": "je", + "en-JM": "jm", + "en-KE": "ke", + "en-KI": "ki", + "en-KN": "kn", + "en-KY": "ky", + "en-LC": "lc", + "en-LR": "lr", + "en-LS": "ls", + "en-MG": "mg", + "en-MH": "mh", + "en-MP": "mp", + "en-MS": "ms", + "en-MT": "mt", + "en-MU": "mu", + "en-MW": "mw", + "en-NA": "na", + "en-NF": "nf", + "en-NG": "ng", + "en-NR": "nr", + "en-NU": "nu", + "en-NZ": "nz", + "en-PG": "pg", + "en-PH": "ph", + "en-PK": "pk", + "en-PN": "pn", + "en-PR": "pr", + "en-PW": "pw", + "en-RW": "rw", + "en-SB": "sb", + "en-SC": "sc", + "en-SD": "sd", + "en-SG": "sg", + "en-SH": "sh", + "en-SL": "sl", + "en-SS": "ss", + "en-SX": "sx", + "en-SZ": "sz", + "en-TC": "tc", + "en-TK": "tk", + "en-TO": "to", + "en-TT": "tt", + "en-TV": "tv", + "en-TZ": "tz", + "en-UG": "ug", + "en-US": "us", + "en-VC": "vc", + "en-VG": "vg", + "en-VI": "vi", + "en-VU": "vu", + "en-WS": "ws", + "en-ZA": "za", + "en-ZM": "zm", + "en-ZW": "zw", + "es-AR": "ar", + "es-BO": "bo", + "es-CL": "cl", + "es-CO": "co", + "es-CR": "cr", + "es-DO": "do", + "es-EC": "ec", + "es-ES": "es", + "es-GQ": "gq", + "es-GT": "gt", + "es-HN": "hn", + "es-MX": "mx", + "es-NI": "ni", + "es-PA": "pa", + "es-PE": "pe", + "es-PR": "pr", + "es-PY": "py", + "es-SV": "sv", + "es-UY": "uy", + "es-VE": "ve", + "et-EE": "ee", + "fa-AF": "af", + "fa-IR": "ir", + "fi-FI": "fi", + "fil-PH": "ph", + "fr-BE": "be", + "fr-BF": "bf", + "fr-BI": "bi", + "fr-BJ": "bj", + "fr-BL": "bl", + "fr-CA": "ca", + "fr-CD": "cd", + "fr-CF": "cf", + "fr-CG": "cg", + "fr-CH": "ch", + "fr-CI": "ci", + "fr-CM": "cm", + "fr-DJ": "dj", + "fr-DZ": "dz", + "fr-FR": "fr", + "fr-GA": "ga", + "fr-GF": "gf", + "fr-GN": "gn", + "fr-GP": "gp", + "fr-GQ": "gq", + "fr-HT": "ht", + "fr-KM": "km", + "fr-LU": "lu", + "fr-MA": "ma", + "fr-MC": "mc", + "fr-MF": "mf", + "fr-MG": "mg", + "fr-ML": "ml", + "fr-MQ": "mq", + "fr-MU": "mu", + "fr-NC": "nc", + "fr-NE": "ne", + "fr-PF": "pf", + "fr-PM": "pm", + "fr-RE": "re", + "fr-RW": "rw", + "fr-SC": "sc", + "fr-SN": "sn", + "fr-SY": "sy", + "fr-TD": "td", + "fr-TG": "tg", + "fr-TN": "tn", + "fr-VU": "vu", + "fr-WF": "wf", + "fr-YT": "yt", + "ga-IE": "ie", + "he-IL": "il", + "hi-IN": "in", + "hr-BA": "ba", + "hr-HR": "hr", + "hu-HU": "hu", + "hy-AM": "am", + "id-ID": "id", + "is-IS": "is", + "it-CH": "ch", + "it-IT": "it", + "it-SM": "sm", + "it-VA": "va", + "ja-JP": "jp", + "ka-GE": "ge", + "kk-KZ": "kz", + "km-KH": "kh", + "ko-KR": "kr", + "ky-KG": "kg", + "lb-LU": "lu", + "lo-LA": "la", + "lt-LT": "lt", + "lv-LV": "lv", + "mi-NZ": "nz", + "mk-MK": "mk", + "mn-MN": "mn", + "ms-BN": "bn", + "ms-MY": "my", + "ms-SG": "sg", + "mt-MT": "mt", + "nb-NO": "no", + "ne-NP": "np", + "nl-AW": "aw", + "nl-BE": "be", + "nl-CW": "cw", + "nl-NL": "nl", + "nl-SR": "sr", + "nl-SX": "sx", + "nn-NO": "no", + "pl-PL": "pl", + "pt-AO": "ao", + "pt-BR": "br", + "pt-CV": "cv", + "pt-GQ": "gq", + "pt-GW": "gw", + "pt-MO": "mo", + "pt-MZ": "mz", + "pt-PT": "pt", + "pt-ST": "st", + "qu-BO": "bo", + "qu-EC": "ec", + "qu-PE": "pe", + "ro-MD": "md", + "ro-RO": "ro", + "ru-BY": "by", + "ru-KG": "kg", + "ru-KZ": "kz", + "ru-RU": "ru", + "ru-UA": "ua", + "rw-RW": "rw", + "si-LK": "lk", + "sk-SK": "sk", + "sl-SI": "si", + "sq-AL": "al", + "sr-BA": "ba", + "sr-ME": "me", + "sr-RS": "rs", + "sv-FI": "fi", + "sv-SE": "se", + "sw-KE": "ke", + "sw-TZ": "tz", + "sw-UG": "ug", + "ta-LK": "lk", + "ta-SG": "sg", + "tg-TJ": "tj", + "th-TH": "th", + "ti-ER": "er", + "tk-TM": "tm", + "tr-CY": "cy", + "tr-TR": "tr", + "uk-UA": "ua", + "ur-PK": "pk", + "uz-UZ": "uz", + "vi-VN": "vn", + "wo-SN": "sn", + "yo-NG": "ng", + "zh-CN": "cn", + "zh-HK": "hk", + "zh-MO": "mo", + "zh-SG": "sg", + "zh-TW": "tw" + }, "supported_languages": [ "af", "am", @@ -117,8 +507,398 @@ "all_locale": null, "custom": {}, "data_type": "supported_languages", - "languages": {}, - "regions": {}, + "languages": { + "af": "af", + "am": "am", + "ar": "ar", + "as": "as", + "az": "az", + "be": "be", + "bg": "bg", + "bn": "bn", + "bs": "bs", + "ca": "ca", + "chr": "chr", + "cs": "cs", + "cy": "cy", + "da": "da", + "de": "de", + "el": "el", + "en": "en", + "es": "es", + "et": "et", + "eu": "eu", + "fa": "fa", + "fi": "fi", + "fil": "fil", + "fr": "fr", + "ga": "ga", + "gd": "gd", + "gl": "gl", + "gu": "gu", + "ha": "ha", + "he": "he", + "hi": "hi", + "hr": "hr", + "hu": "hu", + "hy": "hy", + "id": "id", + "ig": "ig", + "is": "is", + "it": "it", + "ja": "ja", + "ka": "ka", + "kk": "kk", + "km": "km", + "kn": "kn", + "ko": "ko", + "kok": "kok", + "ku": "ku", + "ky": "ky", + "lb": "lb", + "lo": "lo", + "lt": "lt", + "lv": "lv", + "mi": "mi", + "mk": "mk", + "ml": "ml", + "mn": "MN", + "mr": "mr", + "ms": "ms", + "mt": "mt", + "nb": "nb", + "ne": "ne", + "nl": "nl", + "nn": "nn", + "or": "or", + "pa": "pa", + "pa_Arab": "pa-Arab", + "pl": "pl", + "pt": "pt", + "qu": "quz", + "ro": "ro", + "ru": "ru", + "rw": "rw", + "sd": "sd", + "si": "si", + "sk": "sk", + "sl": "sl", + "sq": "sq", + "sr": "sr", + "sr_Latn": "sr_latn", + "sv": "sv", + "sw": "sw", + "ta": "ta", + "te": "te", + "tg": "tg", + "th": "th", + "ti": "ti", + "tk": "tk", + "tr": "tr", + "tt": "tt", + "ug": "ug", + "uk": "uk", + "ur": "ur", + "uz": "uz", + "vi": "vi", + "wo": "wo", + "xh": "xh", + "yo": "yo", + "zh": "zh_Hans", + "zh_Hans": "zh_Hans", + "zh_Hant": "zh_Hant", + "zu": "zu" + }, + "regions": { + "am-ET": "et", + "ar-AE": "ae", + "ar-BH": "bh", + "ar-DJ": "dj", + "ar-DZ": "dz", + "ar-EG": "eg", + "ar-ER": "er", + "ar-IL": "il", + "ar-IQ": "iq", + "ar-JO": "jo", + "ar-KM": "km", + "ar-KW": "kw", + "ar-LB": "lb", + "ar-LY": "ly", + "ar-MA": "ma", + "ar-MR": "mr", + "ar-OM": "om", + "ar-PS": "ps", + "ar-QA": "qa", + "ar-SA": "sa", + "ar-SD": "sd", + "ar-SO": "so", + "ar-SY": "sy", + "ar-TD": "td", + "ar-TN": "tn", + "ar-YE": "ye", + "az-AZ": "az", + "be-BY": "by", + "bg-BG": "bg", + "bn-BD": "bd", + "bs-BA": "ba", + "ca-AD": "ad", + "cs-CZ": "cz", + "da-DK": "dk", + "de-AT": "at", + "de-BE": "be", + "de-CH": "ch", + "de-DE": "de", + "de-LI": "li", + "de-LU": "lu", + "el-CY": "cy", + "el-GR": "gr", + "en-AG": "ag", + "en-AI": "ai", + "en-AS": "as", + "en-AU": "au", + "en-BB": "bb", + "en-BI": "bi", + "en-BM": "bm", + "en-BS": "bs", + "en-BW": "bw", + "en-BZ": "bz", + "en-CA": "ca", + "en-CC": "cc", + "en-CK": "ck", + "en-CM": "cm", + "en-CX": "cx", + "en-DM": "dm", + "en-ER": "er", + "en-FJ": "fj", + "en-FK": "fk", + "en-FM": "fm", + "en-GB": "gb", + "en-GD": "gd", + "en-GG": "gg", + "en-GH": "gh", + "en-GI": "gi", + "en-GM": "gm", + "en-GU": "gu", + "en-GY": "gy", + "en-HK": "hk", + "en-IE": "ie", + "en-IN": "in", + "en-JE": "je", + "en-JM": "jm", + "en-KE": "ke", + "en-KI": "ki", + "en-KN": "kn", + "en-KY": "ky", + "en-LC": "lc", + "en-LR": "lr", + "en-LS": "ls", + "en-MG": "mg", + "en-MH": "mh", + "en-MP": "mp", + "en-MS": "ms", + "en-MT": "mt", + "en-MU": "mu", + "en-MW": "mw", + "en-NA": "na", + "en-NF": "nf", + "en-NG": "ng", + "en-NR": "nr", + "en-NU": "nu", + "en-NZ": "nz", + "en-PG": "pg", + "en-PH": "ph", + "en-PK": "pk", + "en-PN": "pn", + "en-PR": "pr", + "en-PW": "pw", + "en-RW": "rw", + "en-SB": "sb", + "en-SC": "sc", + "en-SD": "sd", + "en-SG": "sg", + "en-SH": "sh", + "en-SL": "sl", + "en-SS": "ss", + "en-SX": "sx", + "en-SZ": "sz", + "en-TC": "tc", + "en-TK": "tk", + "en-TO": "to", + "en-TT": "tt", + "en-TV": "tv", + "en-TZ": "tz", + "en-UG": "ug", + "en-US": "us", + "en-VC": "vc", + "en-VG": "vg", + "en-VI": "vi", + "en-VU": "vu", + "en-WS": "ws", + "en-ZA": "za", + "en-ZM": "zm", + "en-ZW": "zw", + "es-AR": "ar", + "es-BO": "bo", + "es-CL": "cl", + "es-CO": "co", + "es-CR": "cr", + "es-DO": "do", + "es-EC": "ec", + "es-ES": "es", + "es-GQ": "gq", + "es-GT": "gt", + "es-HN": "hn", + "es-MX": "mx", + "es-NI": "ni", + "es-PA": "pa", + "es-PE": "pe", + "es-PR": "pr", + "es-PY": "py", + "es-SV": "sv", + "es-UY": "uy", + "es-VE": "ve", + "et-EE": "ee", + "fa-AF": "af", + "fa-IR": "ir", + "fi-FI": "fi", + "fil-PH": "ph", + "fr-BE": "be", + "fr-BF": "bf", + "fr-BI": "bi", + "fr-BJ": "bj", + "fr-BL": "bl", + "fr-CA": "ca", + "fr-CD": "cd", + "fr-CF": "cf", + "fr-CG": "cg", + "fr-CH": "ch", + "fr-CI": "ci", + "fr-CM": "cm", + "fr-DJ": "dj", + "fr-DZ": "dz", + "fr-FR": "fr", + "fr-GA": "ga", + "fr-GF": "gf", + "fr-GN": "gn", + "fr-GP": "gp", + "fr-GQ": "gq", + "fr-HT": "ht", + "fr-KM": "km", + "fr-LU": "lu", + "fr-MA": "ma", + "fr-MC": "mc", + "fr-MF": "mf", + "fr-MG": "mg", + "fr-ML": "ml", + "fr-MQ": "mq", + "fr-MU": "mu", + "fr-NC": "nc", + "fr-NE": "ne", + "fr-PF": "pf", + "fr-PM": "pm", + "fr-RE": "re", + "fr-RW": "rw", + "fr-SC": "sc", + "fr-SN": "sn", + "fr-SY": "sy", + "fr-TD": "td", + "fr-TG": "tg", + "fr-TN": "tn", + "fr-VU": "vu", + "fr-WF": "wf", + "fr-YT": "yt", + "ga-IE": "ie", + "he-IL": "il", + "hi-IN": "in", + "hr-BA": "ba", + "hr-HR": "hr", + "hu-HU": "hu", + "hy-AM": "am", + "id-ID": "id", + "is-IS": "is", + "it-CH": "ch", + "it-IT": "it", + "it-SM": "sm", + "it-VA": "va", + "ja-JP": "jp", + "ka-GE": "ge", + "kk-KZ": "kz", + "km-KH": "kh", + "ko-KR": "kr", + "ky-KG": "kg", + "lb-LU": "lu", + "lo-LA": "la", + "lt-LT": "lt", + "lv-LV": "lv", + "mi-NZ": "nz", + "mk-MK": "mk", + "mn-MN": "mn", + "ms-BN": "bn", + "ms-MY": "my", + "ms-SG": "sg", + "mt-MT": "mt", + "nb-NO": "no", + "ne-NP": "np", + "nl-AW": "aw", + "nl-BE": "be", + "nl-CW": "cw", + "nl-NL": "nl", + "nl-SR": "sr", + "nl-SX": "sx", + "nn-NO": "no", + "pl-PL": "pl", + "pt-AO": "ao", + "pt-BR": "br", + "pt-CV": "cv", + "pt-GQ": "gq", + "pt-GW": "gw", + "pt-MO": "mo", + "pt-MZ": "mz", + "pt-PT": "pt", + "pt-ST": "st", + "qu-BO": "bo", + "qu-EC": "ec", + "qu-PE": "pe", + "ro-MD": "md", + "ro-RO": "ro", + "ru-BY": "by", + "ru-KG": "kg", + "ru-KZ": "kz", + "ru-RU": "ru", + "ru-UA": "ua", + "rw-RW": "rw", + "si-LK": "lk", + "sk-SK": "sk", + "sl-SI": "si", + "sq-AL": "al", + "sr-BA": "ba", + "sr-ME": "me", + "sr-RS": "rs", + "sv-FI": "fi", + "sv-SE": "se", + "sw-KE": "ke", + "sw-TZ": "tz", + "sw-UG": "ug", + "ta-LK": "lk", + "ta-SG": "sg", + "tg-TJ": "tj", + "th-TH": "th", + "ti-ER": "er", + "tk-TM": "tm", + "tr-CY": "cy", + "tr-TR": "tr", + "uk-UA": "ua", + "ur-PK": "pk", + "uz-UZ": "uz", + "vi-VN": "vn", + "wo-SN": "sn", + "yo-NG": "ng", + "zh-CN": "cn", + "zh-HK": "hk", + "zh-MO": "mo", + "zh-SG": "sg", + "zh-TW": "tw" + }, "supported_languages": [ "af", "am", @@ -231,8 +1011,398 @@ "all_locale": null, "custom": {}, "data_type": "supported_languages", - "languages": {}, - "regions": {}, + "languages": { + "af": "af", + "am": "am", + "ar": "ar", + "as": "as", + "az": "az", + "be": "be", + "bg": "bg", + "bn": "bn", + "bs": "bs", + "ca": "ca", + "chr": "chr", + "cs": "cs", + "cy": "cy", + "da": "da", + "de": "de", + "el": "el", + "en": "en", + "es": "es", + "et": "et", + "eu": "eu", + "fa": "fa", + "fi": "fi", + "fil": "fil", + "fr": "fr", + "ga": "ga", + "gd": "gd", + "gl": "gl", + "gu": "gu", + "ha": "ha", + "he": "he", + "hi": "hi", + "hr": "hr", + "hu": "hu", + "hy": "hy", + "id": "id", + "ig": "ig", + "is": "is", + "it": "it", + "ja": "ja", + "ka": "ka", + "kk": "kk", + "km": "km", + "kn": "kn", + "ko": "ko", + "kok": "kok", + "ku": "ku", + "ky": "ky", + "lb": "lb", + "lo": "lo", + "lt": "lt", + "lv": "lv", + "mi": "mi", + "mk": "mk", + "ml": "ml", + "mn": "MN", + "mr": "mr", + "ms": "ms", + "mt": "mt", + "nb": "nb", + "ne": "ne", + "nl": "nl", + "nn": "nn", + "or": "or", + "pa": "pa", + "pa_Arab": "pa-Arab", + "pl": "pl", + "pt": "pt", + "qu": "quz", + "ro": "ro", + "ru": "ru", + "rw": "rw", + "sd": "sd", + "si": "si", + "sk": "sk", + "sl": "sl", + "sq": "sq", + "sr": "sr", + "sr_Latn": "sr_latn", + "sv": "sv", + "sw": "sw", + "ta": "ta", + "te": "te", + "tg": "tg", + "th": "th", + "ti": "ti", + "tk": "tk", + "tr": "tr", + "tt": "tt", + "ug": "ug", + "uk": "uk", + "ur": "ur", + "uz": "uz", + "vi": "vi", + "wo": "wo", + "xh": "xh", + "yo": "yo", + "zh": "zh_Hans", + "zh_Hans": "zh_Hans", + "zh_Hant": "zh_Hant", + "zu": "zu" + }, + "regions": { + "am-ET": "et", + "ar-AE": "ae", + "ar-BH": "bh", + "ar-DJ": "dj", + "ar-DZ": "dz", + "ar-EG": "eg", + "ar-ER": "er", + "ar-IL": "il", + "ar-IQ": "iq", + "ar-JO": "jo", + "ar-KM": "km", + "ar-KW": "kw", + "ar-LB": "lb", + "ar-LY": "ly", + "ar-MA": "ma", + "ar-MR": "mr", + "ar-OM": "om", + "ar-PS": "ps", + "ar-QA": "qa", + "ar-SA": "sa", + "ar-SD": "sd", + "ar-SO": "so", + "ar-SY": "sy", + "ar-TD": "td", + "ar-TN": "tn", + "ar-YE": "ye", + "az-AZ": "az", + "be-BY": "by", + "bg-BG": "bg", + "bn-BD": "bd", + "bs-BA": "ba", + "ca-AD": "ad", + "cs-CZ": "cz", + "da-DK": "dk", + "de-AT": "at", + "de-BE": "be", + "de-CH": "ch", + "de-DE": "de", + "de-LI": "li", + "de-LU": "lu", + "el-CY": "cy", + "el-GR": "gr", + "en-AG": "ag", + "en-AI": "ai", + "en-AS": "as", + "en-AU": "au", + "en-BB": "bb", + "en-BI": "bi", + "en-BM": "bm", + "en-BS": "bs", + "en-BW": "bw", + "en-BZ": "bz", + "en-CA": "ca", + "en-CC": "cc", + "en-CK": "ck", + "en-CM": "cm", + "en-CX": "cx", + "en-DM": "dm", + "en-ER": "er", + "en-FJ": "fj", + "en-FK": "fk", + "en-FM": "fm", + "en-GB": "gb", + "en-GD": "gd", + "en-GG": "gg", + "en-GH": "gh", + "en-GI": "gi", + "en-GM": "gm", + "en-GU": "gu", + "en-GY": "gy", + "en-HK": "hk", + "en-IE": "ie", + "en-IN": "in", + "en-JE": "je", + "en-JM": "jm", + "en-KE": "ke", + "en-KI": "ki", + "en-KN": "kn", + "en-KY": "ky", + "en-LC": "lc", + "en-LR": "lr", + "en-LS": "ls", + "en-MG": "mg", + "en-MH": "mh", + "en-MP": "mp", + "en-MS": "ms", + "en-MT": "mt", + "en-MU": "mu", + "en-MW": "mw", + "en-NA": "na", + "en-NF": "nf", + "en-NG": "ng", + "en-NR": "nr", + "en-NU": "nu", + "en-NZ": "nz", + "en-PG": "pg", + "en-PH": "ph", + "en-PK": "pk", + "en-PN": "pn", + "en-PR": "pr", + "en-PW": "pw", + "en-RW": "rw", + "en-SB": "sb", + "en-SC": "sc", + "en-SD": "sd", + "en-SG": "sg", + "en-SH": "sh", + "en-SL": "sl", + "en-SS": "ss", + "en-SX": "sx", + "en-SZ": "sz", + "en-TC": "tc", + "en-TK": "tk", + "en-TO": "to", + "en-TT": "tt", + "en-TV": "tv", + "en-TZ": "tz", + "en-UG": "ug", + "en-US": "us", + "en-VC": "vc", + "en-VG": "vg", + "en-VI": "vi", + "en-VU": "vu", + "en-WS": "ws", + "en-ZA": "za", + "en-ZM": "zm", + "en-ZW": "zw", + "es-AR": "ar", + "es-BO": "bo", + "es-CL": "cl", + "es-CO": "co", + "es-CR": "cr", + "es-DO": "do", + "es-EC": "ec", + "es-ES": "es", + "es-GQ": "gq", + "es-GT": "gt", + "es-HN": "hn", + "es-MX": "mx", + "es-NI": "ni", + "es-PA": "pa", + "es-PE": "pe", + "es-PR": "pr", + "es-PY": "py", + "es-SV": "sv", + "es-UY": "uy", + "es-VE": "ve", + "et-EE": "ee", + "fa-AF": "af", + "fa-IR": "ir", + "fi-FI": "fi", + "fil-PH": "ph", + "fr-BE": "be", + "fr-BF": "bf", + "fr-BI": "bi", + "fr-BJ": "bj", + "fr-BL": "bl", + "fr-CA": "ca", + "fr-CD": "cd", + "fr-CF": "cf", + "fr-CG": "cg", + "fr-CH": "ch", + "fr-CI": "ci", + "fr-CM": "cm", + "fr-DJ": "dj", + "fr-DZ": "dz", + "fr-FR": "fr", + "fr-GA": "ga", + "fr-GF": "gf", + "fr-GN": "gn", + "fr-GP": "gp", + "fr-GQ": "gq", + "fr-HT": "ht", + "fr-KM": "km", + "fr-LU": "lu", + "fr-MA": "ma", + "fr-MC": "mc", + "fr-MF": "mf", + "fr-MG": "mg", + "fr-ML": "ml", + "fr-MQ": "mq", + "fr-MU": "mu", + "fr-NC": "nc", + "fr-NE": "ne", + "fr-PF": "pf", + "fr-PM": "pm", + "fr-RE": "re", + "fr-RW": "rw", + "fr-SC": "sc", + "fr-SN": "sn", + "fr-SY": "sy", + "fr-TD": "td", + "fr-TG": "tg", + "fr-TN": "tn", + "fr-VU": "vu", + "fr-WF": "wf", + "fr-YT": "yt", + "ga-IE": "ie", + "he-IL": "il", + "hi-IN": "in", + "hr-BA": "ba", + "hr-HR": "hr", + "hu-HU": "hu", + "hy-AM": "am", + "id-ID": "id", + "is-IS": "is", + "it-CH": "ch", + "it-IT": "it", + "it-SM": "sm", + "it-VA": "va", + "ja-JP": "jp", + "ka-GE": "ge", + "kk-KZ": "kz", + "km-KH": "kh", + "ko-KR": "kr", + "ky-KG": "kg", + "lb-LU": "lu", + "lo-LA": "la", + "lt-LT": "lt", + "lv-LV": "lv", + "mi-NZ": "nz", + "mk-MK": "mk", + "mn-MN": "mn", + "ms-BN": "bn", + "ms-MY": "my", + "ms-SG": "sg", + "mt-MT": "mt", + "nb-NO": "no", + "ne-NP": "np", + "nl-AW": "aw", + "nl-BE": "be", + "nl-CW": "cw", + "nl-NL": "nl", + "nl-SR": "sr", + "nl-SX": "sx", + "nn-NO": "no", + "pl-PL": "pl", + "pt-AO": "ao", + "pt-BR": "br", + "pt-CV": "cv", + "pt-GQ": "gq", + "pt-GW": "gw", + "pt-MO": "mo", + "pt-MZ": "mz", + "pt-PT": "pt", + "pt-ST": "st", + "qu-BO": "bo", + "qu-EC": "ec", + "qu-PE": "pe", + "ro-MD": "md", + "ro-RO": "ro", + "ru-BY": "by", + "ru-KG": "kg", + "ru-KZ": "kz", + "ru-RU": "ru", + "ru-UA": "ua", + "rw-RW": "rw", + "si-LK": "lk", + "sk-SK": "sk", + "sl-SI": "si", + "sq-AL": "al", + "sr-BA": "ba", + "sr-ME": "me", + "sr-RS": "rs", + "sv-FI": "fi", + "sv-SE": "se", + "sw-KE": "ke", + "sw-TZ": "tz", + "sw-UG": "ug", + "ta-LK": "lk", + "ta-SG": "sg", + "tg-TJ": "tj", + "th-TH": "th", + "ti-ER": "er", + "tk-TM": "tm", + "tr-CY": "cy", + "tr-TR": "tr", + "uk-UA": "ua", + "ur-PK": "pk", + "uz-UZ": "uz", + "vi-VN": "vn", + "wo-SN": "sn", + "yo-NG": "ng", + "zh-CN": "cn", + "zh-HK": "hk", + "zh-MO": "mo", + "zh-SG": "sg", + "zh-TW": "tw" + }, "supported_languages": [ "af", "am", @@ -345,8 +1515,398 @@ "all_locale": null, "custom": {}, "data_type": "supported_languages", - "languages": {}, - "regions": {}, + "languages": { + "af": "af", + "am": "am", + "ar": "ar", + "as": "as", + "az": "az", + "be": "be", + "bg": "bg", + "bn": "bn", + "bs": "bs", + "ca": "ca", + "chr": "chr", + "cs": "cs", + "cy": "cy", + "da": "da", + "de": "de", + "el": "el", + "en": "en", + "es": "es", + "et": "et", + "eu": "eu", + "fa": "fa", + "fi": "fi", + "fil": "fil", + "fr": "fr", + "ga": "ga", + "gd": "gd", + "gl": "gl", + "gu": "gu", + "ha": "ha", + "he": "he", + "hi": "hi", + "hr": "hr", + "hu": "hu", + "hy": "hy", + "id": "id", + "ig": "ig", + "is": "is", + "it": "it", + "ja": "ja", + "ka": "ka", + "kk": "kk", + "km": "km", + "kn": "kn", + "ko": "ko", + "kok": "kok", + "ku": "ku", + "ky": "ky", + "lb": "lb", + "lo": "lo", + "lt": "lt", + "lv": "lv", + "mi": "mi", + "mk": "mk", + "ml": "ml", + "mn": "MN", + "mr": "mr", + "ms": "ms", + "mt": "mt", + "nb": "nb", + "ne": "ne", + "nl": "nl", + "nn": "nn", + "or": "or", + "pa": "pa", + "pa_Arab": "pa-Arab", + "pl": "pl", + "pt": "pt", + "qu": "quz", + "ro": "ro", + "ru": "ru", + "rw": "rw", + "sd": "sd", + "si": "si", + "sk": "sk", + "sl": "sl", + "sq": "sq", + "sr": "sr", + "sr_Latn": "sr_latn", + "sv": "sv", + "sw": "sw", + "ta": "ta", + "te": "te", + "tg": "tg", + "th": "th", + "ti": "ti", + "tk": "tk", + "tr": "tr", + "tt": "tt", + "ug": "ug", + "uk": "uk", + "ur": "ur", + "uz": "uz", + "vi": "vi", + "wo": "wo", + "xh": "xh", + "yo": "yo", + "zh": "zh_Hans", + "zh_Hans": "zh_Hans", + "zh_Hant": "zh_Hant", + "zu": "zu" + }, + "regions": { + "am-ET": "et", + "ar-AE": "ae", + "ar-BH": "bh", + "ar-DJ": "dj", + "ar-DZ": "dz", + "ar-EG": "eg", + "ar-ER": "er", + "ar-IL": "il", + "ar-IQ": "iq", + "ar-JO": "jo", + "ar-KM": "km", + "ar-KW": "kw", + "ar-LB": "lb", + "ar-LY": "ly", + "ar-MA": "ma", + "ar-MR": "mr", + "ar-OM": "om", + "ar-PS": "ps", + "ar-QA": "qa", + "ar-SA": "sa", + "ar-SD": "sd", + "ar-SO": "so", + "ar-SY": "sy", + "ar-TD": "td", + "ar-TN": "tn", + "ar-YE": "ye", + "az-AZ": "az", + "be-BY": "by", + "bg-BG": "bg", + "bn-BD": "bd", + "bs-BA": "ba", + "ca-AD": "ad", + "cs-CZ": "cz", + "da-DK": "dk", + "de-AT": "at", + "de-BE": "be", + "de-CH": "ch", + "de-DE": "de", + "de-LI": "li", + "de-LU": "lu", + "el-CY": "cy", + "el-GR": "gr", + "en-AG": "ag", + "en-AI": "ai", + "en-AS": "as", + "en-AU": "au", + "en-BB": "bb", + "en-BI": "bi", + "en-BM": "bm", + "en-BS": "bs", + "en-BW": "bw", + "en-BZ": "bz", + "en-CA": "ca", + "en-CC": "cc", + "en-CK": "ck", + "en-CM": "cm", + "en-CX": "cx", + "en-DM": "dm", + "en-ER": "er", + "en-FJ": "fj", + "en-FK": "fk", + "en-FM": "fm", + "en-GB": "gb", + "en-GD": "gd", + "en-GG": "gg", + "en-GH": "gh", + "en-GI": "gi", + "en-GM": "gm", + "en-GU": "gu", + "en-GY": "gy", + "en-HK": "hk", + "en-IE": "ie", + "en-IN": "in", + "en-JE": "je", + "en-JM": "jm", + "en-KE": "ke", + "en-KI": "ki", + "en-KN": "kn", + "en-KY": "ky", + "en-LC": "lc", + "en-LR": "lr", + "en-LS": "ls", + "en-MG": "mg", + "en-MH": "mh", + "en-MP": "mp", + "en-MS": "ms", + "en-MT": "mt", + "en-MU": "mu", + "en-MW": "mw", + "en-NA": "na", + "en-NF": "nf", + "en-NG": "ng", + "en-NR": "nr", + "en-NU": "nu", + "en-NZ": "nz", + "en-PG": "pg", + "en-PH": "ph", + "en-PK": "pk", + "en-PN": "pn", + "en-PR": "pr", + "en-PW": "pw", + "en-RW": "rw", + "en-SB": "sb", + "en-SC": "sc", + "en-SD": "sd", + "en-SG": "sg", + "en-SH": "sh", + "en-SL": "sl", + "en-SS": "ss", + "en-SX": "sx", + "en-SZ": "sz", + "en-TC": "tc", + "en-TK": "tk", + "en-TO": "to", + "en-TT": "tt", + "en-TV": "tv", + "en-TZ": "tz", + "en-UG": "ug", + "en-US": "us", + "en-VC": "vc", + "en-VG": "vg", + "en-VI": "vi", + "en-VU": "vu", + "en-WS": "ws", + "en-ZA": "za", + "en-ZM": "zm", + "en-ZW": "zw", + "es-AR": "ar", + "es-BO": "bo", + "es-CL": "cl", + "es-CO": "co", + "es-CR": "cr", + "es-DO": "do", + "es-EC": "ec", + "es-ES": "es", + "es-GQ": "gq", + "es-GT": "gt", + "es-HN": "hn", + "es-MX": "mx", + "es-NI": "ni", + "es-PA": "pa", + "es-PE": "pe", + "es-PR": "pr", + "es-PY": "py", + "es-SV": "sv", + "es-UY": "uy", + "es-VE": "ve", + "et-EE": "ee", + "fa-AF": "af", + "fa-IR": "ir", + "fi-FI": "fi", + "fil-PH": "ph", + "fr-BE": "be", + "fr-BF": "bf", + "fr-BI": "bi", + "fr-BJ": "bj", + "fr-BL": "bl", + "fr-CA": "ca", + "fr-CD": "cd", + "fr-CF": "cf", + "fr-CG": "cg", + "fr-CH": "ch", + "fr-CI": "ci", + "fr-CM": "cm", + "fr-DJ": "dj", + "fr-DZ": "dz", + "fr-FR": "fr", + "fr-GA": "ga", + "fr-GF": "gf", + "fr-GN": "gn", + "fr-GP": "gp", + "fr-GQ": "gq", + "fr-HT": "ht", + "fr-KM": "km", + "fr-LU": "lu", + "fr-MA": "ma", + "fr-MC": "mc", + "fr-MF": "mf", + "fr-MG": "mg", + "fr-ML": "ml", + "fr-MQ": "mq", + "fr-MU": "mu", + "fr-NC": "nc", + "fr-NE": "ne", + "fr-PF": "pf", + "fr-PM": "pm", + "fr-RE": "re", + "fr-RW": "rw", + "fr-SC": "sc", + "fr-SN": "sn", + "fr-SY": "sy", + "fr-TD": "td", + "fr-TG": "tg", + "fr-TN": "tn", + "fr-VU": "vu", + "fr-WF": "wf", + "fr-YT": "yt", + "ga-IE": "ie", + "he-IL": "il", + "hi-IN": "in", + "hr-BA": "ba", + "hr-HR": "hr", + "hu-HU": "hu", + "hy-AM": "am", + "id-ID": "id", + "is-IS": "is", + "it-CH": "ch", + "it-IT": "it", + "it-SM": "sm", + "it-VA": "va", + "ja-JP": "jp", + "ka-GE": "ge", + "kk-KZ": "kz", + "km-KH": "kh", + "ko-KR": "kr", + "ky-KG": "kg", + "lb-LU": "lu", + "lo-LA": "la", + "lt-LT": "lt", + "lv-LV": "lv", + "mi-NZ": "nz", + "mk-MK": "mk", + "mn-MN": "mn", + "ms-BN": "bn", + "ms-MY": "my", + "ms-SG": "sg", + "mt-MT": "mt", + "nb-NO": "no", + "ne-NP": "np", + "nl-AW": "aw", + "nl-BE": "be", + "nl-CW": "cw", + "nl-NL": "nl", + "nl-SR": "sr", + "nl-SX": "sx", + "nn-NO": "no", + "pl-PL": "pl", + "pt-AO": "ao", + "pt-BR": "br", + "pt-CV": "cv", + "pt-GQ": "gq", + "pt-GW": "gw", + "pt-MO": "mo", + "pt-MZ": "mz", + "pt-PT": "pt", + "pt-ST": "st", + "qu-BO": "bo", + "qu-EC": "ec", + "qu-PE": "pe", + "ro-MD": "md", + "ro-RO": "ro", + "ru-BY": "by", + "ru-KG": "kg", + "ru-KZ": "kz", + "ru-RU": "ru", + "ru-UA": "ua", + "rw-RW": "rw", + "si-LK": "lk", + "sk-SK": "sk", + "sl-SI": "si", + "sq-AL": "al", + "sr-BA": "ba", + "sr-ME": "me", + "sr-RS": "rs", + "sv-FI": "fi", + "sv-SE": "se", + "sw-KE": "ke", + "sw-TZ": "tz", + "sw-UG": "ug", + "ta-LK": "lk", + "ta-SG": "sg", + "tg-TJ": "tj", + "th-TH": "th", + "ti-ER": "er", + "tk-TM": "tm", + "tr-CY": "cy", + "tr-TR": "tr", + "uk-UA": "ua", + "ur-PK": "pk", + "uz-UZ": "uz", + "vi-VN": "vn", + "wo-SN": "sn", + "yo-NG": "ng", + "zh-CN": "cn", + "zh-HK": "hk", + "zh-MO": "mo", + "zh-SG": "sg", + "zh-TW": "tw" + }, "supported_languages": [ "af", "am", diff --git a/searx/engines/bing.py b/searx/engines/bing.py index 783c0056a..81b051797 100644 --- a/searx/engines/bing.py +++ b/searx/engines/bing.py @@ -12,6 +12,10 @@ from lxml import html from searx.utils import eval_xpath, extract_text, eval_xpath_list, match_language, eval_xpath_getindex from searx.network import multi_requests, Request +from searx.enginelib.traits import EngineTraits + +traits: EngineTraits + about = { "website": 'https://www.bing.com', "wikidata_id": 'Q182496', @@ -181,3 +185,96 @@ def _fetch_supported_languages(resp): lang_tags.add(tag) return list(lang_tags) + + +def fetch_traits(engine_traits: EngineTraits): + """Fetch languages and regions from bing.""" + + # pylint: disable=import-outside-toplevel, disable=too-many-branches, + # pylint: disable=too-many-locals, too-many-statements + + engine_traits.data_type = 'supported_languages' # deprecated + + import babel + import babel.languages + from searx import network + from searx.locales import get_offical_locales, language_tag, region_tag + from searx.utils import gen_useragent + + headers = { + 'User-Agent': gen_useragent(), + 'Accept-Language': "en-US,en;q=0.5", # bing needs to set the English language + } + resp = network.get('https://www.bing.com/account/general', headers=headers) + + if not resp.ok: + print("ERROR: response from peertube is not OK.") + + dom = html.fromstring(resp.text) + + # Selector to get items from "Display language" + + lang_map = { + 'prs': 'fa', # Persian + 'pt_BR': 'pt', # Portuguese (Brasil) + 'pt_PT': 'pt', # Portuguese (Portugal) + 'ca-ES-VALENCIA': 'ca', # Catalan (Spain, Valencian) + } + + unknow_langs = [ + 'quc', # K'iche' + 'nso', # Sesotho sa Leboa + 'tn', # Setswana + ] + + for div in eval_xpath(dom, '//div[@id="limit-languages"]//input/..'): + + eng_lang = eval_xpath(div, './/input/@value')[0] + if eng_lang in unknow_langs: + continue + + eng_lang = lang_map.get(eng_lang, eng_lang) + label = extract_text(eval_xpath(div, './/label')) + + # The 'language:xx' query string in the request function (above) does + # only support the language codes from the "Display languages" list. + # Examples of items from the "Display languages" not sopported in the + # query string: zh_Hans --> zh / sr_latn --> sr + # + # eng_lang = eng_lang.split('_')[0] + + try: + sxng_tag = language_tag(babel.Locale.parse(eng_lang.replace('-', '_'), sep='_')) + except babel.UnknownLocaleError: + print("ERROR: %s (%s) is unknown by babel" % (label, eng_lang)) + continue + + conflict = engine_traits.languages.get(sxng_tag) + if conflict: + if conflict != eng_lang: + print("CONFLICT: babel %s --> %s, %s" % (sxng_tag, conflict, eng_lang)) + continue + engine_traits.languages[sxng_tag] = eng_lang + + engine_traits.languages['zh'] = 'zh_Hans' + + # regiones + + for a in eval_xpath(dom, '//div[@id="region-section-content"]//li/a'): + href = eval_xpath(a, './/@href')[0] + # lang_name = extract_text(a) + query = urlparse(href)[4] + query = parse_qs(query, keep_blank_values=True) + cc = query.get('cc')[0] # pylint:disable=invalid-name + if cc == 'clear': + continue + + # Assert babel supports this locales + sxng_locales = get_offical_locales(cc.upper(), engine_traits.languages.keys()) + + if not sxng_locales: + # print("ERROR: can't map from bing country %s (%s) to a babel region." % (a.text_content().strip(), cc)) + continue + + for sxng_locale in sxng_locales: + engine_traits.regions[region_tag(sxng_locale)] = cc diff --git a/searx/engines/bing_images.py b/searx/engines/bing_images.py index 107ce3cff..19f3ad01a 100644 --- a/searx/engines/bing_images.py +++ b/searx/engines/bing_images.py @@ -13,6 +13,7 @@ from searx.utils import match_language from searx.engines.bing import language_aliases from searx.engines.bing import ( # pylint: disable=unused-import _fetch_supported_languages, + fetch_traits, supported_languages_url, ) diff --git a/searx/engines/bing_news.py b/searx/engines/bing_news.py index 7eea17bb4..8a5f70259 100644 --- a/searx/engines/bing_news.py +++ b/searx/engines/bing_news.py @@ -17,6 +17,7 @@ from searx.utils import match_language, eval_xpath_getindex from searx.engines.bing import ( # pylint: disable=unused-import language_aliases, _fetch_supported_languages, + fetch_traits, supported_languages_url, ) diff --git a/searx/engines/bing_videos.py b/searx/engines/bing_videos.py index 85071de21..4946eef64 100644 --- a/searx/engines/bing_videos.py +++ b/searx/engines/bing_videos.py @@ -14,6 +14,7 @@ from searx.engines.bing import language_aliases from searx.engines.bing import ( # pylint: disable=unused-import _fetch_supported_languages, + fetch_traits, supported_languages_url, )