Locales¶
SearXNG’s locale data¶
The variables RTL_LOCALES and LOCALE_NAMES are loaded from
git://searx/data/locales.json / see locales_initialize and
update_locales.py.
Hint
Whenever the value of ADDITIONAL_TRANSLATIONS or
LOCALE_BEST_MATCH is modified, the
git://searx/data/locales.json needs to be rebuild:
./manage data.locales
SearXNG’s locale codes¶
List of SearXNG’s locale codes used for the search language/region.
Hint
Don’t modify this file, this file is generated by:
./manage data.traits
- searx.sxng_locales.sxng_locales¶
- A list of five-digit tuples: - SearXNG’s internal locale tag (a language or region tag) 
- Name of the language ( - babel.core.Locale.get_language_name)
- For region tags the name of the region ( - babel.core.Locale.get_territory_name). Empty string for language tags.
- English language name (from - babel.core.Locale.english_name)
- Unicode flag (emoji) that fits to SearXNG’s internal region tag. Languages are represented by a globe (🌐) 
 - ('en', 'English', '', 'English', '🌐'), ('en-CA', 'English', 'Canada', 'English', '🇨🇦'), ('en-US', 'English', 'United States', 'English', '🇺🇸'), .. ('fr', 'Français', '', 'French', '🌐'), ('fr-BE', 'Français', 'Belgique', 'French', '🇧🇪'), ('fr-CA', 'Français', 'Canada', 'French', '🇨🇦'), 
SearXNG’s locale implementations¶
- searx.locales.LOCALE_NAMES¶
- Mapping of locales and their description. Locales e.g. ‘fr’ or ‘pt-BR’ (see - locales_initialize).
- searx.locales.RTL_LOCALES: set[str] = {'ar', 'fa-IR', 'he'}¶
- List of Right-To-Left locales e.g. ‘he’ or ‘fa-IR’ (see - locales_initialize).
- searx.locales.ADDITIONAL_TRANSLATIONS = {'dv': 'ދިވެހި (Dhivehi)', 'oc': 'Occitan', 'pap': 'Papiamento', 'szl': 'Ślōnski (Silesian)'}¶
- Additional languages SearXNG has translations for but not supported by python-babel (see - locales_initialize).
- searx.locales.LOCALE_BEST_MATCH = {'dv': 'si', 'nl-BE': 'nl', 'oc': 'fr-FR', 'pap': 'pt-BR', 'szl': 'pl', 'zh-HK': 'zh-Hant-TW'}¶
- Map a locale we do not have a translations for to a locale we have a translation for. By example: use Taiwan version of the translation for Hong Kong. 
- searx.locales.get_translations()[source]¶
- Monkey patch of - flask_babel.get_translations
- searx.locales.get_translation_locales() list[str][source]¶
- Returns the list of translation locales (underscore). The list is generated from the translation folders in git://searx/translations 
- searx.locales.locales_initialize()[source]¶
- Initialize locales environment of the SearXNG session. - monkey patch - flask_babel.get_translationsby- get_translations
- init global names - LOCALE_NAMES,- RTL_LOCALES
 
- searx.locales.region_tag(locale: Locale) str[source]¶
- Returns SearXNG’s region tag from the locale (e.g. zh-TW , en-US). 
- searx.locales.language_tag(locale: Locale) str[source]¶
- Returns SearXNG’s language tag from the locale and if exits, the tag includes the script name (e.g. en, zh_Hant). 
- searx.locales.get_locale(locale_tag: str) Locale | None[source]¶
- Returns a - babel.Localeobject parsed from argument- locale_tag
- searx.locales.get_official_locales(territory: str, languages=None, regional: bool = False, de_facto: bool = True) set[Locale][source]¶
- Returns a list of - babel.Localewith languages from- babel.languages.get_official_languages.- Parameters:
- territory – The territory (country or region) code. 
- languages – A list of language codes the languages from - babel.languages.get_official_languagesshould be in (intersection). If this argument is- None, all official languages in this territory are used.
- regional – If the regional flag is set, then languages which are regionally official are also returned. 
- de_facto – If the de_facto flag is set to False, then languages which are “de facto” official are not returned. 
 
 
- searx.locales.get_engine_locale(searxng_locale, engine_locales, default=None)[source]¶
- Return engine’s language (aka locale) string that best fits to argument - searxng_locale.- Argument - engine_localesis a python dict that maps SearXNG locales to corresponding engine locales:- <engine>: { # SearXNG string : engine-string 'ca-ES' : 'ca_ES', 'fr-BE' : 'fr_BE', 'fr-CA' : 'fr_CA', 'fr-CH' : 'fr_CH', 'fr' : 'fr_FR', ... 'pl-PL' : 'pl_PL', 'pt-PT' : 'pt_PT' .. 'zh' : 'zh' 'zh_Hans' : 'zh' 'zh_Hant' : 'zh_TW' } - Hint - The SearXNG locale string has to be known by babel! - If there is no direct 1:1 mapping, this functions tries to narrow down engine’s language (locale). If no value can be determined by these approximation attempts the - defaultvalue is returned.- Assumptions: - When user select a language the results should be optimized according to the selected language. 
- When user select a language and a territory the results should be optimized with first priority on territory and second on language. 
 - First approximation rule (by territory): - When the user selects a locale with territory (and a language), the territory has priority over the language. If any of the official languages in the territory is supported by the engine ( - engine_locales) it will be used.- Second approximation rule (by language): - If “First approximation rule” brings no result or the user selects only a language without a territory. Check in which territories the language has an official status and if one of these territories is supported by the engine. 
- searx.locales.match_locale(searxng_locale: str, locale_tag_list: list[str], fallback: str | None = None) str | None[source]¶
- Return tag from - locale_tag_listthat best fits to- searxng_locale.- Parameters:
 - The rules to find a match are implemented in - get_engine_locale, the- engine_localesis build up by- build_engine_locales.- Hint - The SearXNG locale string and the members of - locale_tag_listhas to be known by babel! The- ADDITIONAL_TRANSLATIONSare used in the UI and are not known by babel –> will be ignored.
- searx.locales.build_engine_locales(tag_list: list[str])[source]¶
- From a list of locale tags a dictionary is build that can be passed by argument - engine_localesto- get_engine_locale. This function is mainly used by- match_localeand is similar to what the- fetch_traits(..)function of engines do.- If there are territory codes in the - tag_listthat have a script code additional keys are added to the returned dictionary.- >>> import locales >>> engine_locales = locales.build_engine_locales(['en', 'en-US', 'zh', 'zh-CN', 'zh-TW']) >>> engine_locales { 'en': 'en', 'en-US': 'en-US', 'zh': 'zh', 'zh-CN': 'zh-CN', 'zh_Hans': 'zh-CN', 'zh-TW': 'zh-TW', 'zh_Hant': 'zh-TW' } >>> get_engine_locale('zh-Hans', engine_locales) 'zh-CN' - This function is a good example to understand the language/region model of SearXNG: - SearXNG only distinguishes between search languages and search regions, by adding the script-tags, languages with script-tags can be assigned to the regions that SearXNG supports.