forked from Ponysearch/Ponysearch
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
3e9e39febb
38 changed files with 523 additions and 321 deletions
|
@ -1,4 +1,4 @@
|
|||
FROM alpine:3.19
|
||||
FROM alpine:3.20
|
||||
ENTRYPOINT ["/sbin/tini","--","/usr/local/searxng/dockerfiles/docker-entrypoint.sh"]
|
||||
EXPOSE 8080
|
||||
VOLUME /etc/searxng
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
.. _searxng settings.yml:
|
||||
|
||||
========
|
||||
Settings
|
||||
========
|
||||
|
|
13
docs/dev/engines/online/alpinelinux.rst
Normal file
13
docs/dev/engines/online/alpinelinux.rst
Normal file
|
@ -0,0 +1,13 @@
|
|||
.. _alpinelinux engine:
|
||||
|
||||
=====================
|
||||
Alpine Linux Packages
|
||||
=====================
|
||||
|
||||
.. contents::
|
||||
:depth: 2
|
||||
:local:
|
||||
:backlinks: entry
|
||||
|
||||
.. automodule:: searx.engines.alpinelinux
|
||||
:members:
|
8
docs/src/searx.settings.rst
Normal file
8
docs/src/searx.settings.rst
Normal file
|
@ -0,0 +1,8 @@
|
|||
.. _searx.settings_loader:
|
||||
|
||||
===============
|
||||
Settings Loader
|
||||
===============
|
||||
|
||||
.. automodule:: searx.settings_loader
|
||||
:members:
|
4
manage
4
manage
|
@ -54,7 +54,9 @@ fi
|
|||
|
||||
YAMLLINT_FILES=()
|
||||
while IFS= read -r line; do
|
||||
YAMLLINT_FILES+=("$line")
|
||||
if [ "$line" != "tests/unit/settings/syntaxerror_settings.yml" ]; then
|
||||
YAMLLINT_FILES+=("$line")
|
||||
fi
|
||||
done <<< "$(git ls-files './tests/*.yml' './searx/*.yml' './utils/templates/etc/searxng/*.yml')"
|
||||
|
||||
RST_FILES=(
|
||||
|
|
83
searx/engines/alpinelinux.py
Normal file
83
searx/engines/alpinelinux.py
Normal file
|
@ -0,0 +1,83 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""`Alpine Linux binary packages`_. `Alpine Linux`_ is a Linux-based operation
|
||||
system designed to be small, simple and secure. Contrary to many other Linux
|
||||
distributions, it uses musl, BusyBox and OpenRC. Alpine is mostly used on
|
||||
servers and for Docker images.
|
||||
|
||||
.. _Alpine Linux binary packages: https://pkgs.alpinelinux.org
|
||||
.. _Alpine Linux: https://www.alpinelinux.org
|
||||
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
from urllib.parse import urlencode
|
||||
from lxml import html
|
||||
from dateutil import parser
|
||||
|
||||
from searx.utils import eval_xpath, eval_xpath_list, extract_text
|
||||
|
||||
about = {
|
||||
'website': 'https://www.alpinelinux.org',
|
||||
'wikidata_id': 'Q4033826',
|
||||
'use_official_api': False,
|
||||
'official_api_documentation': None,
|
||||
'require_api_key': False,
|
||||
'results': 'HTML',
|
||||
}
|
||||
paging = True
|
||||
categories = ['packages', 'it']
|
||||
|
||||
base_url = "https://pkgs.alpinelinux.org"
|
||||
alpine_arch = 'x86_64'
|
||||
"""Kernel architecture: ``x86_64``, ``x86``, ``aarch64``, ``armhf``,
|
||||
``ppc64le``, ``s390x``, ``armv7`` or ``riscv64``"""
|
||||
|
||||
ARCH_RE = re.compile("x86_64|x86|aarch64|armhf|ppc64le|s390x|armv7|riscv64")
|
||||
"""Regular expression to match supported architectures in the query string."""
|
||||
|
||||
|
||||
def request(query, params):
|
||||
query_arch = ARCH_RE.search(query)
|
||||
if query_arch:
|
||||
query_arch = query_arch.group(0)
|
||||
query = query.replace(query_arch, '').strip()
|
||||
|
||||
args = {
|
||||
# use wildcards to match more than just packages with the exact same
|
||||
# name as the query
|
||||
'name': f"*{query}*",
|
||||
'page': params['pageno'],
|
||||
'arch': query_arch or alpine_arch,
|
||||
}
|
||||
params['url'] = f"{base_url}/packages?{urlencode(args)}"
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
doc = html.fromstring(resp.text)
|
||||
for result in eval_xpath_list(doc, "//table/tbody/tr"):
|
||||
|
||||
if len(result.xpath("./td")) < 9:
|
||||
# skip non valid entries in the result table
|
||||
# e.g the "No item found..." message
|
||||
continue
|
||||
|
||||
results.append(
|
||||
{
|
||||
'template': 'packages.html',
|
||||
'url': base_url + extract_text(eval_xpath(result, './td[contains(@class, "package")]/a/@href')),
|
||||
'title': extract_text(eval_xpath(result, './td[contains(@class, "package")]')),
|
||||
'package_name': extract_text(eval_xpath(result, './td[contains(@class, "package")]')),
|
||||
'publishedDate': parser.parse(extract_text(eval_xpath(result, './td[contains(@class, "bdate")]'))),
|
||||
'version': extract_text(eval_xpath(result, './td[contains(@class, "version")]')),
|
||||
'homepage': extract_text(eval_xpath(result, './td[contains(@class, "url")]/a/@href')),
|
||||
'maintainer': extract_text(eval_xpath(result, './td[contains(@class, "maintainer")]')),
|
||||
'license_name': extract_text(eval_xpath(result, './td[contains(@class, "license")]')),
|
||||
'tags': [extract_text(eval_xpath(result, './td[contains(@class, "repo")]'))],
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
|
@ -128,7 +128,14 @@ def request(query: str, params: dict):
|
|||
|
||||
|
||||
def extract_result(dom_result: list[html.HtmlElement]):
|
||||
[a_elem, h3_elem, p_elem] = dom_result
|
||||
# Infoboxes sometimes appear in the beginning and will have a length of 0
|
||||
if len(dom_result) == 3:
|
||||
[a_elem, h3_elem, p_elem] = dom_result
|
||||
elif len(dom_result) == 4:
|
||||
[_, a_elem, h3_elem, p_elem] = dom_result
|
||||
else:
|
||||
return None
|
||||
|
||||
return {
|
||||
'url': extract_text(a_elem.text),
|
||||
'title': extract_text(h3_elem),
|
||||
|
@ -139,9 +146,9 @@ def extract_result(dom_result: list[html.HtmlElement]):
|
|||
def extract_results(search_results: html.HtmlElement):
|
||||
for search_result in search_results:
|
||||
dom_result = eval_xpath_list(search_result, 'div/div/*')
|
||||
# sometimes an info box pops up, will need to filter that out
|
||||
if len(dom_result) == 3:
|
||||
yield extract_result(dom_result)
|
||||
result = extract_result(dom_result)
|
||||
if result is not None:
|
||||
yield result
|
||||
|
||||
|
||||
def response(resp: Response):
|
||||
|
|
|
@ -11,16 +11,12 @@ from typing import Any, Dict
|
|||
import httpx
|
||||
from httpx_socks import AsyncProxyTransport
|
||||
from python_socks import parse_proxy_url, ProxyConnectionError, ProxyTimeoutError, ProxyError
|
||||
import uvloop
|
||||
|
||||
from searx import logger
|
||||
|
||||
# Optional uvloop (support Python 3.6)
|
||||
try:
|
||||
import uvloop
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
uvloop.install()
|
||||
|
||||
uvloop.install()
|
||||
|
||||
|
||||
logger = logger.getChild('searx.network.client')
|
||||
|
|
|
@ -96,7 +96,7 @@ from flask_babel import gettext
|
|||
|
||||
from searx import settings
|
||||
from searx.plugins import logger
|
||||
from searx.settings_loader import get_yaml_file
|
||||
from searx.settings_loader import get_yaml_cfg
|
||||
|
||||
name = gettext('Hostnames plugin')
|
||||
description = gettext('Rewrite hostnames, remove results or prioritize them based on the hostname')
|
||||
|
@ -118,7 +118,7 @@ def _load_regular_expressions(settings_key):
|
|||
|
||||
# load external file with configuration
|
||||
if isinstance(setting_value, str):
|
||||
setting_value = get_yaml_file(setting_value)
|
||||
setting_value = get_yaml_cfg(setting_value)
|
||||
|
||||
if isinstance(setting_value, list):
|
||||
return {re.compile(r) for r in setting_value}
|
||||
|
@ -163,10 +163,10 @@ def _matches_parsed_url(result, pattern):
|
|||
def on_result(_request, _search, result):
|
||||
for pattern, replacement in replacements.items():
|
||||
if _matches_parsed_url(result, pattern):
|
||||
logger.debug(result['url'])
|
||||
# logger.debug(result['url'])
|
||||
result[parsed] = result[parsed]._replace(netloc=pattern.sub(replacement, result[parsed].netloc))
|
||||
result['url'] = urlunparse(result[parsed])
|
||||
logger.debug(result['url'])
|
||||
# logger.debug(result['url'])
|
||||
|
||||
for url_field in _url_fields:
|
||||
if not result.get(url_field):
|
||||
|
|
|
@ -325,6 +325,11 @@ engines:
|
|||
shortcut: 9g
|
||||
disabled: true
|
||||
|
||||
- name: alpine linux packages
|
||||
engine: alpinelinux
|
||||
disabled: true
|
||||
shortcut: alp
|
||||
|
||||
- name: annas archive
|
||||
engine: annas_archive
|
||||
disabled: true
|
||||
|
|
|
@ -1,68 +1,116 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# pylint: disable=missing-module-docstring, too-many-branches
|
||||
"""Implementations for loading configurations from YAML files. This essentially
|
||||
includes the configuration of the (:ref:`SearXNG appl <searxng settings.yml>`)
|
||||
server. The default configuration for the application server is loaded from the
|
||||
:origin:`DEFAULT_SETTINGS_FILE <searx/settings.yml>`. This default
|
||||
configuration can be completely replaced or :ref:`customized individually
|
||||
<use_default_settings.yml>` and the ``SEARXNG_SETTINGS_PATH`` environment
|
||||
variable can be used to set the location from which the local customizations are
|
||||
to be loaded. The rules used for this can be found in the
|
||||
:py:obj:`get_user_cfg_folder` function.
|
||||
|
||||
from typing import Optional
|
||||
from os import environ
|
||||
from os.path import dirname, join, abspath, isfile
|
||||
- By default, local configurations are expected in folder ``/etc/searxng`` from
|
||||
where applications can load them with the :py:obj:`get_yaml_cfg` function.
|
||||
|
||||
- By default, customized :ref:`SearXNG appl <searxng settings.yml>` settings are
|
||||
expected in a file named ``settings.yml``.
|
||||
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os.path
|
||||
from collections.abc import Mapping
|
||||
from itertools import filterfalse
|
||||
from pathlib import Path
|
||||
|
||||
import yaml
|
||||
|
||||
from searx.exceptions import SearxSettingsException
|
||||
|
||||
searx_dir = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
searx_dir = abspath(dirname(__file__))
|
||||
SETTINGS_YAML = Path("settings.yml")
|
||||
DEFAULT_SETTINGS_FILE = Path(searx_dir) / SETTINGS_YAML
|
||||
"""The :origin:`searx/settings.yml` file with all the default settings."""
|
||||
|
||||
|
||||
def existing_filename_or_none(file_name: str) -> Optional[str]:
|
||||
if isfile(file_name):
|
||||
return file_name
|
||||
return None
|
||||
|
||||
|
||||
def load_yaml(file_name):
|
||||
def load_yaml(file_name: str | Path):
|
||||
"""Load YAML config from a file."""
|
||||
try:
|
||||
with open(file_name, 'r', encoding='utf-8') as settings_yaml:
|
||||
return yaml.safe_load(settings_yaml)
|
||||
return yaml.safe_load(settings_yaml) or {}
|
||||
except IOError as e:
|
||||
raise SearxSettingsException(e, file_name) from e
|
||||
raise SearxSettingsException(e, str(file_name)) from e
|
||||
except yaml.YAMLError as e:
|
||||
raise SearxSettingsException(e, file_name) from e
|
||||
raise SearxSettingsException(e, str(file_name)) from e
|
||||
|
||||
|
||||
def get_yaml_file(file_name):
|
||||
path = existing_filename_or_none(join(searx_dir, file_name))
|
||||
if path is None:
|
||||
raise FileNotFoundError(f"File {file_name} does not exist!")
|
||||
def get_yaml_cfg(file_name: str | Path) -> dict:
|
||||
"""Shortcut to load a YAML config from a file, located in the
|
||||
|
||||
return load_yaml(path)
|
||||
|
||||
|
||||
def get_default_settings_path():
|
||||
return existing_filename_or_none(join(searx_dir, 'settings.yml'))
|
||||
|
||||
|
||||
def get_user_settings_path() -> Optional[str]:
|
||||
"""Get an user settings file.
|
||||
By descending priority:
|
||||
1. ``environ['SEARXNG_SETTINGS_PATH']``
|
||||
2. ``/etc/searxng/settings.yml`` except if ``SEARXNG_DISABLE_ETC_SETTINGS`` is ``true`` or ``1``
|
||||
3. ``None``
|
||||
- :py:obj:`get_user_cfg_folder` or
|
||||
- in the ``searx`` folder of the SearXNG installation
|
||||
"""
|
||||
|
||||
# check the environment variable SEARXNG_SETTINGS_PATH
|
||||
# if the environment variable is defined, this is the last check
|
||||
if 'SEARXNG_SETTINGS_PATH' in environ:
|
||||
return existing_filename_or_none(environ['SEARXNG_SETTINGS_PATH'])
|
||||
folder = get_user_cfg_folder() or Path(searx_dir)
|
||||
fname = folder / file_name
|
||||
if not fname.is_file():
|
||||
raise FileNotFoundError(f"File {fname} does not exist!")
|
||||
|
||||
# if SEARXNG_DISABLE_ETC_SETTINGS don't look any further
|
||||
if environ.get('SEARXNG_DISABLE_ETC_SETTINGS', '').lower() in ('1', 'true'):
|
||||
return None
|
||||
return load_yaml(fname)
|
||||
|
||||
# check /etc/searxng/settings.yml
|
||||
# (continue with other locations if the file is not found)
|
||||
return existing_filename_or_none('/etc/searxng/settings.yml')
|
||||
|
||||
def get_user_cfg_folder() -> Path | None:
|
||||
"""Returns folder where the local configurations are located.
|
||||
|
||||
1. If the ``SEARXNG_SETTINGS_PATH`` environment is set and points to a
|
||||
folder (e.g. ``/etc/mysxng/``), all local configurations are expected in
|
||||
this folder. The settings of the :ref:`SearXNG appl <searxng
|
||||
settings.yml>` then expected in ``settings.yml``
|
||||
(e.g. ``/etc/mysxng/settings.yml``).
|
||||
|
||||
2. If the ``SEARXNG_SETTINGS_PATH`` environment is set and points to a file
|
||||
(e.g. ``/etc/mysxng/myinstance.yml``), this file contains the settings of
|
||||
the :ref:`SearXNG appl <searxng settings.yml>` and the folder
|
||||
(e.g. ``/etc/mysxng/``) is used for all other configurations.
|
||||
|
||||
This type (``SEARXNG_SETTINGS_PATH`` points to a file) is suitable for
|
||||
use cases in which different profiles of the :ref:`SearXNG appl <searxng
|
||||
settings.yml>` are to be managed, such as in test scenarios.
|
||||
|
||||
3. If folder ``/etc/searxng`` exists, it is used.
|
||||
|
||||
In case none of the above path exists, ``None`` is returned. In case of
|
||||
environment ``SEARXNG_SETTINGS_PATH`` is set, but the (folder or file) does
|
||||
not exists, a :py:obj:`EnvironmentError` is raised.
|
||||
|
||||
"""
|
||||
|
||||
folder = None
|
||||
settings_path = os.environ.get("SEARXNG_SETTINGS_PATH")
|
||||
|
||||
# Disable default /etc/searxng is intended exclusively for internal testing purposes
|
||||
# and is therefore not documented!
|
||||
disable_etc = os.environ.get('SEARXNG_DISABLE_ETC_SETTINGS', '').lower() in ('1', 'true')
|
||||
|
||||
if settings_path:
|
||||
# rule 1. and 2.
|
||||
settings_path = Path(settings_path)
|
||||
if settings_path.is_dir():
|
||||
folder = settings_path
|
||||
elif settings_path.is_file():
|
||||
folder = settings_path.parent
|
||||
else:
|
||||
raise EnvironmentError(1, f"{settings_path} not exists!", settings_path)
|
||||
|
||||
if not folder and not disable_etc:
|
||||
# default: rule 3.
|
||||
folder = Path("/etc/searxng")
|
||||
if not folder.is_dir():
|
||||
folder = None
|
||||
|
||||
return folder
|
||||
|
||||
|
||||
def update_dict(default_dict, user_dict):
|
||||
|
@ -74,7 +122,9 @@ def update_dict(default_dict, user_dict):
|
|||
return default_dict
|
||||
|
||||
|
||||
def update_settings(default_settings, user_settings):
|
||||
def update_settings(default_settings: dict, user_settings: dict):
|
||||
# pylint: disable=too-many-branches
|
||||
|
||||
# merge everything except the engines
|
||||
for k, v in user_settings.items():
|
||||
if k not in ('use_default_settings', 'engines'):
|
||||
|
@ -124,6 +174,7 @@ def update_settings(default_settings, user_settings):
|
|||
|
||||
|
||||
def is_use_default_settings(user_settings):
|
||||
|
||||
use_default_settings = user_settings.get('use_default_settings')
|
||||
if use_default_settings is True:
|
||||
return True
|
||||
|
@ -134,25 +185,37 @@ def is_use_default_settings(user_settings):
|
|||
raise ValueError('Invalid value for use_default_settings')
|
||||
|
||||
|
||||
def load_settings(load_user_settings=True):
|
||||
default_settings_path = get_default_settings_path()
|
||||
user_settings_path = get_user_settings_path()
|
||||
if user_settings_path is None or not load_user_settings:
|
||||
# no user settings
|
||||
return (load_yaml(default_settings_path), 'load the default settings from {}'.format(default_settings_path))
|
||||
def load_settings(load_user_settings=True) -> tuple[dict, str]:
|
||||
"""Function for loading the settings of the SearXNG application
|
||||
(:ref:`settings.yml <searxng settings.yml>`)."""
|
||||
|
||||
# user settings
|
||||
user_settings = load_yaml(user_settings_path)
|
||||
if is_use_default_settings(user_settings):
|
||||
msg = f"load the default settings from {DEFAULT_SETTINGS_FILE}"
|
||||
cfg = load_yaml(DEFAULT_SETTINGS_FILE)
|
||||
cfg_folder = get_user_cfg_folder()
|
||||
|
||||
if not load_user_settings or not cfg_folder:
|
||||
return cfg, msg
|
||||
|
||||
settings_yml = os.environ.get("SEARXNG_SETTINGS_PATH")
|
||||
if settings_yml and Path(settings_yml).is_file():
|
||||
# see get_user_cfg_folder() --> SEARXNG_SETTINGS_PATH points to a file
|
||||
settings_yml = Path(settings_yml).name
|
||||
else:
|
||||
# see get_user_cfg_folder() --> SEARXNG_SETTINGS_PATH points to a folder
|
||||
settings_yml = SETTINGS_YAML
|
||||
|
||||
cfg_file = cfg_folder / settings_yml
|
||||
if not cfg_file.exists():
|
||||
return cfg, msg
|
||||
|
||||
msg = f"load the user settings from {cfg_file}"
|
||||
user_cfg = load_yaml(cfg_file)
|
||||
|
||||
if is_use_default_settings(user_cfg):
|
||||
# the user settings are merged with the default configuration
|
||||
default_settings = load_yaml(default_settings_path)
|
||||
update_settings(default_settings, user_settings)
|
||||
return (
|
||||
default_settings,
|
||||
'merge the default settings ( {} ) and the user settings ( {} )'.format(
|
||||
default_settings_path, user_settings_path
|
||||
),
|
||||
)
|
||||
msg = f"merge the default settings ( {DEFAULT_SETTINGS_FILE} ) and the user settings ( {cfg_file} )"
|
||||
update_settings(cfg, user_cfg)
|
||||
else:
|
||||
cfg = user_cfg
|
||||
|
||||
# the user settings, fully replace the default configuration
|
||||
return (user_settings, 'load the user settings from {}'.format(user_settings_path))
|
||||
return cfg, msg
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -245,6 +245,7 @@ article[data-vim-selected].category-social {
|
|||
.url_o1 {
|
||||
white-space: nowrap;
|
||||
flex-shrink: 1;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
|
||||
.url_o1::after {
|
||||
|
@ -260,6 +261,7 @@ article[data-vim-selected].category-social {
|
|||
flex-grow: 0;
|
||||
flex-shrink: 1;
|
||||
text-align: right;
|
||||
padding-bottom: 1px;
|
||||
|
||||
.url_i2 {
|
||||
float: right;
|
||||
|
|
|
@ -1,12 +1,19 @@
|
|||
<select class="language" id="language" name="language" aria-label="{{ _('Search language') }}">{{- '' -}}
|
||||
<option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }} [all]</option>
|
||||
<option value="auto" {% if current_language == 'auto' %}selected="selected"{% endif %}>
|
||||
{{- _('Auto-detect') -}}
|
||||
{%- if current_language == 'auto' %} ({{ search_language }}){%- endif -%}
|
||||
</option>
|
||||
{%- for sxng_tag,lang_name,country_name,english_name,flag in sxng_locales | sort(attribute=1) -%}
|
||||
<option value="{{ sxng_tag }}" {% if sxng_tag == current_language %}selected="selected"{% endif %}>
|
||||
{% if flag %}{{ flag }} {% endif%} {{- lang_name }} {% if country_name %} - {{ country_name }} {% endif %} [{{sxng_tag}}]
|
||||
</option>
|
||||
{%- endfor -%}
|
||||
<option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }} [all]</option>{{- '' -}}
|
||||
<option value="all"
|
||||
{%- if current_language == 'all' %} selected="selected" {%- endif -%}>
|
||||
{{- _('Default language') }} [all] {{- '' -}}
|
||||
</option>{{- '' -}}
|
||||
<option value="auto"
|
||||
{%- if current_language == 'auto' %} selected="selected" {%- endif -%}>
|
||||
{{- _('Auto-detect') }} [auto] {{- '' -}}
|
||||
</option>{{- '' -}}
|
||||
{% for sxng_tag,lang_name,country_name,english_name,flag in sxng_locales | sort(attribute=1) -%}
|
||||
<option value="{{ sxng_tag }}"
|
||||
{%- if sxng_tag == current_language %} selected="selected" {%- endif -%}>
|
||||
{{ lang_name }}{%- if country_name -%}-{{ country_name }}{%- endif -%}
|
||||
{{- ' ' -}}[{{sxng_tag}}]{{- ' ' -}}
|
||||
{%- if flag -%}{{ flag }}{%- endif -%}
|
||||
</option>
|
||||
{%- endfor -%}
|
||||
</select>
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
{% for sxng_tag,lang_name,country_name,english_name,flag in sxng_locales | sort(attribute=1) -%}
|
||||
<option value="{{ sxng_tag }}"
|
||||
{%- if sxng_tag == current_language %} selected="selected" {%- endif -%}>
|
||||
{%- if flag -%}{{ flag }} {% endif -%}
|
||||
{{ lang_name }}{%- if country_name -%}-{{ country_name }}{%- endif -%}
|
||||
{{- ' ' -}}[{{sxng_tag}}]{{- '' -}}
|
||||
{{- ' ' -}}[{{sxng_tag}}]{{- ' ' -}}
|
||||
{%- if flag -%}{{ flag }}{%- endif -%}
|
||||
</option>
|
||||
{%- endfor -%}
|
||||
</select>{{- '' -}}
|
||||
|
|
Binary file not shown.
|
@ -9,21 +9,24 @@
|
|||
# return42 <markus.heiser@darmarit.de>, 2023, 2024.
|
||||
# APoniatowski <adam@poniatowski.dev>, 2023.
|
||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||
# louispires <louispires@users.noreply.translate.codeberg.org>, 2024.
|
||||
# notlmutsaers <notlmutsaers@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-06-17 12:15+0000\n"
|
||||
"PO-Revision-Date: 2024-06-08 13:18+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"PO-Revision-Date: 2024-07-09 15:18+0000\n"
|
||||
"Last-Translator: notlmutsaers <notlmutsaers@users.noreply.translate.codeberg."
|
||||
"org>\n"
|
||||
"Language-Team: Afrikaans <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/af/>\n"
|
||||
"Language: af\n"
|
||||
"Language-Team: Afrikaans "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/af/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
"Generated-By: Babel 2.15.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -189,7 +192,7 @@ msgstr "geval"
|
|||
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Current condition"
|
||||
msgstr ""
|
||||
msgstr "Huidige toestand"
|
||||
|
||||
#. WEATHER_TERMS['EVENING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -199,22 +202,22 @@ msgstr "aand"
|
|||
#. WEATHER_TERMS['FEELS LIKE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Feels like"
|
||||
msgstr ""
|
||||
msgstr "Voel soos"
|
||||
|
||||
#. WEATHER_TERMS['HUMIDITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Humidity"
|
||||
msgstr ""
|
||||
msgstr "Humiditeit"
|
||||
|
||||
#. WEATHER_TERMS['MAX TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Max temp."
|
||||
msgstr ""
|
||||
msgstr "Maksimum temp."
|
||||
|
||||
#. WEATHER_TERMS['MIN TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Min temp."
|
||||
msgstr ""
|
||||
msgstr "Minimum temp."
|
||||
|
||||
#. WEATHER_TERMS['MORNING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -234,97 +237,97 @@ msgstr "Middag"
|
|||
#. WEATHER_TERMS['PRESSURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
msgstr "Druk"
|
||||
|
||||
#. WEATHER_TERMS['SUNRISE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunrise"
|
||||
msgstr ""
|
||||
msgstr "Sonopkoms"
|
||||
|
||||
#. WEATHER_TERMS['SUNSET']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunset"
|
||||
msgstr ""
|
||||
msgstr "Sonsondergang"
|
||||
|
||||
#. WEATHER_TERMS['TEMPERATURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Temperature"
|
||||
msgstr ""
|
||||
msgstr "Temperatuur"
|
||||
|
||||
#. WEATHER_TERMS['UV INDEX']
|
||||
#: searx/searxng.msg
|
||||
msgid "UV index"
|
||||
msgstr ""
|
||||
msgstr "UV indeks"
|
||||
|
||||
#. WEATHER_TERMS['VISIBILITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
msgstr "Sigbaarheid"
|
||||
|
||||
#. WEATHER_TERMS['WIND']
|
||||
#: searx/searxng.msg
|
||||
msgid "Wind"
|
||||
msgstr ""
|
||||
msgstr "Wind"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "subscribers"
|
||||
msgstr ""
|
||||
msgstr "intekenare"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
msgstr "plasings"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "active users"
|
||||
msgstr ""
|
||||
msgstr "aktiewe gebruikers"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "comments"
|
||||
msgstr ""
|
||||
msgstr "kommentaar"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['USER']
|
||||
#: searx/searxng.msg
|
||||
msgid "user"
|
||||
msgstr ""
|
||||
msgstr "gebruiker"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "community"
|
||||
msgstr ""
|
||||
msgstr "gemeenskap"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "points"
|
||||
msgstr ""
|
||||
msgstr "punte"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||
#: searx/searxng.msg
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "titel"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||
#: searx/searxng.msg
|
||||
msgid "author"
|
||||
msgstr ""
|
||||
msgstr "outeur"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD OPEN']
|
||||
#: searx/engines/discourse.py:121 searx/searxng.msg
|
||||
msgid "open"
|
||||
msgstr ""
|
||||
msgstr "oop"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD CLOSED']
|
||||
#: searx/engines/discourse.py:121 searx/searxng.msg
|
||||
msgid "closed"
|
||||
msgstr ""
|
||||
msgstr "toe"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD ANSWERED']
|
||||
#: searx/engines/discourse.py:132 searx/searxng.msg
|
||||
msgid "answered"
|
||||
msgstr ""
|
||||
msgstr "geantwoord"
|
||||
|
||||
#: searx/webapp.py:330
|
||||
msgid "No item found"
|
||||
|
@ -505,7 +508,7 @@ msgstr "Lêer kwaliteit"
|
|||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
msgstr "Bereken wiskundige uitdrukkings via die soekbalk"
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
|
@ -521,11 +524,13 @@ msgstr "vervang Gasheernaam"
|
|||
|
||||
#: searx/plugins/hostnames.py:68
|
||||
msgid "Hostnames plugin"
|
||||
msgstr ""
|
||||
msgstr "Gasheername-inprop"
|
||||
|
||||
#: searx/plugins/hostnames.py:69
|
||||
msgid "Rewrite hostnames, remove results or prioritize them based on the hostname"
|
||||
msgstr ""
|
||||
"Herskryf gasheername, verwyder resultate of prioritiseer dit op grond van "
|
||||
"die gasheernaam"
|
||||
|
||||
#: searx/plugins/oa_doi_rewrite.py:12
|
||||
msgid "Open Access DOI rewrite"
|
||||
|
@ -553,11 +558,11 @@ msgstr ""
|
|||
|
||||
#: searx/plugins/self_info.py:28
|
||||
msgid "Your IP is: "
|
||||
msgstr ""
|
||||
msgstr "Jou IP is: "
|
||||
|
||||
#: searx/plugins/self_info.py:31
|
||||
msgid "Your user-agent is: "
|
||||
msgstr ""
|
||||
msgstr "Jou gebruiker-agent is: "
|
||||
|
||||
#: searx/plugins/tor_check.py:24
|
||||
msgid "Tor check plugin"
|
||||
|
@ -604,7 +609,7 @@ msgstr "Verwyder spoorsnyersargumente van die teruggestuurde URL"
|
|||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
msgstr "Skakel tussen eenhede om"
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
|
@ -1148,15 +1153,15 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/preferences/cookies.html:46
|
||||
msgid "Copy preferences hash"
|
||||
msgstr ""
|
||||
msgstr "Kopieer voorkeur-hash"
|
||||
|
||||
#: searx/templates/simple/preferences/cookies.html:57
|
||||
msgid "Insert copied preferences hash (without URL) to restore"
|
||||
msgstr ""
|
||||
msgstr "Voeg gekopieerde voorkeur-hash (sonder URL) in om te herstel"
|
||||
|
||||
#: searx/templates/simple/preferences/cookies.html:59
|
||||
msgid "Preferences hash"
|
||||
msgstr ""
|
||||
msgstr "Voorkeure hash"
|
||||
|
||||
#: searx/templates/simple/preferences/doi_resolver.html:2
|
||||
msgid "Open Access DOI resolver"
|
||||
|
@ -1176,11 +1181,11 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/preferences/engines.html:15
|
||||
msgid "Enable all"
|
||||
msgstr ""
|
||||
msgstr "Aktiveer alles"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:16
|
||||
msgid "Disable all"
|
||||
msgstr ""
|
||||
msgstr "Deaktiveer alles"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
msgid "!bang"
|
||||
|
@ -1372,7 +1377,7 @@ msgstr "Lêergrootte"
|
|||
|
||||
#: searx/templates/simple/result_templates/files.html:40
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
msgstr "Datum"
|
||||
|
||||
#: searx/templates/simple/result_templates/files.html:42
|
||||
#: searx/templates/simple/result_templates/paper.html:24
|
||||
|
@ -1381,7 +1386,7 @@ msgstr "Tik"
|
|||
|
||||
#: searx/templates/simple/result_templates/images.html:20
|
||||
msgid "Resolution"
|
||||
msgstr ""
|
||||
msgstr "Resolusie"
|
||||
|
||||
#: searx/templates/simple/result_templates/images.html:21
|
||||
msgid "Format"
|
||||
|
@ -1409,15 +1414,15 @@ msgstr "versteek kaart"
|
|||
|
||||
#: searx/templates/simple/result_templates/packages.html:12
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
msgstr "Weergawe"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:18
|
||||
msgid "Maintainer"
|
||||
msgstr ""
|
||||
msgstr "Onderhouer"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:24
|
||||
msgid "Updated at"
|
||||
msgstr ""
|
||||
msgstr "Opgedateer by"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:30
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
|
@ -1426,7 +1431,7 @@ msgstr "Merkers"
|
|||
|
||||
#: searx/templates/simple/result_templates/packages.html:36
|
||||
msgid "Popularity"
|
||||
msgstr ""
|
||||
msgstr "Gewildheid"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:42
|
||||
msgid "License"
|
||||
|
@ -1434,11 +1439,11 @@ msgstr "Lisensie"
|
|||
|
||||
#: searx/templates/simple/result_templates/packages.html:52
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
msgstr "Projek"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:55
|
||||
msgid "Project homepage"
|
||||
msgstr ""
|
||||
msgstr "Projek tuisblad"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
|
@ -1679,4 +1684,3 @@ msgstr "versteek video"
|
|||
|
||||
#~ msgid "TiB"
|
||||
#~ msgstr "TiB"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -12,21 +12,23 @@
|
|||
# KDesp73 <kdesp2003@gmail.com>, 2023.
|
||||
# RaptaG <george-raptis@tutamail.com>, 2023.
|
||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||
# notlmutsaers <notlmutsaers@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-06-17 12:15+0000\n"
|
||||
"PO-Revision-Date: 2024-06-14 07:08+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"PO-Revision-Date: 2024-07-09 15:18+0000\n"
|
||||
"Last-Translator: notlmutsaers <notlmutsaers@users.noreply.translate.codeberg."
|
||||
"org>\n"
|
||||
"Language-Team: Greek <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/el/>\n"
|
||||
"Language: el_GR\n"
|
||||
"Language-Team: Greek "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/el/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
"Generated-By: Babel 2.15.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -167,7 +169,7 @@ msgstr "σκοτεινό"
|
|||
#. BRAND_CUSTOM_LINKS['UPTIME']
|
||||
#: searx/searxng.msg
|
||||
msgid "Uptime"
|
||||
msgstr ""
|
||||
msgstr "χρόνο λειτουργίας"
|
||||
|
||||
#. BRAND_CUSTOM_LINKS['ABOUT']
|
||||
#: searx/searxng.msg searx/templates/simple/base.html:50
|
||||
|
@ -177,7 +179,7 @@ msgstr "Σχετικά με το SearXNG"
|
|||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Average temp."
|
||||
msgstr "Μέση Θερμοκρασία"
|
||||
msgstr "Μέση θερμοκρασία."
|
||||
|
||||
#. WEATHER_TERMS['CLOUD COVER']
|
||||
#: searx/searxng.msg
|
||||
|
@ -187,12 +189,12 @@ msgstr "Νεφοκάλυψη"
|
|||
#. WEATHER_TERMS['CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
msgstr "Κατάσταση"
|
||||
|
||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Current condition"
|
||||
msgstr ""
|
||||
msgstr "Τωρινή κατάσταση"
|
||||
|
||||
#. WEATHER_TERMS['EVENING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -212,7 +214,7 @@ msgstr "Υγρασία"
|
|||
#. WEATHER_TERMS['MAX TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Max temp."
|
||||
msgstr "Μέγιστη Θερμοκρασία"
|
||||
msgstr "Μέγιστη θερμοκρασία."
|
||||
|
||||
#. WEATHER_TERMS['MIN TEMP.']
|
||||
#: searx/searxng.msg
|
||||
|
@ -242,92 +244,92 @@ msgstr "Πίεση"
|
|||
#. WEATHER_TERMS['SUNRISE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunrise"
|
||||
msgstr ""
|
||||
msgstr "Ανατολή ηλίου"
|
||||
|
||||
#. WEATHER_TERMS['SUNSET']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunset"
|
||||
msgstr ""
|
||||
msgstr "Η δυση του ηλιου"
|
||||
|
||||
#. WEATHER_TERMS['TEMPERATURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Temperature"
|
||||
msgstr ""
|
||||
msgstr "Θερμοκρασία"
|
||||
|
||||
#. WEATHER_TERMS['UV INDEX']
|
||||
#: searx/searxng.msg
|
||||
msgid "UV index"
|
||||
msgstr ""
|
||||
msgstr "Δείκτης UV"
|
||||
|
||||
#. WEATHER_TERMS['VISIBILITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
msgstr "Ορατότητα"
|
||||
|
||||
#. WEATHER_TERMS['WIND']
|
||||
#: searx/searxng.msg
|
||||
msgid "Wind"
|
||||
msgstr ""
|
||||
msgstr "Ανεμος"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "subscribers"
|
||||
msgstr ""
|
||||
msgstr "συνδρομητές"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
msgstr "αναρτήσεις"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "active users"
|
||||
msgstr ""
|
||||
msgstr "ενεργούς χρήστες"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "comments"
|
||||
msgstr ""
|
||||
msgstr "σχόλια"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['USER']
|
||||
#: searx/searxng.msg
|
||||
msgid "user"
|
||||
msgstr ""
|
||||
msgstr "χρήστης"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "community"
|
||||
msgstr ""
|
||||
msgstr "κοινότητα"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "points"
|
||||
msgstr ""
|
||||
msgstr "σημεία"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||
#: searx/searxng.msg
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "τίτλος"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||
#: searx/searxng.msg
|
||||
msgid "author"
|
||||
msgstr ""
|
||||
msgstr "συγγραφέας"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD OPEN']
|
||||
#: searx/engines/discourse.py:121 searx/searxng.msg
|
||||
msgid "open"
|
||||
msgstr ""
|
||||
msgstr "Άνοιξε"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD CLOSED']
|
||||
#: searx/engines/discourse.py:121 searx/searxng.msg
|
||||
msgid "closed"
|
||||
msgstr ""
|
||||
msgstr "κλειστό"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD ANSWERED']
|
||||
#: searx/engines/discourse.py:132 searx/searxng.msg
|
||||
msgid "answered"
|
||||
msgstr ""
|
||||
msgstr "απάντησε"
|
||||
|
||||
#: searx/webapp.py:330
|
||||
msgid "No item found"
|
||||
|
@ -508,7 +510,7 @@ msgstr "Ποιότητα αρχείου"
|
|||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
msgstr "Υπολογίστε μαθηματικές εκφράσεις μέσω της γραμμής αναζήτησης"
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
|
@ -524,15 +526,17 @@ msgstr "Αντικατάσταση hostname"
|
|||
|
||||
#: searx/plugins/hostnames.py:68
|
||||
msgid "Hostnames plugin"
|
||||
msgstr ""
|
||||
msgstr "Προσθήκη ονομάτων κεντρικού υπολογιστή"
|
||||
|
||||
#: searx/plugins/hostnames.py:69
|
||||
msgid "Rewrite hostnames, remove results or prioritize them based on the hostname"
|
||||
msgstr ""
|
||||
"Ξαναγράψτε ονόματα κεντρικών υπολογιστών, αφαιρέστε τα αποτελέσματα ή δώστε "
|
||||
"προτεραιότητα σε αυτά με βάση το όνομα κεντρικού υπολογιστή"
|
||||
|
||||
#: searx/plugins/oa_doi_rewrite.py:12
|
||||
msgid "Open Access DOI rewrite"
|
||||
msgstr "Αντικατάσταση με DOI ανοιχτής πρόσβασης"
|
||||
msgstr "Ανοίξτε την επανεγγραφή DOI της Access"
|
||||
|
||||
#: searx/plugins/oa_doi_rewrite.py:13
|
||||
msgid ""
|
||||
|
@ -556,11 +560,11 @@ msgstr ""
|
|||
|
||||
#: searx/plugins/self_info.py:28
|
||||
msgid "Your IP is: "
|
||||
msgstr ""
|
||||
msgstr "Η IP σας είναι: "
|
||||
|
||||
#: searx/plugins/self_info.py:31
|
||||
msgid "Your user-agent is: "
|
||||
msgstr ""
|
||||
msgstr "Ο χρήστης-πράκτοράς σας είναι: "
|
||||
|
||||
#: searx/plugins/tor_check.py:24
|
||||
msgid "Tor check plugin"
|
||||
|
@ -607,7 +611,7 @@ msgstr "Αφαίρεση ιχνηλατών από τους επιστρεφόμ
|
|||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
msgstr "Μετατροπή μεταξύ μονάδων"
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
|
@ -1037,7 +1041,7 @@ msgstr "Δεν βρέθηκαν αποτελέσματα. Μπορείτε να
|
|||
|
||||
#: searx/templates/simple/messages/no_results.html:14
|
||||
msgid "There are no more results. You can try to:"
|
||||
msgstr ""
|
||||
msgstr "Δεν υπάρχουν άλλα αποτελέσματα. Μπορείτε να προσπαθήσετε να:"
|
||||
|
||||
#: searx/templates/simple/messages/no_results.html:19
|
||||
msgid "Refresh the page."
|
||||
|
@ -1057,11 +1061,13 @@ msgstr "Αλλαγή σε άλλη έκδοση:"
|
|||
|
||||
#: searx/templates/simple/messages/no_results.html:24
|
||||
msgid "Search for another query or select another category."
|
||||
msgstr ""
|
||||
msgstr "Αναζητήστε άλλο ερώτημα ή επιλέξτε άλλη κατηγορία."
|
||||
|
||||
#: searx/templates/simple/messages/no_results.html:25
|
||||
msgid "Go back to the previous page using the previous page button."
|
||||
msgstr ""
|
||||
"Επιστρέψτε στην προηγούμενη σελίδα χρησιμοποιώντας το κουμπί της "
|
||||
"προηγούμενης σελίδας."
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
|
@ -1157,15 +1163,16 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/preferences/cookies.html:46
|
||||
msgid "Copy preferences hash"
|
||||
msgstr ""
|
||||
msgstr "Αντιγραφή κατακερματισμού προτιμήσεων"
|
||||
|
||||
#: searx/templates/simple/preferences/cookies.html:57
|
||||
msgid "Insert copied preferences hash (without URL) to restore"
|
||||
msgstr ""
|
||||
"Εισαγάγετε αντιγραμμένο κατακερματισμό προτιμήσεων (χωρίς URL) για επαναφορά"
|
||||
|
||||
#: searx/templates/simple/preferences/cookies.html:59
|
||||
msgid "Preferences hash"
|
||||
msgstr ""
|
||||
msgstr "Κατακερματισμός προτιμήσεων"
|
||||
|
||||
#: searx/templates/simple/preferences/doi_resolver.html:2
|
||||
msgid "Open Access DOI resolver"
|
||||
|
@ -1185,11 +1192,11 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/preferences/engines.html:15
|
||||
msgid "Enable all"
|
||||
msgstr ""
|
||||
msgstr "Ενεργοποίηση όλων"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:16
|
||||
msgid "Disable all"
|
||||
msgstr ""
|
||||
msgstr "Απενεργοποίηση όλων"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
msgid "!bang"
|
||||
|
@ -1427,11 +1434,11 @@ msgstr "Έκδοση"
|
|||
|
||||
#: searx/templates/simple/result_templates/packages.html:18
|
||||
msgid "Maintainer"
|
||||
msgstr ""
|
||||
msgstr "Συντηρητής"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:24
|
||||
msgid "Updated at"
|
||||
msgstr ""
|
||||
msgstr "Ενημερώθηκε στις"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:30
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
|
@ -1440,7 +1447,7 @@ msgstr "Σημάνσεις"
|
|||
|
||||
#: searx/templates/simple/result_templates/packages.html:36
|
||||
msgid "Popularity"
|
||||
msgstr ""
|
||||
msgstr "Δημοτικότητα"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:42
|
||||
msgid "License"
|
||||
|
@ -1452,7 +1459,7 @@ msgstr "Έργο"
|
|||
|
||||
#: searx/templates/simple/result_templates/packages.html:55
|
||||
msgid "Project homepage"
|
||||
msgstr ""
|
||||
msgstr "Αρχική σελίδα του έργου"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
|
@ -1951,4 +1958,3 @@ msgstr "απόκρυψη βίντεο"
|
|||
|
||||
#~ msgid "TiB"
|
||||
#~ msgstr "TiB"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -14,19 +14,19 @@
|
|||
# alexgabi <alexgabi@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-06-17 12:15+0000\n"
|
||||
"PO-Revision-Date: 2024-05-02 12:18+0000\n"
|
||||
"Last-Translator: alexgabi <alexgabi@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"PO-Revision-Date: 2024-07-09 15:18+0000\n"
|
||||
"Last-Translator: alexgabi <alexgabi@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Basque <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/eu/>\n"
|
||||
"Language: eu\n"
|
||||
"Language-Team: Basque "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/eu/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
"Generated-By: Babel 2.15.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -317,17 +317,17 @@ msgstr "egilea"
|
|||
#. SOCIAL_MEDIA_TERMS['THREAD OPEN']
|
||||
#: searx/engines/discourse.py:121 searx/searxng.msg
|
||||
msgid "open"
|
||||
msgstr ""
|
||||
msgstr "ireki"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD CLOSED']
|
||||
#: searx/engines/discourse.py:121 searx/searxng.msg
|
||||
msgid "closed"
|
||||
msgstr ""
|
||||
msgstr "itxita"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD ANSWERED']
|
||||
#: searx/engines/discourse.py:132 searx/searxng.msg
|
||||
msgid "answered"
|
||||
msgstr ""
|
||||
msgstr "erantzunda"
|
||||
|
||||
#: searx/webapp.py:330
|
||||
msgid "No item found"
|
||||
|
@ -507,7 +507,7 @@ msgstr "Fitxategiaren kalitatea"
|
|||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
msgstr "Kalkulatu adierazpen matematikoak bilaketa-barraren bidez"
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
|
@ -523,11 +523,13 @@ msgstr "Ostalariaren izena ordezkatu"
|
|||
|
||||
#: searx/plugins/hostnames.py:68
|
||||
msgid "Hostnames plugin"
|
||||
msgstr ""
|
||||
msgstr "Hostnames plugina"
|
||||
|
||||
#: searx/plugins/hostnames.py:69
|
||||
msgid "Rewrite hostnames, remove results or prioritize them based on the hostname"
|
||||
msgstr ""
|
||||
"Berridatzi ostalari-izenak, kendu emaitzak edo eman lehentasuna ostalari-"
|
||||
"izenaren arabera"
|
||||
|
||||
#: searx/plugins/oa_doi_rewrite.py:12
|
||||
msgid "Open Access DOI rewrite"
|
||||
|
@ -555,11 +557,11 @@ msgstr ""
|
|||
|
||||
#: searx/plugins/self_info.py:28
|
||||
msgid "Your IP is: "
|
||||
msgstr ""
|
||||
msgstr "zure IPa hau da: "
|
||||
|
||||
#: searx/plugins/self_info.py:31
|
||||
msgid "Your user-agent is: "
|
||||
msgstr ""
|
||||
msgstr "Zure erabiltzaile-agentea hau da: "
|
||||
|
||||
#: searx/plugins/tor_check.py:24
|
||||
msgid "Tor check plugin"
|
||||
|
@ -1926,4 +1928,3 @@ msgstr "ezkutatu bideoa"
|
|||
|
||||
#~ msgid "TiB"
|
||||
#~ msgstr "TiB"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -11,13 +11,14 @@
|
|||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||
# Implosion <Implosion@users.noreply.translate.codeberg.org>, 2024.
|
||||
# artnay <artnay@users.noreply.translate.codeberg.org>, 2024.
|
||||
# jonkke9 <jonkke9@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-06-17 12:15+0000\n"
|
||||
"PO-Revision-Date: 2024-06-27 19:18+0000\n"
|
||||
"Last-Translator: artnay <artnay@users.noreply.translate.codeberg.org>\n"
|
||||
"PO-Revision-Date: 2024-07-06 16:18+0000\n"
|
||||
"Last-Translator: jonkke9 <jonkke9@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Finnish <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/fi/>\n"
|
||||
"Language: fi\n"
|
||||
|
@ -25,7 +26,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.5.5\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
"Generated-By: Babel 2.15.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -321,7 +322,7 @@ msgstr ""
|
|||
#. SOCIAL_MEDIA_TERMS['THREAD CLOSED']
|
||||
#: searx/engines/discourse.py:121 searx/searxng.msg
|
||||
msgid "closed"
|
||||
msgstr ""
|
||||
msgstr "suljettu"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD ANSWERED']
|
||||
#: searx/engines/discourse.py:132 searx/searxng.msg
|
||||
|
|
Binary file not shown.
|
@ -22,13 +22,14 @@
|
|||
# Heyian <Heyian@users.noreply.translate.codeberg.org>, 2024.
|
||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||
# Vulcain <Vulcain@users.noreply.translate.codeberg.org>, 2024.
|
||||
# wags07 <wags07@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-06-17 12:15+0000\n"
|
||||
"PO-Revision-Date: 2024-06-21 07:09+0000\n"
|
||||
"Last-Translator: Vulcain <Vulcain@users.noreply.translate.codeberg.org>\n"
|
||||
"PO-Revision-Date: 2024-07-06 16:18+0000\n"
|
||||
"Last-Translator: wags07 <wags07@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: French <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/fr/>\n"
|
||||
"Language: fr\n"
|
||||
|
@ -36,7 +37,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.5.5\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
"Generated-By: Babel 2.15.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -534,7 +535,7 @@ msgstr "Remplacer les noms de domaine"
|
|||
|
||||
#: searx/plugins/hostnames.py:68
|
||||
msgid "Hostnames plugin"
|
||||
msgstr ""
|
||||
msgstr "Plugin de noms d’hôtes"
|
||||
|
||||
#: searx/plugins/hostnames.py:69
|
||||
msgid "Rewrite hostnames, remove results or prioritize them based on the hostname"
|
||||
|
|
Binary file not shown.
|
@ -10,27 +10,29 @@
|
|||
# alma <alma@users.noreply.translate.codeberg.org>, 2023.
|
||||
# staram <gritty.year0043@fastmail.com>, 2023.
|
||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||
# wazhanudin <wazhanudin@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-06-17 12:15+0000\n"
|
||||
"PO-Revision-Date: 2024-03-12 17:28+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"PO-Revision-Date: 2024-07-11 16:18+0000\n"
|
||||
"Last-Translator: wazhanudin <wazhanudin@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"Language-Team: Malay <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/ms/>\n"
|
||||
"Language: ms\n"
|
||||
"Language-Team: Malay "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/ms/>\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
"Generated-By: Babel 2.15.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
#: searx/searxng.msg
|
||||
msgid "without further subgrouping"
|
||||
msgstr ""
|
||||
msgstr "tanpa pengelompokan lanjut"
|
||||
|
||||
#. CONSTANT_NAMES['DEFAULT_CATEGORY']
|
||||
#: searx/searxng.msg
|
||||
|
@ -75,7 +77,7 @@ msgstr "radio"
|
|||
#. CATEGORY_NAMES['TV']
|
||||
#: searx/searxng.msg
|
||||
msgid "tv"
|
||||
msgstr ""
|
||||
msgstr "tv"
|
||||
|
||||
#. CATEGORY_NAMES['IT']
|
||||
#: searx/searxng.msg
|
||||
|
@ -165,7 +167,7 @@ msgstr "gelap"
|
|||
#. BRAND_CUSTOM_LINKS['UPTIME']
|
||||
#: searx/searxng.msg
|
||||
msgid "Uptime"
|
||||
msgstr ""
|
||||
msgstr "Masa aktif"
|
||||
|
||||
#. BRAND_CUSTOM_LINKS['ABOUT']
|
||||
#: searx/searxng.msg searx/templates/simple/base.html:50
|
||||
|
@ -175,22 +177,22 @@ msgstr "Tentang"
|
|||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Average temp."
|
||||
msgstr ""
|
||||
msgstr "Suhu purata."
|
||||
|
||||
#. WEATHER_TERMS['CLOUD COVER']
|
||||
#: searx/searxng.msg
|
||||
msgid "Cloud cover"
|
||||
msgstr ""
|
||||
msgstr "Litupan awan"
|
||||
|
||||
#. WEATHER_TERMS['CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
msgstr "Keadaan"
|
||||
|
||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Current condition"
|
||||
msgstr ""
|
||||
msgstr "Keadaan semasa"
|
||||
|
||||
#. WEATHER_TERMS['EVENING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -200,22 +202,22 @@ msgstr "Petang"
|
|||
#. WEATHER_TERMS['FEELS LIKE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Feels like"
|
||||
msgstr ""
|
||||
msgstr "Rasa seperti"
|
||||
|
||||
#. WEATHER_TERMS['HUMIDITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Humidity"
|
||||
msgstr ""
|
||||
msgstr "Kelembapan"
|
||||
|
||||
#. WEATHER_TERMS['MAX TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Max temp."
|
||||
msgstr ""
|
||||
msgstr "Suhu max."
|
||||
|
||||
#. WEATHER_TERMS['MIN TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Min temp."
|
||||
msgstr ""
|
||||
msgstr "Suhu min."
|
||||
|
||||
#. WEATHER_TERMS['MORNING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -235,97 +237,97 @@ msgstr "Tengah hari"
|
|||
#. WEATHER_TERMS['PRESSURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
msgstr "Tekanan"
|
||||
|
||||
#. WEATHER_TERMS['SUNRISE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunrise"
|
||||
msgstr ""
|
||||
msgstr "Matahari terbit"
|
||||
|
||||
#. WEATHER_TERMS['SUNSET']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunset"
|
||||
msgstr ""
|
||||
msgstr "Matahari terbenam"
|
||||
|
||||
#. WEATHER_TERMS['TEMPERATURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Temperature"
|
||||
msgstr ""
|
||||
msgstr "Suhu"
|
||||
|
||||
#. WEATHER_TERMS['UV INDEX']
|
||||
#: searx/searxng.msg
|
||||
msgid "UV index"
|
||||
msgstr ""
|
||||
msgstr "Indeks UV"
|
||||
|
||||
#. WEATHER_TERMS['VISIBILITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
msgstr "Penglihatan"
|
||||
|
||||
#. WEATHER_TERMS['WIND']
|
||||
#: searx/searxng.msg
|
||||
msgid "Wind"
|
||||
msgstr ""
|
||||
msgstr "Angin"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "subscribers"
|
||||
msgstr ""
|
||||
msgstr "Langganan"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
msgstr "kiriman"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "active users"
|
||||
msgstr ""
|
||||
msgstr "pengguna aktif"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "comments"
|
||||
msgstr ""
|
||||
msgstr "komen"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['USER']
|
||||
#: searx/searxng.msg
|
||||
msgid "user"
|
||||
msgstr ""
|
||||
msgstr "pengguna"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "community"
|
||||
msgstr ""
|
||||
msgstr "komuniti"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "points"
|
||||
msgstr ""
|
||||
msgstr "mata"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||
#: searx/searxng.msg
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "tajuk"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||
#: searx/searxng.msg
|
||||
msgid "author"
|
||||
msgstr ""
|
||||
msgstr "penulis"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD OPEN']
|
||||
#: searx/engines/discourse.py:121 searx/searxng.msg
|
||||
msgid "open"
|
||||
msgstr ""
|
||||
msgstr "buka"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD CLOSED']
|
||||
#: searx/engines/discourse.py:121 searx/searxng.msg
|
||||
msgid "closed"
|
||||
msgstr ""
|
||||
msgstr "tutup"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['THREAD ANSWERED']
|
||||
#: searx/engines/discourse.py:132 searx/searxng.msg
|
||||
msgid "answered"
|
||||
msgstr ""
|
||||
msgstr "dijawab"
|
||||
|
||||
#: searx/webapp.py:330
|
||||
msgid "No item found"
|
||||
|
@ -430,7 +432,7 @@ msgstr "Fungsi statistik"
|
|||
|
||||
#: searx/answerers/statistics/answerer.py:49
|
||||
msgid "Compute {functions} of the arguments"
|
||||
msgstr ""
|
||||
msgstr "Mengira {functions} dari hujah-hujah"
|
||||
|
||||
#: searx/engines/openstreetmap.py:159
|
||||
msgid "Get directions"
|
||||
|
@ -450,7 +452,7 @@ msgstr "Saluran"
|
|||
|
||||
#: searx/engines/radio_browser.py:105
|
||||
msgid "bitrate"
|
||||
msgstr ""
|
||||
msgstr "kadar bit"
|
||||
|
||||
#: searx/engines/radio_browser.py:106
|
||||
msgid "votes"
|
||||
|
@ -470,6 +472,8 @@ msgid ""
|
|||
"{numCitations} citations from the year {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
msgstr ""
|
||||
"{numCitations} cetusan daripada tahun {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
|
||||
#: searx/engines/tineye.py:39
|
||||
msgid ""
|
||||
|
@ -486,6 +490,8 @@ msgid ""
|
|||
"The image is too simple to find matches. TinEye requires a basic level of"
|
||||
" visual detail to successfully identify matches."
|
||||
msgstr ""
|
||||
"Gambar ini terlalu mudah untuk mencari padanan. TinEye memerlukan tahap "
|
||||
"butiran visual asas untuk mengenal pasti padanan dengan berjaya."
|
||||
|
||||
#: searx/engines/tineye.py:51
|
||||
msgid "The image could not be downloaded."
|
||||
|
@ -493,7 +499,7 @@ msgstr "Imej tidak dapat dimuat turun."
|
|||
|
||||
#: searx/engines/zlibrary.py:129
|
||||
msgid "Book rating"
|
||||
msgstr ""
|
||||
msgstr "Penarafan buku"
|
||||
|
||||
#: searx/engines/zlibrary.py:130
|
||||
msgid "File quality"
|
||||
|
@ -501,7 +507,7 @@ msgstr "Kualiti fail"
|
|||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
msgstr "Kira ungkapan matematik melalui bar carian"
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
|
@ -509,7 +515,7 @@ msgstr "Ubah rentetan kepada \"hash digest\" yang berbeza."
|
|||
|
||||
#: searx/plugins/hash_plugin.py:38
|
||||
msgid "hash digest"
|
||||
msgstr ""
|
||||
msgstr "huraian hash"
|
||||
|
||||
#: searx/plugins/hostname_replace.py:7
|
||||
msgid "Hostname replace"
|
||||
|
@ -517,11 +523,13 @@ msgstr "Gantikan nama hos"
|
|||
|
||||
#: searx/plugins/hostnames.py:68
|
||||
msgid "Hostnames plugin"
|
||||
msgstr ""
|
||||
msgstr "Plugin nama hos"
|
||||
|
||||
#: searx/plugins/hostnames.py:69
|
||||
msgid "Rewrite hostnames, remove results or prioritize them based on the hostname"
|
||||
msgstr ""
|
||||
"Menulis semula nama hos, buang keputusan atau memberi keutamaan kepada "
|
||||
"mereka berdasarkan nama hos"
|
||||
|
||||
#: searx/plugins/oa_doi_rewrite.py:12
|
||||
msgid "Open Access DOI rewrite"
|
||||
|
@ -549,11 +557,11 @@ msgstr ""
|
|||
|
||||
#: searx/plugins/self_info.py:28
|
||||
msgid "Your IP is: "
|
||||
msgstr ""
|
||||
msgstr "IP anda adalah: "
|
||||
|
||||
#: searx/plugins/self_info.py:31
|
||||
msgid "Your user-agent is: "
|
||||
msgstr ""
|
||||
msgstr "Agen pengguna anda adalah: "
|
||||
|
||||
#: searx/plugins/tor_check.py:24
|
||||
msgid "Tor check plugin"
|
||||
|
@ -564,6 +572,9 @@ msgid ""
|
|||
"This plugin checks if the address of the request is a Tor exit-node, and "
|
||||
"informs the user if it is; like check.torproject.org, but from SearXNG."
|
||||
msgstr ""
|
||||
"Plugin ini memeriksa jika alamat permintaan adalah nod-keluaran Tor, dan "
|
||||
"memberitahu pengguna jika ya; seperti check.torproject.org, tetapi dari "
|
||||
"SearXNG."
|
||||
|
||||
#: searx/plugins/tor_check.py:61
|
||||
msgid ""
|
||||
|
@ -587,15 +598,15 @@ msgstr "Anda tidak mengguna Tor dan ini adalah alamat IP luaran anda: {ip_addres
|
|||
|
||||
#: searx/plugins/tracker_url_remover.py:16
|
||||
msgid "Tracker URL remover"
|
||||
msgstr ""
|
||||
msgstr "Pemadam penjejak URL"
|
||||
|
||||
#: searx/plugins/tracker_url_remover.py:17
|
||||
msgid "Remove trackers arguments from the returned URL"
|
||||
msgstr ""
|
||||
msgstr "Buang hujah penjejak dari URL yang dikembalikan"
|
||||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
msgstr "Tukar antara unit"
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
|
@ -625,7 +636,7 @@ msgstr "Didukung oleh"
|
|||
|
||||
#: searx/templates/simple/base.html:68
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr ""
|
||||
msgstr "enjin carian meta terbuka yang menghormati privasi"
|
||||
|
||||
#: searx/templates/simple/base.html:69
|
||||
#: searx/templates/simple/result_templates/packages.html:59
|
||||
|
@ -634,7 +645,7 @@ msgstr "Kod sumber"
|
|||
|
||||
#: searx/templates/simple/base.html:70
|
||||
msgid "Issue tracker"
|
||||
msgstr ""
|
||||
msgstr "Isu penjejak"
|
||||
|
||||
#: searx/templates/simple/base.html:71 searx/templates/simple/stats.html:18
|
||||
msgid "Engine stats"
|
||||
|
@ -642,7 +653,7 @@ msgstr "Statistik enjin"
|
|||
|
||||
#: searx/templates/simple/base.html:73
|
||||
msgid "Public instances"
|
||||
msgstr ""
|
||||
msgstr "Kejadian awam"
|
||||
|
||||
#: searx/templates/simple/base.html:76
|
||||
msgid "Privacy policy"
|
||||
|
@ -650,11 +661,11 @@ msgstr "Polisi privasi"
|
|||
|
||||
#: searx/templates/simple/base.html:79
|
||||
msgid "Contact instance maintainer"
|
||||
msgstr ""
|
||||
msgstr "Hubungi penyelenggara kejadian"
|
||||
|
||||
#: searx/templates/simple/categories.html:26
|
||||
msgid "Click on the magnifier to perform search"
|
||||
msgstr ""
|
||||
msgstr "Klik pada kanta pembesar untuk melakukan carian"
|
||||
|
||||
#: searx/templates/simple/macros.html:35
|
||||
msgid "Length"
|
||||
|
@ -673,15 +684,15 @@ msgstr "dicache"
|
|||
|
||||
#: searx/templates/simple/macros.html:44
|
||||
msgid "proxied"
|
||||
msgstr ""
|
||||
msgstr "diproksi"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:64
|
||||
msgid "Start submiting a new issue on GitHub"
|
||||
msgstr ""
|
||||
msgstr "Mula menghantar isu baru di Github"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:66
|
||||
msgid "Please check for existing bugs about this engine on GitHub"
|
||||
msgstr ""
|
||||
msgstr "Sila semak untuk bug yang sedia ada tentang enjin ini di Github"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:69
|
||||
msgid "I confirm there is no existing bug about the issue I encounter"
|
||||
|
@ -1636,4 +1647,3 @@ msgstr "sembunyikkan video"
|
|||
|
||||
#~ msgid "TiB"
|
||||
#~ msgstr "TiB"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -20,21 +20,23 @@
|
|||
# marcelStangenberger <codeberg@xo.nl>, 2024.
|
||||
# yannickmaes <yannickmaes@users.noreply.translate.codeberg.org>, 2024.
|
||||
# MVDW-Java <MVDW-Java@users.noreply.translate.codeberg.org>, 2024.
|
||||
# notlmutsaers <notlmutsaers@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-06-17 12:15+0000\n"
|
||||
"PO-Revision-Date: 2024-06-12 12:24+0000\n"
|
||||
"Last-Translator: MVDW-Java <MVDW-"
|
||||
"Java@users.noreply.translate.codeberg.org>\n"
|
||||
"PO-Revision-Date: 2024-07-09 15:18+0000\n"
|
||||
"Last-Translator: notlmutsaers <notlmutsaers@users.noreply.translate.codeberg."
|
||||
"org>\n"
|
||||
"Language-Team: Dutch <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/nl/>\n"
|
||||
"Language: nl\n"
|
||||
"Language-Team: Dutch "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/nl/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
"Generated-By: Babel 2.15.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -566,11 +568,11 @@ msgstr ""
|
|||
|
||||
#: searx/plugins/self_info.py:28
|
||||
msgid "Your IP is: "
|
||||
msgstr ""
|
||||
msgstr "Jouw IP is: "
|
||||
|
||||
#: searx/plugins/self_info.py:31
|
||||
msgid "Your user-agent is: "
|
||||
msgstr ""
|
||||
msgstr "Jouw gebruiker-agent is: "
|
||||
|
||||
#: searx/plugins/tor_check.py:24
|
||||
msgid "Tor check plugin"
|
||||
|
@ -1966,4 +1968,3 @@ msgstr "verberg video"
|
|||
|
||||
#~ msgid "TiB"
|
||||
#~ msgstr "TiB"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -17,13 +17,14 @@
|
|||
# lspepinho <lspepinho@users.noreply.translate.codeberg.org>, 2024.
|
||||
# diodio <diodio@users.noreply.translate.codeberg.org>, 2024.
|
||||
# gvlx <gvlx@users.noreply.translate.codeberg.org>, 2024.
|
||||
# ds451 <ds451@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-06-17 12:15+0000\n"
|
||||
"PO-Revision-Date: 2024-06-25 11:18+0000\n"
|
||||
"Last-Translator: gvlx <gvlx@users.noreply.translate.codeberg.org>\n"
|
||||
"PO-Revision-Date: 2024-07-11 16:18+0000\n"
|
||||
"Last-Translator: ds451 <ds451@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Portuguese <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/pt/>\n"
|
||||
"Language: pt\n"
|
||||
|
@ -31,7 +32,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Weblate 5.5.5\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
"Generated-By: Babel 2.15.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -640,7 +641,7 @@ msgstr "Produzido por"
|
|||
|
||||
#: searx/templates/simple/base.html:68
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr "Um motor de multi-pesquisa, que repeita a privacidade"
|
||||
msgstr "Um motor de multi-pesquisa, que respeita a privacidade"
|
||||
|
||||
#: searx/templates/simple/base.html:69
|
||||
#: searx/templates/simple/result_templates/packages.html:59
|
||||
|
|
|
@ -61,7 +61,7 @@ from searx.botdetection import link_token
|
|||
from searx.data import ENGINE_DESCRIPTIONS
|
||||
from searx.results import Timing
|
||||
from searx.settings_defaults import OUTPUT_FORMATS
|
||||
from searx.settings_loader import get_default_settings_path
|
||||
from searx.settings_loader import DEFAULT_SETTINGS_FILE
|
||||
from searx.exceptions import SearxParameterException
|
||||
from searx.engines import (
|
||||
DEFAULT_CATEGORY,
|
||||
|
@ -1347,7 +1347,7 @@ def run():
|
|||
port=settings['server']['port'],
|
||||
host=settings['server']['bind_address'],
|
||||
threaded=True,
|
||||
extra_files=[get_default_settings_path()],
|
||||
extra_files=[DEFAULT_SETTINGS_FILE],
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
Test:
|
||||
"**********"
|
||||
xxx
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# pylint: disable=missing-module-docstring
|
||||
|
||||
from searx import settings
|
||||
from searx.engines import load_engines
|
||||
from searx.query import RawTextQuery
|
||||
from tests import SearxTestCase
|
||||
|
@ -234,9 +233,14 @@ class TestBang(SearxTestCase): # pylint:disable=missing-class-docstring
|
|||
SPECIFIC_BANGS = ['!dummy_engine', '!du', '!general']
|
||||
THE_QUERY = 'the query'
|
||||
|
||||
def test_bang(self):
|
||||
def setUp(self):
|
||||
load_engines(TEST_ENGINES)
|
||||
|
||||
def tearDown(self):
|
||||
load_engines([])
|
||||
|
||||
def test_bang(self):
|
||||
|
||||
for bang in TestBang.SPECIFIC_BANGS:
|
||||
with self.subTest(msg="Check bang", bang=bang):
|
||||
query_text = TestBang.THE_QUERY + ' ' + bang
|
||||
|
@ -247,7 +251,6 @@ class TestBang(SearxTestCase): # pylint:disable=missing-class-docstring
|
|||
self.assertEqual(query.user_query_parts, TestBang.THE_QUERY.split(' '))
|
||||
|
||||
def test_specific(self):
|
||||
load_engines(TEST_ENGINES)
|
||||
for bang in TestBang.SPECIFIC_BANGS:
|
||||
with self.subTest(msg="Check bang is specific", bang=bang):
|
||||
query_text = TestBang.THE_QUERY + ' ' + bang
|
||||
|
@ -255,12 +258,10 @@ class TestBang(SearxTestCase): # pylint:disable=missing-class-docstring
|
|||
self.assertTrue(query.specific)
|
||||
|
||||
def test_bang_not_found(self):
|
||||
load_engines(TEST_ENGINES)
|
||||
query = RawTextQuery('the query !bang_not_found', [])
|
||||
self.assertEqual(query.getFullQuery(), 'the query !bang_not_found')
|
||||
|
||||
def test_bang_autocomplete(self):
|
||||
load_engines(TEST_ENGINES)
|
||||
query = RawTextQuery('the query !dum', [])
|
||||
self.assertEqual(query.autocomplete_list, ['!dummy_engine'])
|
||||
|
||||
|
@ -269,7 +270,6 @@ class TestBang(SearxTestCase): # pylint:disable=missing-class-docstring
|
|||
self.assertEqual(query.getQuery(), '!dum the query')
|
||||
|
||||
def test_bang_autocomplete_empty(self):
|
||||
load_engines(settings['engines'])
|
||||
query = RawTextQuery('the query !', [])
|
||||
self.assertEqual(query.autocomplete_list, ['!images', '!wikipedia', '!osm'])
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# pylint: disable=missing-module-docstring
|
||||
|
||||
from os.path import dirname, join, abspath
|
||||
from pathlib import Path
|
||||
|
||||
import os
|
||||
from unittest.mock import patch
|
||||
|
||||
from searx.exceptions import SearxSettingsException
|
||||
|
@ -9,7 +11,8 @@ from searx import settings_loader
|
|||
from tests import SearxTestCase
|
||||
|
||||
|
||||
test_dir = abspath(dirname(__file__))
|
||||
def _settings(f_name):
|
||||
return str(Path(__file__).parent.absolute() / "settings" / f_name)
|
||||
|
||||
|
||||
class TestLoad(SearxTestCase): # pylint: disable=missing-class-docstring
|
||||
|
@ -18,16 +21,9 @@ class TestLoad(SearxTestCase): # pylint: disable=missing-class-docstring
|
|||
settings_loader.load_yaml('/dev/zero')
|
||||
|
||||
with self.assertRaises(SearxSettingsException):
|
||||
settings_loader.load_yaml(join(test_dir, '/settings/syntaxerror_settings.yml'))
|
||||
settings_loader.load_yaml(_settings("syntaxerror_settings.yml"))
|
||||
|
||||
with self.assertRaises(SearxSettingsException):
|
||||
settings_loader.load_yaml(join(test_dir, '/settings/empty_settings.yml'))
|
||||
|
||||
def test_existing_filename_or_none(self):
|
||||
self.assertIsNone(settings_loader.existing_filename_or_none('/dev/zero'))
|
||||
|
||||
bad_settings_path = join(test_dir, 'settings/syntaxerror_settings.yml')
|
||||
self.assertEqual(settings_loader.existing_filename_or_none(bad_settings_path), bad_settings_path)
|
||||
self.assertEqual(settings_loader.load_yaml(_settings("empty_settings.yml")), {})
|
||||
|
||||
|
||||
class TestDefaultSettings(SearxTestCase): # pylint: disable=missing-class-docstring
|
||||
|
@ -55,24 +51,22 @@ class TestUserSettings(SearxTestCase): # pylint: disable=missing-class-docstrin
|
|||
self.assertFalse(settings_loader.is_use_default_settings({'use_default_settings': 0}))
|
||||
|
||||
def test_user_settings_not_found(self):
|
||||
with patch.dict(settings_loader.environ, {'SEARXNG_SETTINGS_PATH': '/dev/null'}):
|
||||
settings, msg = settings_loader.load_settings()
|
||||
self.assertTrue(msg.startswith('load the default settings from'))
|
||||
self.assertEqual(settings['server']['secret_key'], "ultrasecretkey")
|
||||
with patch.dict(os.environ, {'SEARXNG_SETTINGS_PATH': _settings("not_exists.yml")}):
|
||||
with self.assertRaises(EnvironmentError):
|
||||
_s, _m = settings_loader.load_settings()
|
||||
with patch.dict(os.environ, {'SEARXNG_SETTINGS_PATH': "/folder/not/exists"}):
|
||||
with self.assertRaises(EnvironmentError):
|
||||
_s, _m = settings_loader.load_settings()
|
||||
|
||||
def test_user_settings(self):
|
||||
with patch.dict(
|
||||
settings_loader.environ, {'SEARXNG_SETTINGS_PATH': join(test_dir, 'settings/user_settings_simple.yml')}
|
||||
):
|
||||
with patch.dict(os.environ, {'SEARXNG_SETTINGS_PATH': _settings("user_settings_simple.yml")}):
|
||||
settings, msg = settings_loader.load_settings()
|
||||
self.assertTrue(msg.startswith('merge the default settings'))
|
||||
self.assertEqual(settings['server']['secret_key'], "user_secret_key")
|
||||
self.assertEqual(settings['server']['default_http_headers']['Custom-Header'], "Custom-Value")
|
||||
|
||||
def test_user_settings_remove(self):
|
||||
with patch.dict(
|
||||
settings_loader.environ, {'SEARXNG_SETTINGS_PATH': join(test_dir, 'settings/user_settings_remove.yml')}
|
||||
):
|
||||
with patch.dict(os.environ, {'SEARXNG_SETTINGS_PATH': _settings("user_settings_remove.yml")}):
|
||||
settings, msg = settings_loader.load_settings()
|
||||
self.assertTrue(msg.startswith('merge the default settings'))
|
||||
self.assertEqual(settings['server']['secret_key'], "user_secret_key")
|
||||
|
@ -83,9 +77,7 @@ class TestUserSettings(SearxTestCase): # pylint: disable=missing-class-docstrin
|
|||
self.assertIn('wikipedia', engine_names)
|
||||
|
||||
def test_user_settings_remove2(self):
|
||||
with patch.dict(
|
||||
settings_loader.environ, {'SEARXNG_SETTINGS_PATH': join(test_dir, 'settings/user_settings_remove2.yml')}
|
||||
):
|
||||
with patch.dict(os.environ, {'SEARXNG_SETTINGS_PATH': _settings("user_settings_remove2.yml")}):
|
||||
settings, msg = settings_loader.load_settings()
|
||||
self.assertTrue(msg.startswith('merge the default settings'))
|
||||
self.assertEqual(settings['server']['secret_key'], "user_secret_key")
|
||||
|
@ -101,9 +93,7 @@ class TestUserSettings(SearxTestCase): # pylint: disable=missing-class-docstrin
|
|||
self.assertEqual(newengine[0]['engine'], 'dummy')
|
||||
|
||||
def test_user_settings_keep_only(self):
|
||||
with patch.dict(
|
||||
settings_loader.environ, {'SEARXNG_SETTINGS_PATH': join(test_dir, 'settings/user_settings_keep_only.yml')}
|
||||
):
|
||||
with patch.dict(os.environ, {'SEARXNG_SETTINGS_PATH': _settings("user_settings_keep_only.yml")}):
|
||||
settings, msg = settings_loader.load_settings()
|
||||
self.assertTrue(msg.startswith('merge the default settings'))
|
||||
engine_names = [engine['name'] for engine in settings['engines']]
|
||||
|
@ -112,9 +102,7 @@ class TestUserSettings(SearxTestCase): # pylint: disable=missing-class-docstrin
|
|||
self.assertEqual(len(settings['engines'][2]), 1)
|
||||
|
||||
def test_custom_settings(self):
|
||||
with patch.dict(
|
||||
settings_loader.environ, {'SEARXNG_SETTINGS_PATH': join(test_dir, 'settings/user_settings.yml')}
|
||||
):
|
||||
with patch.dict(os.environ, {'SEARXNG_SETTINGS_PATH': _settings("user_settings.yml")}):
|
||||
settings, msg = settings_loader.load_settings()
|
||||
self.assertTrue(msg.startswith('load the user settings from'))
|
||||
self.assertEqual(settings['server']['port'], 9000)
|
||||
|
|
Loading…
Reference in a new issue