summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.config.sh55
-rw-r--r--.dockerignore8
-rw-r--r--.gitignore3
-rw-r--r--.travis.yml31
-rw-r--r--AUTHORS.rst12
-rw-r--r--CHANGELOG.rst50
-rw-r--r--Dockerfile15
-rw-r--r--Makefile229
-rw-r--r--README.rst96
-rw-r--r--debian/changelog25
-rw-r--r--debian/clean1
-rw-r--r--debian/control4
-rw-r--r--debian/copyright1
-rw-r--r--debian/patches/clean-gruntfiles4
-rw-r--r--debian/patches/encoding11
-rw-r--r--debian/patches/makefile46
-rw-r--r--debian/patches/managesh39
-rw-r--r--debian/patches/series3
-rw-r--r--debian/patches/setuppy2
-rwxr-xr-xdebian/rules4
-rw-r--r--debian/salsa-ci.yml9
-rw-r--r--debian/tests/general9
-rw-r--r--dockerfiles/uwsgi.ini4
-rw-r--r--docs/_themes/searx/static/searx.css41
-rw-r--r--docs/admin/arch_public.dot8
-rw-r--r--docs/admin/architecture.rst14
-rw-r--r--docs/admin/buildhosts.rst74
-rw-r--r--docs/admin/engines.rst4
-rw-r--r--docs/admin/filtron.rst247
-rw-r--r--docs/admin/index.rst9
-rw-r--r--docs/admin/installation-apache.rst514
-rw-r--r--docs/admin/installation-docker.rst28
-rw-r--r--docs/admin/installation-nginx.rst381
-rw-r--r--docs/admin/installation-searx.rst92
-rw-r--r--docs/admin/installation-uwsgi.rst150
-rw-r--r--docs/admin/installation.rst357
-rw-r--r--docs/admin/morty.rst7
-rw-r--r--docs/admin/settings.rst13
-rw-r--r--docs/admin/update-searx.rst23
-rw-r--r--docs/blog/index.rst5
-rw-r--r--docs/blog/lxcdev-202006.rst413
-rw-r--r--docs/blog/private-engines.rst63
-rw-r--r--docs/build-templates/filtron.rst52
-rw-r--r--docs/build-templates/morty.rst52
-rw-r--r--docs/build-templates/searx.rst192
-rw-r--r--docs/conf.py24
-rw-r--r--docs/dev/contribution_guide.rst5
-rw-r--r--docs/dev/engine_overview.rst1
-rw-r--r--docs/dev/index.rst3
-rw-r--r--docs/dev/makefile.rst48
-rw-r--r--docs/dev/plugins.rst8
-rw-r--r--docs/dev/quickstart.rst10
-rw-r--r--docs/dev/reST.rst12
-rw-r--r--docs/dev/search_api.rst4
-rw-r--r--docs/index.rst20
-rw-r--r--docs/user/conf.py19
-rw-r--r--docs/user/index.rst4
-rw-r--r--docs/user/own-instance.rst10
-rw-r--r--docs/user/public_instances.rst318
-rw-r--r--docs/utils/filtron.sh.rst80
-rw-r--r--docs/utils/index.rst53
-rw-r--r--docs/utils/lxc.sh.rst149
-rw-r--r--docs/utils/morty.sh.rst80
-rw-r--r--docs/utils/searx.sh.rst39
-rwxr-xr-xmanage.sh108
-rw-r--r--requirements-dev.txt3
-rw-r--r--requirements.txt18
-rw-r--r--searx/__init__.py1
-rw-r--r--searx/autocomplete.py9
-rw-r--r--searx/brand.py6
-rw-r--r--searx/data/engines_languages.json55819
-rw-r--r--searx/data/useragents.json13
-rw-r--r--searx/engines/__init__.py10
-rw-r--r--searx/engines/bing.py23
-rw-r--r--searx/engines/bing_images.py21
-rw-r--r--searx/engines/bing_news.py4
-rw-r--r--searx/engines/bing_videos.py6
-rw-r--r--searx/engines/duckduckgo.py6
-rw-r--r--searx/engines/dummy-offline.py12
-rw-r--r--searx/engines/etools.py54
-rw-r--r--searx/engines/faroo.py96
-rw-r--r--searx/engines/flickr_noapi.py12
-rw-r--r--searx/engines/genius.py1
-rw-r--r--searx/engines/gigablast.py167
-rw-r--r--searx/engines/google.py529
-rw-r--r--searx/engines/google_images.py246
-rw-r--r--searx/engines/google_news.py2
-rw-r--r--searx/engines/openstreetmap.py13
-rw-r--r--searx/engines/startpage.py7
-rw-r--r--searx/engines/wikidata.py10
-rw-r--r--searx/engines/yacy.py2
-rw-r--r--searx/engines/yahoo.py2
-rw-r--r--searx/engines/youtube_noapi.py4
-rw-r--r--searx/external_bang.py43
-rw-r--r--searx/languages.py16
-rw-r--r--searx/plugins/self_info.py6
-rw-r--r--searx/preferences.py253
-rw-r--r--searx/query.py13
-rw-r--r--searx/results.py10
-rw-r--r--searx/search.py38
-rw-r--r--searx/settings.yml99
-rw-r--r--searx/settings_robot.yml4
-rw-r--r--searx/static/plugins/js/infinite_scroll.js50
-rw-r--r--searx/static/plugins/js/search_on_category_select.js18
-rw-r--r--searx/static/themes/legacy/less/style.less4
-rw-r--r--searx/static/themes/oscar/.gitignore2
-rw-r--r--searx/static/themes/oscar/gruntfile.js4
-rw-r--r--searx/static/themes/oscar/js/searx.js29
-rw-r--r--searx/static/themes/oscar/js/searx_src/autocompleter.js12
-rw-r--r--searx/static/themes/oscar/js/searx_src/element_modifiers.js5
-rw-r--r--searx/static/themes/oscar/js/searx_src/leaflet_map.js2
-rw-r--r--searx/static/themes/oscar/js/searx_src/toggleall.js10
-rw-r--r--searx/static/themes/oscar/less/logicodev/advanced.less4
-rw-r--r--searx/static/themes/oscar/less/logicodev/infobox.less2
-rw-r--r--searx/static/themes/oscar/less/logicodev/onoff.less21
-rw-r--r--searx/static/themes/oscar/less/logicodev/preferences.less12
-rw-r--r--searx/static/themes/oscar/less/logicodev/results.less10
-rw-r--r--searx/static/themes/oscar/less/logicodev/search.less29
-rw-r--r--searx/static/themes/oscar/less/logicodev/variables.less9
-rw-r--r--searx/static/themes/oscar/package.json11
-rw-r--r--searx/static/themes/simple/.gitignore1
-rw-r--r--searx/static/themes/simple/gruntfile.js6
-rw-r--r--searx/static/themes/simple/js/searx_src/searx_mapresult.js2
-rw-r--r--searx/static/themes/simple/less/style.less4
-rw-r--r--searx/templates/__common__/about.html142
-rw-r--r--searx/templates/__common__/opensearch.xml20
-rw-r--r--searx/templates/__common__/opensearch_response_rss.xml24
-rw-r--r--searx/templates/__common__/translations.js.tpl1
-rw-r--r--searx/templates/courgette/base.html2
-rw-r--r--searx/templates/courgette/github_ribbon.html2
-rw-r--r--searx/templates/courgette/preferences.html4
-rw-r--r--searx/templates/courgette/result_templates/code.html2
-rw-r--r--searx/templates/courgette/result_templates/default.html2
-rw-r--r--searx/templates/courgette/result_templates/images.html2
-rw-r--r--searx/templates/courgette/result_templates/key-value.html2
-rw-r--r--searx/templates/courgette/result_templates/map.html2
-rw-r--r--searx/templates/courgette/result_templates/torrent.html2
-rw-r--r--searx/templates/courgette/result_templates/videos.html2
-rw-r--r--searx/templates/courgette/search.html2
-rw-r--r--searx/templates/legacy/base.html2
-rw-r--r--searx/templates/legacy/preferences.html4
-rw-r--r--searx/templates/legacy/result_templates/code.html2
-rw-r--r--searx/templates/legacy/result_templates/default.html2
-rw-r--r--searx/templates/legacy/result_templates/images.html2
-rw-r--r--searx/templates/legacy/result_templates/key-value.html2
-rw-r--r--searx/templates/legacy/result_templates/map.html2
-rw-r--r--searx/templates/legacy/result_templates/torrent.html2
-rw-r--r--searx/templates/legacy/result_templates/videos.html2
-rw-r--r--searx/templates/legacy/results.html8
-rw-r--r--searx/templates/legacy/search.html2
-rw-r--r--searx/templates/oscar/advanced.html2
-rw-r--r--searx/templates/oscar/base.html18
-rw-r--r--searx/templates/oscar/index.html4
-rw-r--r--searx/templates/oscar/infobox.html9
-rw-r--r--searx/templates/oscar/languages.html1
-rw-r--r--searx/templates/oscar/macros.html33
-rw-r--r--searx/templates/oscar/preferences.html152
-rw-r--r--searx/templates/oscar/result_templates/code.html4
-rw-r--r--searx/templates/oscar/result_templates/default.html12
-rw-r--r--searx/templates/oscar/result_templates/images.html4
-rw-r--r--searx/templates/oscar/result_templates/map.html8
-rw-r--r--searx/templates/oscar/result_templates/torrent.html8
-rw-r--r--searx/templates/oscar/result_templates/videos.html14
-rw-r--r--searx/templates/oscar/results.html12
-rw-r--r--searx/templates/oscar/search.html3
-rw-r--r--searx/templates/oscar/search_full.html3
-rw-r--r--searx/templates/oscar/time-range.html1
-rw-r--r--searx/templates/pix-art/search.html2
-rw-r--r--searx/templates/simple/base.html9
-rw-r--r--searx/templates/simple/macros.html2
-rw-r--r--searx/templates/simple/results.html10
-rw-r--r--searx/templates/simple/search.html2
-rw-r--r--searx/testing.py29
-rw-r--r--searx/translations/ar/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/bg/LC_MESSAGES/messages.po528
-rw-r--r--searx/translations/bo/LC_MESSAGES/messages.po565
-rw-r--r--searx/translations/ca/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/cs/LC_MESSAGES/messages.po543
-rw-r--r--searx/translations/cy/LC_MESSAGES/messages.po528
-rw-r--r--searx/translations/da/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/de/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/el_GR/LC_MESSAGES/messages.po528
-rw-r--r--searx/translations/eo/LC_MESSAGES/messages.po536
-rw-r--r--searx/translations/es/LC_MESSAGES/messages.po536
-rw-r--r--searx/translations/et/LC_MESSAGES/messages.po559
-rw-r--r--searx/translations/eu/LC_MESSAGES/messages.po530
-rw-r--r--searx/translations/fa_IR/LC_MESSAGES/messages.po539
-rw-r--r--searx/translations/fi/LC_MESSAGES/messages.po530
-rw-r--r--searx/translations/fil/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/fr/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/gl/LC_MESSAGES/messages.po534
-rw-r--r--searx/translations/he/LC_MESSAGES/messages.po530
-rw-r--r--searx/translations/hr/LC_MESSAGES/messages.po534
-rw-r--r--searx/translations/hu/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/ia/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/it/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/ja/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/lt/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/nl/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/nl_BE/LC_MESSAGES/messages.po530
-rw-r--r--searx/translations/oc/LC_MESSAGES/messages.po534
-rw-r--r--searx/translations/pt/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/pt_BR/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/ro/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/ru/LC_MESSAGES/messages.po530
-rw-r--r--searx/translations/sk/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/sl/LC_MESSAGES/messages.po530
-rw-r--r--searx/translations/sr/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/sv/LC_MESSAGES/messages.po538
-rw-r--r--searx/translations/ta/LC_MESSAGES/messages.po528
-rw-r--r--searx/translations/te/LC_MESSAGES/messages.po528
-rw-r--r--searx/translations/tr/LC_MESSAGES/messages.po528
-rw-r--r--searx/translations/uk/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/vi/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/zh_CN/LC_MESSAGES/messages.po532
-rw-r--r--searx/translations/zh_TW/LC_MESSAGES/messages.po532
-rw-r--r--searx/version.py2
-rwxr-xr-x[-rw-r--r--]searx/webapp.py250
-rw-r--r--setup.py9
-rw-r--r--tests/unit/test_plugins.py18
-rw-r--r--tests/unit/test_search.py111
-rw-r--r--tests/unit/test_webapp.py11
-rw-r--r--utils/brand.env6
-rwxr-xr-xutils/fetch_firefox_version.py2
-rw-r--r--utils/fetch_languages.py23
-rwxr-xr-xutils/filtron.sh561
-rwxr-xr-xutils/lib.sh1519
-rw-r--r--utils/lxc-searx.env95
-rwxr-xr-xutils/lxc.sh552
-rw-r--r--utils/makefile.include16
-rw-r--r--utils/makefile.lxc29
-rw-r--r--utils/makefile.python77
-rw-r--r--utils/makefile.sphinx26
-rwxr-xr-xutils/morty.sh546
-rwxr-xr-xutils/searx.sh883
-rw-r--r--utils/site-python/sphinx_build_tools.py48
l---------utils/templates/etc/apache21
-rw-r--r--utils/templates/etc/filtron/rules.json129
-rw-r--r--utils/templates/etc/httpd/sites-available/morty.conf28
-rw-r--r--utils/templates/etc/httpd/sites-available/searx.conf:filtron33
-rw-r--r--utils/templates/etc/httpd/sites-available/searx.conf:uwsgi27
-rw-r--r--utils/templates/etc/nginx/default.apps-available/morty.conf11
-rw-r--r--utils/templates/etc/nginx/default.apps-available/searx.conf:filtron16
-rw-r--r--utils/templates/etc/uwsgi/apps-archlinux/searx.ini80
-rw-r--r--utils/templates/etc/uwsgi/apps-archlinux/searx.ini:socket80
-rw-r--r--utils/templates/etc/uwsgi/apps-available/searx.ini79
-rw-r--r--utils/templates/etc/uwsgi/apps-available/searx.ini:socket79
-rw-r--r--utils/templates/lib/systemd/system/filtron.service29
-rw-r--r--utils/templates/lib/systemd/system/morty.service29
249 files changed, 51766 insertions, 39380 deletions
diff --git a/.config.sh b/.config.sh
new file mode 100644
index 0000000..4eff5f4
--- /dev/null
+++ b/.config.sh
@@ -0,0 +1,55 @@
+# -*- coding: utf-8; mode: sh -*-
+# SPDX-License-Identifier: AGPL-3.0-or-later
+# shellcheck shell=bash disable=SC2034
+#
+# This environment is used by ./utils scripts like filtron.sh or searx.sh. The
+# default values are *most flexible* and *best maintained*, you normally not
+# need to change the defaults (except PUBLIC_URL).
+#
+# Before you change any value here you have to uninstall any previous
+# installation. Further is it recommended to backup your changes simply by
+# adding them to you local brand (git branch)::
+#
+# git add .config
+
+# The public URL of the searx instance: PUBLIC_URL="https://mydomain.xy/searx"
+# The default is taken from ./utils/brand.env.
+
+PUBLIC_URL="${SEARX_URL}"
+
+if [[ ${PUBLIC_URL} == "https://searx.me" ]]; then
+ # hint: Linux containers do not have DNS entries, lets use IPs
+ PUBLIC_URL="http://$(primary_ip)/searx"
+fi
+
+# searx.sh
+# ---------
+
+# SEARX_INTERNAL_URL="127.0.0.1:8888"
+
+# Only change, if you maintain a searx brand in your searx fork.
+# GIT_BRANCH="${GIT_BRANCH:-master}"
+
+# filtron.sh
+# ----------
+
+# FILTRON_API="127.0.0.1:4005"
+# FILTRON_LISTEN="127.0.0.1:4004"
+# FILTRON_TARGET="127.0.0.1:8888"
+
+# morty.sh
+# --------
+
+# morty listen address
+# MORTY_LISTEN="127.0.0.1:3000"
+# PUBLIC_URL_PATH_MORTY="/morty/"
+
+# system services
+# ---------------
+
+# Common $HOME folder of the service accounts
+# SERVICE_HOME_BASE="/usr/local"
+
+# **experimental**: Set SERVICE_USER to run all services by one account, but be
+# aware that removing discrete components might conflict!
+# SERVICE_USER=searx
diff --git a/.dockerignore b/.dockerignore
index f4d0337..044460b 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -4,6 +4,9 @@
*/*/*/*~
*/*/*/*/*~
+#
+local/
+
# Git
.git
.gitignore
@@ -36,6 +39,11 @@ robot_report.html
test_basic/
setup.cfg
+# node_modules
node_modules/
+*/node_modules/
+*/*/node_modules/
+*/*/*/node_modules/
+*/*/*/*/node_modules/
.tx/ \ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 069dfd3..e56a575 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
# to sync with .dockerignore
.coverage
coverage/
+cache/
.installed.cfg
engines.cfg
env
@@ -15,7 +16,7 @@ setup.cfg
*/*.pyc
*~
-node_modules/
+/node_modules
.tx/
diff --git a/.travis.yml b/.travis.yml
index e37b658..f6fa9c9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,26 +1,24 @@
+os: linux
+dist: bionic
language: python
-sudo: false
cache:
- - pip
- - npm
- directories:
- $HOME/.cache/pip
-
addons:
firefox: "latest"
install:
- - ./manage.sh install_geckodriver ~/drivers
- - export PATH=~/drivers:$PATH
- - ./manage.sh npm_packages
- - ./manage.sh update_dev_packages
- - pip install codecov
+ - env
+ - which python; python --version
+ - make V=1 install
+ - make V=1 gecko.driver
+ - make V=1 node.env
+ - make V=1 travis.codecov
script:
- - ./manage.sh styles
- - ./manage.sh grunt_build
- - ./manage.sh tests
+ - make V=1 themes
+ - make V=1 test
after_success:
- - ./manage.sh py_test_coverage
+ - make V=1 test.coverage
- codecov
stages:
@@ -31,10 +29,13 @@ stages:
jobs:
include:
- python: "2.7"
+ env: PY=2
- python: "3.5"
- python: "3.6"
+ - python: "3.7"
+ - python: "3.8"
- stage: docker
- python: "3.6"
+ python: "3.8"
git:
depth: false
services:
@@ -44,7 +45,7 @@ jobs:
install: true
script:
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
- - ./manage.sh docker_build push
+ - make -e GIT_URL=$(git remote get-url origin) docker.push
after_success: true
notifications:
diff --git a/AUTHORS.rst b/AUTHORS.rst
index 9ab78b0..fc2cacc 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -1,4 +1,4 @@
-Searx was created by Adam Tauber and is maintained by Adam Tauber, Alexandre Flament, Noémi Ványi, @pofilo and Markus Heiser.
+Searx was created by Adam Tauber and is maintained by Adam Tauber, Alexandre Flament, Noémi Ványi, @pofilo, Gaspard d'Hautefeuille and Markus Heiser.
Major contributing authors:
@@ -123,3 +123,13 @@ generally made searx better:
- Vipul @finn0
- @CaffeinatedTech
- Robin Schneider @ypid
+- @splintah
+- Lukas van den Berk @lukasvdberk
+- @piplongrun
+- Jason Kaltsikis @jjasonkal
+- Sion Kazama @KazamaSion
+- @resynth1943
+- Mostafa Ahangarha @ahangarha
+- @gordon-quad
+- Sophie Tauchert @999eagle
+- @bauruine
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index b921788..c665602 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,3 +1,53 @@
+0.17.0 2020.07.09
+=================
+
+ - New engines
+
+ - eTools
+ - Wikibooks
+ - Wikinews
+ - Wikiquote
+ - Wikisource
+ - Wiktionary
+ - Wikiversity
+ - Wikivoyage
+ - Rubygems
+ - Engine fixes (google, google images, startpage, gigablast, yacy)
+ - Private engines introduced - more details: https://asciimoo.github.io/searx/blog/private-engines.html
+ - Greatly improved documentation - check it at https://asciimoo.github.io/searx
+ - Added autofocus to all search inputs
+ - CSP friendly oscar theme
+ - Added option to hide engine errors with `display_error_messages` engine option (true/false values, default is true)
+ - Tons of accessibility fixes - see https://github.com/asciimoo/searx/issues/350 for details
+ - More flexible branding options: configurable vcs/issue tracker links
+ - Added "disable all" & "allow all" options to preferences engine select
+ - Autocomplete keyboard navigation fixes
+ - Configurable category order
+ - Wrap long lines in infoboxes
+ - Added RSS subscribtion link
+ - Added routing directions to OSM results
+ - Added author and length attributes to youtube videos
+ - Fixed image stretch with mobile viewport in oscar theme
+ - Added translatable JS strings
+ - Better HTML annotations - engine names and endpoints are available as classes
+ - RTL text fixes in oscar theme
+ - Handle weights in accept-language HTTP headers
+ - Added answerer results to rss/csv output
+ - Added new autocomplete backends to settings.yml
+ - Updated opensearch.xml
+ - Fixed custom locale setting from settings.yml
+ - Translation updates
+ - Removed engines: faroo
+
+Special thanks to `NLNet <https://nlnet.nl>`__ for sponsoring multiple features of this release.
+Special thanks to https://www.accessibility.nl/english for making accessibilty audit.
+
+News
+~~~~
+
+- @HLFH joined the maintainer team
+- Dropped Python2 support
+
0.16.0 2020.01.30
=================
diff --git a/Dockerfile b/Dockerfile
index b0b5a60..59098e0 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,6 +4,7 @@ EXPOSE 8080
VOLUME /etc/searx
VOLUME /var/log/uwsgi
+ARG GIT_URL=unknown
ARG VERSION_GITCOMMIT=unknown
ARG SEARX_GIT_VERSION=unknown
@@ -52,7 +53,8 @@ RUN apk upgrade --no-cache \
uwsgi-python3 \
&& pip3 install --upgrade pip \
&& pip3 install --no-cache -r requirements.txt \
- && apk del build-dependencies
+ && apk del build-dependencies \
+ && rm -rf /root/.cache
COPY --chown=searx:searx . .
@@ -66,7 +68,7 @@ RUN su searx -c "/usr/bin/python3 -m compileall -q searx"; \
# Keep this argument at the end since it change each time
ARG LABEL_DATE=
-LABEL maintainer="searx <https://github.com/asciimoo/searx>" \
+LABEL maintainer="searx <${GIT_URL}>" \
description="A privacy-respecting, hackable metasearch engine." \
version="${SEARX_GIT_VERSION}" \
org.label-schema.schema-version="1.0" \
@@ -76,4 +78,11 @@ LABEL maintainer="searx <https://github.com/asciimoo/searx>" \
org.label-schema.vcs-ref=${LABEL_VCS_REF} \
org.label-schema.vcs-url=${LABEL_VCS_URL} \
org.label-schema.build-date="${LABEL_DATE}" \
- org.label-schema.usage="https://github.com/searx/searx-docker"
+ org.label-schema.usage="https://github.com/searx/searx-docker" \
+ org.opencontainers.image.title="searx" \
+ org.opencontainers.image.version="${SEARX_GIT_VERSION}" \
+ org.opencontainers.image.url="${LABEL_VCS_URL}" \
+ org.opencontainers.image.revision=${LABEL_VCS_REF} \
+ org.opencontainers.image.source=${LABEL_VCS_URL} \
+ org.opencontainers.image.created="${LABEL_DATE}" \
+ org.opencontainers.image.documentation="https://github.com/searx/searx-docker"
diff --git a/Makefile b/Makefile
index f35b86c..bc78750 100644
--- a/Makefile
+++ b/Makefile
@@ -1,24 +1,31 @@
# -*- coding: utf-8; mode: makefile-gmake -*-
+.DEFAULT_GOAL=help
+# START Makefile setup
export GIT_URL=https://github.com/asciimoo/searx
+export GIT_BRANCH=master
export SEARX_URL=https://searx.me
export DOCS_URL=https://asciimoo.github.io/searx
+# END Makefile setup
+
+include utils/makefile.include
PYOBJECTS = searx
DOC = docs
PY_SETUP_EXTRAS ?= \[test\]
-PYDIST=./dist/py
-PYBUILD=./build/py
-
-include utils/makefile.include
include utils/makefile.python
include utils/makefile.sphinx
all: clean install
-PHONY += help
-help:
+PHONY += help-min help-all help
+
+help: help-min
+ @echo ''
+ @echo 'to get more help: make help-all'
+
+help-min:
@echo ' test - run developer tests'
@echo ' docs - build documentation'
@echo ' docs-live - autobuild HTML documentation while editing'
@@ -27,23 +34,37 @@ help:
@echo ' uninstall - uninstall (./local)'
@echo ' gh-pages - build docs & deploy on gh-pages branch'
@echo ' clean - drop builds and environments'
+ @echo ' project - re-build generic files of the searx project'
+ @echo ' buildenv - re-build environment files (aka brand)'
+ @echo ' themes - re-build build the source of the themes'
+ @echo ' docker - build Docker image'
+ @echo ' node.env - download & install npm dependencies locally'
@echo ''
- @$(MAKE) -s -f utils/makefile.include make-help
+ @echo 'environment'
+ @echo ' SEARX_URL = $(SEARX_URL)'
+ @echo ' GIT_URL = $(GIT_URL)'
+ @echo ' DOCS_URL = $(DOCS_URL)'
@echo ''
- @$(MAKE) -s -f utils/makefile.python python-help
+ @$(MAKE) -e -s make-help
+
+help-all: help-min
+ @echo ''
+ @$(MAKE) -e -s python-help
+ @echo ''
+ @$(MAKE) -e -s docs-help
PHONY += install
-install: pyenvinstall
+install: buildenv pyenvinstall
PHONY += uninstall
uninstall: pyenvuninstall
PHONY += clean
-clean: pyclean
+clean: pyclean docs-clean node.clean test.clean
$(call cmd,common_clean)
PHONY += run
-run: pyenvinstall
+run: buildenv pyenvinstall
$(Q) ( \
sed -i -e "s/debug : False/debug : True/g" ./searx/settings.yml ; \
sleep 2 ; \
@@ -56,34 +77,200 @@ run: pyenvinstall
# docs
# ----
+sphinx-doc-prebuilds:: buildenv pyenvinstall prebuild-includes
+
PHONY += docs
-docs: pyenvinstall sphinx-doc
+docs: sphinx-doc-prebuilds sphinx-doc
$(call cmd,sphinx,html,docs,docs)
PHONY += docs-live
-docs-live: pyenvinstall sphinx-live
+docs-live: sphinx-doc-prebuilds sphinx-live
$(call cmd,sphinx_autobuild,html,docs,docs)
+PHONY += prebuild-includes
+prebuild-includes:
+ $(Q)mkdir -p $(DOCS_BUILD)/includes
+ $(Q)./utils/searx.sh doc | cat > $(DOCS_BUILD)/includes/searx.rst
+ $(Q)./utils/filtron.sh doc | cat > $(DOCS_BUILD)/includes/filtron.rst
+ $(Q)./utils/morty.sh doc | cat > $(DOCS_BUILD)/includes/morty.rst
+
+
$(GH_PAGES)::
@echo "doc available at --> $(DOCS_URL)"
+# update project files
+# --------------------
+
+PHONY += project engines.languages useragents.update buildenv
+
+project: buildenv useragents.update engines.languages
+
+engines.languages: pyenvinstall
+ $(Q)echo "fetch languages .."
+ $(Q)$(PY_ENV_ACT); python utils/fetch_languages.py
+ $(Q)echo "update searx/data/engines_languages.json"
+ $(Q)mv engines_languages.json searx/data/engines_languages.json
+ $(Q)echo "update searx/languages.py"
+ $(Q)mv languages.py searx/languages.py
+
+useragents.update: pyenvinstall
+ $(Q)echo "Update searx/data/useragents.json with the most recent versions of Firefox."
+ $(Q)$(PY_ENV_ACT); python utils/fetch_firefox_version.py
+
+buildenv:
+ $(Q)echo "build searx/brand.py"
+ $(Q)echo "GIT_URL = '$(GIT_URL)'" > searx/brand.py
+ $(Q)echo "GIT_BRANCH = '$(GIT_BRANCH)'" >> searx/brand.py
+ $(Q)echo "ISSUE_URL = 'https://github.com/asciimoo/searx/issues'" >> searx/brand.py
+ $(Q)echo "SEARX_URL = '$(SEARX_URL)'" >> searx/brand.py
+ $(Q)echo "DOCS_URL = '$(DOCS_URL)'" >> searx/brand.py
+ $(Q)echo "PUBLIC_INSTANCES = 'https://searx.space'" >> searx/brand.py
+ $(Q)echo "build utils/brand.env"
+ $(Q)echo "export GIT_URL='$(GIT_URL)'" > utils/brand.env
+ $(Q)echo "export GIT_BRANCH='$(GIT_BRANCH)'" >> utils/brand.env
+ $(Q)echo "export ISSUE_URL='https://github.com/asciimoo/searx/issues'" >> utils/brand.env
+ $(Q)echo "export SEARX_URL='$(SEARX_URL)'" >> utils/brand.env
+ $(Q)echo "export DOCS_URL='$(DOCS_URL)'" >> utils/brand.env
+ $(Q)echo "export PUBLIC_INSTANCES='https://searx.space'" >> utils/brand.env
+
+
+# node / npm
+# ----------
+
+node.env: buildenv
+
+node.clean:
+ $(Q)echo "CLEAN locally installed npm dependencies"
+ $(Q)rm -rf \
+ ./node_modules \
+ ./package-lock.json \
+ ./searx/static/themes/oscar/package-lock.json \
+ ./searx/static/themes/oscar/node_modules \
+ ./searx/static/themes/simple/package-lock.json \
+ ./searx/static/themes/simple/node_modules
+
+# build themes
+# ------------
+
+PHONY += themes.bootstrap themes themes.oscar themes.simple themes.legacy themes.courgette themes.pixart
+themes: buildenv themes.bootstrap themes.oscar themes.simple themes.legacy themes.courgette themes.pixart
+
+quiet_cmd_lessc = LESSC $3
+ cmd_lessc = lessc -x "searx/static/$2" "searx/static/$3"
+
+quiet_cmd_grunt = GRUNT $2
+ cmd_grunt = grunt --gruntfile "$2"
+
+themes.oscar: node.env
+ $(Q)echo '[!] build oscar theme'
+ $(call cmd,grunt,searx/static/themes/oscar/gruntfile.js)
+ $(call cmd,lessc,themes/oscar/less/logicodev/oscar.less,themes/oscar/css/logicodev.min.css)
+ $(call cmd,lessc,themes/oscar/less/logicodev-dark/oscar.less,themes/oscar/css/logicodev-dark.min.css)
+ $(call cmd,lessc,themes/oscar/less/pointhi/oscar.less,themes/oscar/css/pointhi.min.css)
+
+themes.simple: node.env
+ $(Q)echo '[!] build simple theme'
+ $(call cmd,grunt,searx/static/themes/simple/gruntfile.js)
+ $(call cmd,lessc,themes/simple/less/style-rtl.less,themes/simple/css/style-rtl.min.css)
+ $(call cmd,lessc,themes/simple/less/style.less,themes/simple/css/style.min.css)
+
+themes.legacy: node.env
+ $(Q)echo '[!] build legacy theme'
+ $(call cmd,lessc,themes/legacy/less/style-rtl.less,themes/legacy/css/style-rtl.css)
+ $(call cmd,lessc,themes/legacy/less/style.less,themes/legacy/css/style.css)
+
+themes.courgette: node.env
+ $(Q)echo '[!] build courgette theme'
+ $(call cmd,lessc,themes/courgette/less/style.less,themes/courgette/css/style.css)
+ $(call cmd,lessc,themes/courgette/less/style-rtl.less,themes/courgette/css/style-rtl.css)
+
+themes.pixart: node.env
+ $(Q)echo '[!] build pixart theme'
+ $(call cmd,lessc,themes/pix-art/less/style.less,themes/pix-art/css/style.css)
+
+themes.bootstrap: node.env
+
+
+# docker
+# ------
+
+PHONY += docker
+docker: buildenv
+ $(Q)./manage.sh docker_build
+
+docker.push: buildenv
+ $(Q)./manage.sh docker_build push
+
+# gecko
+# -----
+
+PHONY += gecko.driver
+gecko.driver:
+ $(PY_ENV_ACT); ./manage.sh install_geckodriver
+
# test
# ----
-PHONY += test test.pylint test.pep8 test.unit test.robot
+PHONY += test test.sh test.pylint test.pep8 test.unit test.coverage test.robot
+test: buildenv test.pylint test.pep8 test.unit gecko.driver test.robot
+ifeq ($(PY),2)
+test.pylint:
+ @echo "LINT skip liniting py2"
+else
# TODO: balance linting with pylint
-test: test.pep8 test.unit test.robot
- - make pylint
+
+test.pylint: pyenvinstall
+ $(call cmd,pylint,\
+ searx/preferences.py \
+ searx/testing.py \
+ searx/engines/gigablast.py \
+ )
+endif
+
+# ignored rules:
+# E402 module level import not at top of file
+# W503 line break before binary operator
+
+# ubu1604: uses shellcheck v0.3.7 (from 04/2015), no longer supported!
+test.sh:
+ shellcheck -x -s bash utils/brand.env
+ shellcheck -x utils/lib.sh
+ shellcheck -x utils/filtron.sh
+ shellcheck -x utils/searx.sh
+ shellcheck -x utils/morty.sh
+ shellcheck -x utils/lxc.sh
+ shellcheck -x utils/lxc-searx.env
+ shellcheck -x .config.sh
test.pep8: pyenvinstall
- $(PY_ENV_ACT); ./manage.sh pep8_check
+ @echo "TEST pep8"
+ $(Q)$(PY_ENV_ACT); pep8 --exclude='searx/static, searx/engines/gigablast.py' --max-line-length=120 --ignore "E402,W503" searx tests
test.unit: pyenvinstall
- $(PY_ENV_ACT); ./manage.sh unit_tests
+ @echo "TEST tests/unit"
+ $(Q)$(PY_ENV_ACT); python -m nose2 -s tests/unit
-test.robot: pyenvinstall
- $(PY_ENV_ACT); ./manage.sh install_geckodriver
- $(PY_ENV_ACT); ./manage.sh robot_tests
+test.coverage: pyenvinstall
+ @echo "TEST unit test coverage"
+ $(Q)$(PY_ENV_ACT); \
+ python -m nose2 -C --log-capture --with-coverage --coverage searx -s tests/unit \
+ && coverage report \
+ && coverage html \
+
+test.robot: pyenvinstall gecko.driver
+ @echo "TEST robot"
+ $(Q)$(PY_ENV_ACT); PYTHONPATH=. python searx/testing.py robot
+
+test.clean:
+ @echo "CLEAN intermediate test stuff"
+ $(Q)rm -rf geckodriver.log .coverage coverage/
+
+
+# travis
+# ------
+
+travis.codecov:
+ $(Q)$(PY_ENV_BIN)/python -m pip install codecov
.PHONY: $(PHONY)
diff --git a/README.rst b/README.rst
index 7fcda4f..55deb67 100644
--- a/README.rst
+++ b/README.rst
@@ -1,63 +1,73 @@
-searx
-=====
+.. SPDX-License-Identifier: AGPL-3.0-or-later
+
+.. figure:: https://raw.githubusercontent.com/asciimoo/searx/master/searx/static/themes/oscar/img/logo_searx_a.png
+ :target: https://asciimoo.github.io/searx/
+ :alt: searX
+ :width: 100%
+ :align: center
+
+-------
+
+|searx install|
+|searx homepage|
+|searx wiki|
+|AGPL License|
+|Issues|
+|commits|
+|OpenCollective searx backers|
+|OpenCollective searx sponsors|
-A privacy-respecting, hackable `metasearch
-engine <https://en.wikipedia.org/wiki/Metasearch_engine>`__.
+Privacy-respecting, hackable `metasearch engine`_ / *pronunciation* **səːks**.
-Pronunciation: səːks
+.. _metasearch engine: https://en.wikipedia.org/wiki/Metasearch_engine
-List of `running
-instances <https://github.com/asciimoo/searx/wiki/Searx-instances>`__.
+.. |searx install| image:: https://img.shields.io/badge/-install-blue
+ :target: https://asciimoo.github.io/searx/admin/installation.html
-See the `documentation <https://asciimoo.github.io/searx>`__ and the `wiki <https://github.com/asciimoo/searx/wiki>`__ for more information.
+.. |searx homepage| image:: https://img.shields.io/badge/-homepage-blue
+ :target: https://asciimoo.github.io/searx
-|OpenCollective searx backers|
-|OpenCollective searx sponsors|
+.. |searx wiki| image:: https://img.shields.io/badge/-wiki-blue
+ :target: https://github.com/asciimoo/searx/wiki
-Installation
-~~~~~~~~~~~~
+.. |AGPL License| image:: https://img.shields.io/badge/license-AGPL-blue.svg
+ :target: https://github.com/asciimoo/searx/blob/master/LICENSE
-With Docker
-------
-Go to the `searx-docker <https://github.com/searx/searx-docker>`__ project.
+.. |Issues| image:: https://img.shields.io/github/issues/asciimoo/searx?color=yellow&label=issues
+ :target: https://github.com/asciimoo/searx/issues
-Without Docker
-------
-For all of the details, follow this `step by step installation <https://asciimoo.github.io/searx/dev/install/installation.html>`__.
+.. |PR| image:: https://img.shields.io/github/issues-pr-raw/asciimoo/searx?color=yellow&label=PR
+ :target: https://github.com/asciimoo/searx/pulls
-Note: the documentation needs to be updated.
+.. |commits| image:: https://img.shields.io/github/commit-activity/y/asciimoo/searx?color=yellow&label=commits
+ :target: https://github.com/asciimoo/searx/commits/master
-If you are in a hurry
-------
-- clone the source:
- ``git clone https://github.com/asciimoo/searx.git && cd searx``
-- install dependencies: ``./manage.sh update_packages``
-- edit your
- `settings.yml <https://github.com/asciimoo/searx/blob/master/searx/settings.yml>`__
- (set your ``secret_key``!)
-- run ``python searx/webapp.py`` to start the application
+.. |OpenCollective searx backers| image:: https://opencollective.com/searx/backers/badge.svg
+ :target: https://opencollective.com/searx#backer
+.. |OpenCollective searx sponsors| image:: https://opencollective.com/searx/sponsors/badge.svg
+ :target: https://opencollective.com/searx#sponsor
-Bugs
-~~~~
-Bugs or suggestions? Visit the `issue
-tracker <https://github.com/asciimoo/searx/issues>`__.
+If you are looking for running instances, ready to use, then visit searx.space_.
-`License <https://github.com/asciimoo/searx/blob/master/LICENSE>`__
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Otherwise jump to the user_, admin_ and developer_ handbooks you will find on
+our homepage_.
-More about searx
-~~~~~~~~~~~~~~~~
+.. _searx.space: https://searx.space
+.. _user: https://asciimoo.github.io/searx/user
+.. _admin: https://asciimoo.github.io/searx/admin
+.. _developer: https://asciimoo.github.io/searx/dev
+.. _homepage: https://asciimoo.github.io/searx
-- `openhub <https://www.openhub.net/p/searx/>`__
-- `twitter <https://twitter.com/Searx_engine>`__
-- IRC: #searx @ freenode
+contact:
+ openhub_ // twitter_ // IRC: #searx @ freenode
+.. _openhub: https://www.openhub.net/p/searx
+.. _twitter: https://twitter.com/Searx_engine
-.. |OpenCollective searx backers| image:: https://opencollective.com/searx/backers/badge.svg
- :target: https://opencollective.com/searx#backer
+-------
+|gluten free|
-.. |OpenCollective searx sponsors| image:: https://opencollective.com/searx/sponsors/badge.svg
- :target: https://opencollective.com/searx#sponsor
+.. |gluten free| image:: https://forthebadge.com/images/featured/featured-gluten-free.svg
diff --git a/debian/changelog b/debian/changelog
index 97945fd..e018a9e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,28 @@
+searx (0.17.0+dfsg1-1) unstable; urgency=medium
+
+ * New upstream release
+ * add debian/salsa-ci.yml
+ * refresh patches
+ * debian/rules: call 'make themes' instead of manage.sh
+ * debian/patches/makefile: disable npm and bootstrap build and build css
+ * debian/rules: add an empty searx/data/bangs.json
+ * debian/control: python3-werkzeug >= 0.16.1 is needed because of
+ werkzeug/middleware/proxy_fix.py
+ * debian/clean: don't remove searx/static/themes/oscar/js/searx.js
+ * debian/control: bump dh compat to 13
+ * debian/tests/general: more debugging code
+ * debian/tests/general: adjust regex
+ * add patch to parse README.md with encoding
+
+ -- Johannes 'josch' Schauer <josch@debian.org> Wed, 15 Jul 2020 23:33:23 +0200
+
+searx (0.16.0+dfsg1-2) unstable; urgency=medium
+
+ * fix autopkgtest: dh compat 12 installed examples uncompressed (closes:
+ #951212)
+
+ -- Johannes 'josch' Schauer <josch@debian.org> Sun, 16 Feb 2020 07:52:36 +0100
+
searx (0.16.0+dfsg1-1) unstable; urgency=medium
* New upstream release
diff --git a/debian/clean b/debian/clean
index 436e84d..4f58041 100644
--- a/debian/clean
+++ b/debian/clean
@@ -3,6 +3,5 @@ searx.egg-info/
searx/static/themes/courgette/css/
searx/static/themes/legacy/css/
searx/static/themes/oscar/css/
-searx/static/themes/oscar/js/searx.js
searx/static/themes/oscar/js/searx.min.js
searx/static/themes/pix-art/css/
diff --git a/debian/control b/debian/control
index 6af2b35..985456b 100644
--- a/debian/control
+++ b/debian/control
@@ -3,7 +3,7 @@ Section: web
Priority: optional
Maintainer: Johannes 'josch' Schauer <josch@debian.org>
Build-depends:
- debhelper-compat (= 12),
+ debhelper-compat (= 13),
dh-python,
grunt,
node-grunt-contrib-concat,
@@ -34,7 +34,7 @@ Depends:
python3-openssl,
python3-pygments,
python3-requests,
- python3-werkzeug,
+ python3-werkzeug (>= 0.16.1),
python3-yaml,
${misc:Depends},
${python3:Depends},
diff --git a/debian/copyright b/debian/copyright
index d583e35..29d6358 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -35,6 +35,7 @@ Files-Excluded:
searx/static/themes/simple/leaflet
searx/static/themes/simple/less/ion.less
searx/translations/*/LC_MESSAGES/messages.mo
+ searx/data/bangs.json
Files: *
Copyright:
diff --git a/debian/patches/clean-gruntfiles b/debian/patches/clean-gruntfiles
index d1001b7..559b44c 100644
--- a/debian/patches/clean-gruntfiles
+++ b/debian/patches/clean-gruntfiles
@@ -1,6 +1,6 @@
--- a/searx/static/themes/oscar/gruntfile.js
+++ b/searx/static/themes/oscar/gruntfile.js
-@@ -81,16 +81,9 @@ module.exports = function(grunt) {
+@@ -79,16 +79,9 @@ module.exports = function(grunt) {
}
});
@@ -32,7 +32,7 @@
- compatibility: '*'
- })
- ],
- banner: '/*! searx | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n'
+ banner: '/*! searx | <%= grunt.template.today("dd-mm-yyyy") %> | <%= process.env.GIT_URL %> */\n'
},
files: {
@@ -147,15 +141,8 @@ module.exports = function(grunt) {
diff --git a/debian/patches/encoding b/debian/patches/encoding
new file mode 100644
index 0000000..0b80694
--- /dev/null
+++ b/debian/patches/encoding
@@ -0,0 +1,11 @@
+--- a/setup.py
++++ b/setup.py
+@@ -12,7 +12,7 @@ sys.path.insert(0, './searx')
+ from version import VERSION_STRING
+ import brand
+
+-with open('README.rst') as f:
++with open('README.rst', encoding='utf-8') as f:
+ long_description = f.read()
+
+ with open('requirements.txt') as f:
diff --git a/debian/patches/makefile b/debian/patches/makefile
new file mode 100644
index 0000000..e3a0825
--- /dev/null
+++ b/debian/patches/makefile
@@ -0,0 +1,46 @@
+--- a/Makefile
++++ b/Makefile
+@@ -138,7 +138,6 @@ buildenv:
+ # ----------
+
+ node.env: buildenv
+- $(Q)./manage.sh npm_packages
+
+ node.clean:
+ $(Q)echo "CLEAN locally installed npm dependencies"
+@@ -157,20 +156,23 @@ PHONY += themes.bootstrap themes themes.
+ themes: buildenv themes.bootstrap themes.oscar themes.simple themes.legacy themes.courgette themes.pixart
+
+ quiet_cmd_lessc = LESSC $3
+- cmd_lessc = PATH="$$(npm bin):$$PATH" \
+- lessc --clean-css="--s1 --advanced --compatibility=ie9" "searx/static/$2" "searx/static/$3"
++ cmd_lessc = lessc -x "searx/static/$2" "searx/static/$3"
+
+ quiet_cmd_grunt = GRUNT $2
+- cmd_grunt = PATH="$$(npm bin):$$PATH" \
+- grunt --gruntfile "$2"
++ cmd_grunt = grunt --gruntfile "$2"
+
+ themes.oscar: node.env
+ $(Q)echo '[!] build oscar theme'
+ $(call cmd,grunt,searx/static/themes/oscar/gruntfile.js)
++ $(call cmd,lessc,themes/oscar/less/logicodev/oscar.less,themes/oscar/css/logicodev.min.css)
++ $(call cmd,lessc,themes/oscar/less/logicodev-dark/oscar.less,themes/oscar/css/logicodev-dark.min.css)
++ $(call cmd,lessc,themes/oscar/less/pointhi/oscar.less,themes/oscar/css/pointhi.min.css)
+
+ themes.simple: node.env
+ $(Q)echo '[!] build simple theme'
+ $(call cmd,grunt,searx/static/themes/simple/gruntfile.js)
++ $(call cmd,lessc,themes/simple/less/style-rtl.less,themes/simple/css/style-rtl.min.css)
++ $(call cmd,lessc,themes/simple/less/style.less,themes/simple/css/style.min.css)
+
+ themes.legacy: node.env
+ $(Q)echo '[!] build legacy theme'
+@@ -187,7 +189,6 @@ themes.pixart: node.env
+ $(call cmd,lessc,themes/pix-art/less/style.less,themes/pix-art/css/style.css)
+
+ themes.bootstrap: node.env
+- $(call cmd,lessc,less/bootstrap/bootstrap.less,css/bootstrap.min.css)
+
+
+ # docker
diff --git a/debian/patches/managesh b/debian/patches/managesh
deleted file mode 100644
index 80d8345..0000000
--- a/debian/patches/managesh
+++ /dev/null
@@ -1,39 +0,0 @@
---- a/manage.sh
-+++ b/manage.sh
-@@ -115,8 +115,7 @@ tests() {
- #
-
- npm_path_setup() {
-- which npm || (printf 'Error: npm is not found\n'; exit 1)
-- export PATH="$(npm bin)":$PATH
-+ true
- }
-
- npm_packages() {
-@@ -138,7 +137,7 @@ npm_packages() {
- build_style() {
- npm_path_setup
-
-- lessc --clean-css="--s1 --advanced --compatibility=ie9" "$BASE_DIR/searx/static/$1" "$BASE_DIR/searx/static/$2"
-+ lessc -x "$BASE_DIR/searx/static/$1" "$BASE_DIR/searx/static/$2"
- }
-
- styles() {
-@@ -152,8 +151,15 @@ styles() {
- build_style themes/courgette/less/style-rtl.less themes/courgette/css/style-rtl.css
- echo '[!] Building pix-art style'
- build_style themes/pix-art/less/style.less themes/pix-art/css/style.css
-- echo '[!] Building bootstrap style'
-- build_style less/bootstrap/bootstrap.less css/bootstrap.min.css
-+ echo '[!] Building simple style'
-+ build_style themes/simple/less/style.less themes/simple/css/searx.min.css
-+ build_style themes/simple/less/style-rtl.less themes/simple/css/searx-rtl.min.css
-+ echo '[!] Building logicodev'
-+ build_style themes/oscar/less/logicodev/oscar.less themes/oscar/css/logicodev.min.css
-+ echo '[!] Building logicodev-dark'
-+ build_style themes/oscar/less/logicodev-dark/oscar.less themes/oscar/css/logicodev-dark.min.css
-+ echo '[!] Building pointhi'
-+ build_style themes/oscar/less/pointhi/oscar.less themes/oscar/css/pointhi.min.css
- }
-
- grunt_build() {
diff --git a/debian/patches/series b/debian/patches/series
index 15bb9db..9dfcba9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,5 +1,6 @@
beautifyjs
clean-gruntfiles
-managesh
settingsyml
setuppy
+makefile
+encoding
diff --git a/debian/patches/setuppy b/debian/patches/setuppy
index 309ff37..29f764e 100644
--- a/debian/patches/setuppy
+++ b/debian/patches/setuppy
@@ -1,6 +1,6 @@
--- a/setup.py
+++ b/setup.py
-@@ -51,23 +51,9 @@ setup(
+@@ -56,23 +56,9 @@ setup(
},
package_data={
'searx': [
diff --git a/debian/rules b/debian/rules
index 01fe593..13bf6c4 100755
--- a/debian/rules
+++ b/debian/rules
@@ -10,10 +10,10 @@ export PYBUILD_DISABLE_python2=1
override_dh_auto_build:
python3 ./debian/ionicons/generate_less.py < ./debian/ionicons/input.json > searx/static/themes/simple/less/ion.less
dh_auto_build
- ./manage.sh styles # needed to run lessc because grunt-contrib-less is not packaged
./manage.sh locales # run pybabel
- ./manage.sh grunt_build # build the oscar theme
+ make themes
python3 ./debian/ionicons/generate.py < ./debian/ionicons/input.json
+ echo '{"bang":[]}' > searx/data/bangs.json
# do not run tests because the splinter python3 module is not packaged yet
override_dh_auto_test:
diff --git a/debian/salsa-ci.yml b/debian/salsa-ci.yml
new file mode 100644
index 0000000..83a9887
--- /dev/null
+++ b/debian/salsa-ci.yml
@@ -0,0 +1,9 @@
+---
+include:
+ - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
+ - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
+
+variables:
+ SALSA_CI_DISABLE_BLHC: 1
+ SALSA_CI_DISABLE_BUILD_PACKAGE_ANY: 1
+
diff --git a/debian/tests/general b/debian/tests/general
index 2dfba3f..df20ec3 100644
--- a/debian/tests/general
+++ b/debian/tests/general
@@ -8,8 +8,13 @@ ln -s ../sites-available/searx /etc/nginx/sites-enabled/searx
cp /usr/share/doc/searx/examples/uwsgi/apps-available/searx.ini /etc/uwsgi/apps-available
ln -s ../apps-available/searx.ini /etc/uwsgi/apps-enabled/searx.ini
mkdir /etc/searx
-gzip --to-stdout --decompress /usr/share/doc/searx/examples/settings.yml.gz > /etc/searx/settings.yml
+cp /usr/share/doc/searx/examples/settings.yml /etc/searx/settings.yml
sed -i -e "s/ultrasecretkey/$(openssl rand -hex 16)/g" /etc/searx/settings.yml
systemctl restart nginx
systemctl restart uwsgi
-curl localhost | grep 'input type="search" name="q"'
+sleep 5
+systemctl status nginx
+systemctl status uwsgi
+cat /var/log/uwsgi/app/searx.log
+curl localhost
+curl localhost | grep '<input type="search".* name="q"'
diff --git a/dockerfiles/uwsgi.ini b/dockerfiles/uwsgi.ini
index fa2fd63..ecc4b39 100644
--- a/dockerfiles/uwsgi.ini
+++ b/dockerfiles/uwsgi.ini
@@ -31,3 +31,7 @@ touch-logrotate = /run/uwsgi-logrotate
unique-cron = 15 0 -1 -1 -1 { touch /run/uwsgi-logrotate }
log-backupname = /var/log/uwsgi/uwsgi.log.1
logto = /var/log/uwsgi/uwsgi.log
+
+# No keep alive
+# See https://github.com/searx/searx-docker/issues/24
+add-header = Connection: close
diff --git a/docs/_themes/searx/static/searx.css b/docs/_themes/searx/static/searx.css
index d6a664f..0f2eff7 100644
--- a/docs/_themes/searx/static/searx.css
+++ b/docs/_themes/searx/static/searx.css
@@ -33,7 +33,7 @@ p.sidebar-title, .sidebar p {
/* admonitions
*/
-div.admonition, div.topic {
+div.admonition, div.topic, div.toctree-wrapper {
background-color: #fafafa;
margin: 8px 0px;
padding: 1em;
@@ -42,6 +42,16 @@ div.admonition, div.topic {
border-right: none;
border-bottom: none;
border-left: 5pt solid #ccc;
+ list-style-type: disclosure-closed;
+}
+
+div.toctree-wrapper p.caption {
+ font-weight: normal;
+ font-size: 24px;
+ margin: 0 0 10px 0;
+ padding: 0;
+ line-height: 1;
+ display: inline;
}
p.admonition-title:after {
@@ -128,3 +138,32 @@ caption {
caption-side: top;
text-align: left;
}
+
+/* bugs since sphinx 3.1
+
+See sphinx-doc project, PR 7838 & 7484 with elementary patch to the basic CSS:
+
+- https://github.com/sphinx-doc/sphinx/issues/7838#issuecomment-646009605
+- https://github.com/sphinx-doc/sphinx/pull/7484#issuecomment-646058972
+
+*/
+
+li > p:first-child {
+ margin-top: 0;
+}
+
+li > p:last-child {
+ margin-bottom: 0;
+}
+
+div.admonition dl {
+ margin-bottom: 0;
+}
+
+div.sidebar {
+ clear: none;
+}
+
+div.admonition, div.topic, pre {
+ clear: none;
+}
diff --git a/docs/admin/arch_public.dot b/docs/admin/arch_public.dot
index a46c96d..5018225 100644
--- a/docs/admin/arch_public.dot
+++ b/docs/admin/arch_public.dot
@@ -4,11 +4,11 @@ digraph G {
edge [fontname="Sans"];
browser [label="Browser", shape=Mdiamond];
- rp [label="Reverse Proxy", href="url to configure reverse proxy"];
- filtron [label="Filtron", href="https://github.com/asciimoo/filtron"];
- morty [label="Morty", href="https://github.com/asciimoo/morty"];
+ rp [label="Reverse Proxy", href="https://asciimoo.github.io/searx/utils/filtron.sh.html#public-reverse-proxy"];
+ filtron [label="Filtron", href="https://asciimoo.github.io/searx/utils/filtron.sh.html"];
+ morty [label="Morty", href="https://asciimoo.github.io/searx/utils/morty.sh.html"];
static [label="Static files", href="url to configure static files"];
- uwsgi [label="uwsgi", href="url to configure uwsgi"]
+ uwsgi [label="uwsgi", href="https://asciimoo.github.io/searx/utils/searx.sh.html"]
searx1 [label="Searx #1"];
searx2 [label="Searx #2"];
searx3 [label="Searx #3"];
diff --git a/docs/admin/architecture.rst b/docs/admin/architecture.rst
index 7064a29..464e765 100644
--- a/docs/admin/architecture.rst
+++ b/docs/admin/architecture.rst
@@ -4,17 +4,21 @@
Architecture
============
-.. sidebar:: Needs work!
+.. sidebar:: Further reading
- This article needs some work / Searx is a collaborative effort. If you have
- any contribution, feel welcome to send us your :pull:`PR <../pulls>`, see
- :ref:`how to contribute`.
+ - Reverse Proxy: :ref:`Apache <apache searx site>` & :ref:`nginx <nginx searx
+ site>`
+ - Filtron: :ref:`searx filtron`
+ - Morty: :ref:`searx morty`
+ - uWSGI: :ref:`searx uwsgi`
+ - Searx: :ref:`installation basic`
Herein you will find some hints and suggestions about typical architectures of
searx infrastructures.
We start with a contribution from :pull:`@dalf <1776#issuecomment-567917320>`.
-It shows a *reference* setup for public searx instances.
+It shows a *reference* setup for public searx instances which can build up and
+maintained by the scripts from our :ref:`toolboxing`.
.. _arch public:
diff --git a/docs/admin/buildhosts.rst b/docs/admin/buildhosts.rst
index 5260da0..a727d25 100644
--- a/docs/admin/buildhosts.rst
+++ b/docs/admin/buildhosts.rst
@@ -9,8 +9,27 @@ Buildhosts
If you have any contribution send us your :pull:`PR <../pulls>`, see
:ref:`how to contribute`.
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
+
To get best results from build, its recommend to install additional packages
-on build hosts.
+on build hosts (see :ref:`searx.sh`).::
+
+ sudo -H ./utils/searx.sh install buildhost
+
+This will install packages needed by searx:
+
+.. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START distro-packages
+ :end-before: END distro-packages
+
+and packages needed to build docuemtation and run tests:
+
+.. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START build-packages
+ :end-before: END build-packages
.. _docs build:
@@ -35,8 +54,17 @@ processing additional packages are needed. The XeTeX_ needed not only for PDF
creation, its also needed for :ref:`math` when HTML output is build.
To be able to do :ref:`sphinx:math-support` without CDNs, the math are rendered
-as images (``sphinx.ext.imgmath`` extension). If your docs build (``make
-docs``) shows warnings like this::
+as images (``sphinx.ext.imgmath`` extension).
+
+Here is the extract from the :origin:`docs/conf.py` file, setting math renderer
+to ``imgmath``:
+
+.. literalinclude:: ../conf.py
+ :language: python
+ :start-after: # sphinx.ext.imgmath setup
+ :end-before: # sphinx.ext.imgmath setup END
+
+If your docs build (``make docs``) shows warnings like this::
WARNING: dot(1) not found, for better output quality install \
graphviz from http://www.graphviz.org
@@ -47,8 +75,6 @@ docs``) shows warnings like this::
you need to install additional packages on your build host, to get better HTML
output.
-.. _system requirements:
-
.. tabs::
.. group-tab:: Ubuntu / debian
@@ -92,12 +118,38 @@ For PDF output you also need:
$ sudo dnf install \
texlive-collection-fontsrecommended texlive-collection-latex \
- dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts
+ dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts \
+ ImageMagick
-.. _system requirements END:
+.. _sh lint:
-.. literalinclude:: ../conf.py
- :language: python
- :start-after: # sphinx.ext.imgmath setup
- :end-before: # sphinx.ext.imgmath setup END
+Lint shell scripts
+==================
+
+.. _ShellCheck: https://github.com/koalaman/shellcheck
+
+To lint shell scripts, we use ShellCheck_ - A shell script static analysis tool.
+
+.. SNIP sh lint requirements
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code-block:: sh
+
+ $ sudo apt install shellcheck
+
+ .. group-tab:: Arch Linux
+
+ .. code-block:: sh
+
+ $ sudo pacman -S shellcheck
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code-block:: sh
+
+ $ sudo dnf install ShellCheck
+.. SNAP sh lint requirements
diff --git a/docs/admin/engines.rst b/docs/admin/engines.rst
index 4b78c8c..4d1872d 100644
--- a/docs/admin/engines.rst
+++ b/docs/admin/engines.rst
@@ -26,6 +26,8 @@ Safe search **SS**
Weigth **W**
------------- ----------- ---------------------------------
Disabled **D**
+------------- ----------- ---------------------------------
+Show errors **DE**
============= =========== =================================
Configuration defaults (at built time):
@@ -51,6 +53,7 @@ Configuration defaults (at built time):
- O
- W
- D
+ - DE
{% for name, mod in engines.items() %}
@@ -67,5 +70,6 @@ Configuration defaults (at built time):
- {{(mod.offline and "y") or ""}}
- {{mod.weight or 1 }}
- {{(mod.disabled and "y") or ""}}
+ - {{(mod.display_error_messages and "y") or ""}}
{% endfor %}
diff --git a/docs/admin/filtron.rst b/docs/admin/filtron.rst
index 07dcb9b..93e430b 100644
--- a/docs/admin/filtron.rst
+++ b/docs/admin/filtron.rst
@@ -1,18 +1,51 @@
+
+.. _searx filtron:
+
==========================
How to protect an instance
==========================
-Searx depens on external search services. To avoid the abuse of these services
+.. sidebar:: further reading
+
+ - :ref:`filtron.sh`
+ - :ref:`nginx searx site`
+
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
+
+.. _filtron: https://github.com/asciimoo/filtron
+
+Searx depends on external search services. To avoid the abuse of these services
it is advised to limit the number of requests processed by searx.
-An application firewall, ``filtron`` solves exactly this problem. Information
-on how to install it can be found at the `project page of filtron
-<https://github.com/asciimoo/filtron>`__.
+An application firewall, filtron_ solves exactly this problem. Filtron is just
+a middleware between your web server (nginx, apache, ...) and searx, we describe
+such infratructures in chapter: :ref:`architecture`.
+filtron & go
+============
+
+.. _Go: https://golang.org/
+.. _filtron README: https://github.com/asciimoo/filtron/blob/master/README.md
+
+Filtron needs Go_ installed. If Go_ is preinstalled, filtron_ is simply
+installed by ``go get`` package management (see `filtron README`_). If you use
+filtron as middleware, a more isolated setup is recommended. To simplify such
+an installation and the maintenance of, use our script :ref:`filtron.sh`.
+
+.. _Sample configuration of filtron:
+
Sample configuration of filtron
===============================
+.. sidebar:: Tooling box
+
+ - :origin:`/etc/filtron/rules.json <utils/templates/etc/filtron/rules.json>`
+
An example configuration can be find below. This configuration limits the access
of:
@@ -24,105 +57,104 @@ of:
.. code:: json
- [{
- "name":"search request",
- "filters":[
- "Param:q",
- "Path=^(/|/search)$"
- ],
- "interval":"<time-interval-in-sec (int)>",
- "limit":"<max-request-number-in-interval (int)>",
- "subrules":[
- {
- "name":"roboagent limit",
- "interval":"<time-interval-in-sec (int)>",
- "limit":"<max-request-number-in-interval (int)>",
- "filters":[
- "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"
- ],
- "actions":[
- {
- "name":"block",
- "params":{
- "message":"Rate limit exceeded"
- }
- }
- ]
- },
- {
- "name":"botlimit",
- "limit":0,
- "stop":true,
- "filters":[
- "Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"
- ],
- "actions":[
- {
- "name":"block",
- "params":{
- "message":"Rate limit exceeded"
- }
- }
- ]
- },
- {
- "name":"IP limit",
- "interval":"<time-interval-in-sec (int)>",
- "limit":"<max-request-number-in-interval (int)>",
- "stop":true,
- "aggregations":[
- "Header:X-Forwarded-For"
- ],
- "actions":[
- {
- "name":"block",
- "params":{
- "message":"Rate limit exceeded"
- }
- }
- ]
- },
- {
- "name":"rss/json limit",
- "interval":"<time-interval-in-sec (int)>",
- "limit":"<max-request-number-in-interval (int)>",
- "stop":true,
- "filters":[
- "Param:format=(csv|json|rss)"
- ],
- "actions":[
- {
- "name":"block",
- "params":{
- "message":"Rate limit exceeded"
- }
- }
- ]
- },
- {
- "name":"useragent limit",
- "interval":"<time-interval-in-sec (int)>",
- "limit":"<max-request-number-in-interval (int)>",
- "aggregations":[
- "Header:User-Agent"
+ [
+ {
+ "name": "search request",
+ "filters": [
+ "Param:q",
+ "Path=^(/|/search)$"
],
- "actions":[
- {
- "name":"block",
- "params":{
- "message":"Rate limit exceeded"
- }
- }
+ "interval": "<time-interval-in-sec (int)>"
+ "limit": "<max-request-number-in-interval (int)>",
+ "subrules": [
+ {
+ "name": "missing Accept-Language",
+ "filters": ["!Header:Accept-Language"],
+ "limit": "<max-request-number-in-interval (int)>",
+ "stop": true,
+ "actions": [
+ {"name":"log"},
+ {"name": "block",
+ "params": {"message": "Rate limit exceeded"}}
+ ]
+ },
+ {
+ "name": "suspiciously Connection=close header",
+ "filters": ["Header:Connection=close"],
+ "limit": "<max-request-number-in-interval (int)>",
+ "stop": true,
+ "actions": [
+ {"name":"log"},
+ {"name": "block",
+ "params": {"message": "Rate limit exceeded"}}
+ ]
+ },
+ {
+ "name": "IP limit",
+ "interval": "<time-interval-in-sec (int)>"
+ "limit": "<max-request-number-in-interval (int)>",
+ "stop": true,
+ "aggregations": [
+ "Header:X-Forwarded-For"
+ ],
+ "actions": [
+ { "name": "log"},
+ { "name": "block",
+ "params": {
+ "message": "Rate limit exceeded"
+ }
+ }
+ ]
+ },
+ {
+ "name": "rss/json limit",
+ "filters": [
+ "Param:format=(csv|json|rss)"
+ ],
+ "interval": "<time-interval-in-sec (int)>"
+ "limit": "<max-request-number-in-interval (int)>",
+ "stop": true,
+ "actions": [
+ { "name": "log"},
+ { "name": "block",
+ "params": {
+ "message": "Rate limit exceeded"
+ }
+ }
+ ]
+ },
+ {
+ "name": "useragent limit",
+ "interval": "<time-interval-in-sec (int)>"
+ "limit": "<max-request-number-in-interval (int)>",
+ "aggregations": [
+ "Header:User-Agent"
+ ],
+ "actions": [
+ { "name": "log"},
+ { "name": "block",
+ "params": {
+ "message": "Rate limit exceeded"
+ }
+ }
+ ]
+ }
]
- }
- ]
- }]
+ }
+ ]
+.. _filtron route request:
Route request through filtron
=============================
+.. sidebar:: further reading
+
+ - :ref:`filtron.sh overview`
+ - :ref:`installation nginx`
+ - :ref:`installation apache`
+
Filtron can be started using the following command:
.. code:: sh
@@ -136,13 +168,24 @@ Use it along with ``nginx`` with the following example configuration.
.. code:: nginx
- location / {
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Scheme $scheme;
- proxy_pass http://127.0.0.1:4004/;
+ # https://example.org/searx
+
+ location /searx {
+ proxy_pass http://127.0.0.1:4004/;
+
+ proxy_set_header Host $http_host;
+ proxy_set_header Connection $http_connection;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Scheme $scheme;
+ proxy_set_header X-Script-Name /searx;
}
+ location /searx/static {
+ /usr/local/searx/searx-src/searx/static;
+ }
+
+
Requests are coming from port 4004 going through filtron and then forwarded to
-port 8888 where a searx is being run.
+port 8888 where a searx is being run. For a complete setup see: :ref:`nginx
+searx site`.
diff --git a/docs/admin/index.rst b/docs/admin/index.rst
index b3c7f51..c708c4f 100644
--- a/docs/admin/index.rst
+++ b/docs/admin/index.rst
@@ -3,9 +3,16 @@ Administrator documentation
===========================
.. toctree::
- :maxdepth: 1
+ :maxdepth: 2
+ :caption: Contents
installation
+ installation-searx
+ installation-uwsgi
+ installation-nginx
+ installation-apache
+ installation-docker
+ update-searx
settings
api
architecture
diff --git a/docs/admin/installation-apache.rst b/docs/admin/installation-apache.rst
new file mode 100644
index 0000000..217e577
--- /dev/null
+++ b/docs/admin/installation-apache.rst
@@ -0,0 +1,514 @@
+.. _installation apache:
+
+===================
+Install with apache
+===================
+
+.. _Apache: https://httpd.apache.org/
+.. _Apache Debian:
+ https://cwiki.apache.org/confluence/display/HTTPD/DistrosDefaultLayout#DistrosDefaultLayout-Debian,Ubuntu(Apachehttpd2.x):
+.. _README.Debian:
+ https://salsa.debian.org/apache-team/apache2/raw/master/debian/apache2.README.Debian
+.. _Apache Arch Linux:
+ https://wiki.archlinux.org/index.php/Apache_HTTP_Server
+.. _Apache Fedora:
+ https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-apache-http-server/index.html
+.. _Apache directives:
+ https://httpd.apache.org/docs/trunk/mod/directives.html
+.. _Getting Started:
+ https://httpd.apache.org/docs/current/en/getting-started.html
+.. _Terms Used to Describe Directives:
+ https://httpd.apache.org/docs/current/en/mod/directive-dict.html
+.. _Configuration Files:
+ https://httpd.apache.org/docs/current/en/configuring.html
+.. _ProxyPreserveHost: https://httpd.apache.org/docs/trunk/mod/mod_proxy.html#proxypreservehost
+.. _LoadModule:
+ https://httpd.apache.org/docs/2.4/mod/mod_so.html#loadmodule
+.. _DocumentRoot:
+ https://httpd.apache.org/docs/trunk/mod/core.html#documentroot
+.. _Location:
+ https://httpd.apache.org/docs/trunk/mod/core.html#location
+.. _uWSGI Apache support:
+ https://uwsgi-docs.readthedocs.io/en/latest/Apache.html
+.. _mod_proxy_uwsgi:
+ https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-proxy-uwsgi
+
+.. sidebar:: further read
+
+ - `Apache Arch Linux`_
+ - `Apache Debian`_ and `README.Debian`_
+ - `Apache Fedora`_
+ - `Apache directives`_
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
+
+----
+
+**Install** :ref:`apache searx site` using :ref:`filtron.sh <filtron.sh overview>`
+
+.. code:: bash
+
+ $ sudo -H ./utils/filtron.sh apache install
+
+**Install** :ref:`apache searx site` using :ref:`morty.sh <morty.sh overview>`
+
+.. code:: bash
+
+ $ sudo -H ./utils/morty.sh apache install
+
+----
+
+The apache HTTP server
+======================
+
+If Apache_ is not installed, install it now. If apache_ is new to you, the
+`Getting Started`_, `Configuration Files`_ and `Terms Used to Describe
+Directives`_ documentation gives first orientation. There is also a list of
+`Apache directives`_ *to keep in the pocket*.
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code:: sh
+
+ sudo -H apt-get install apache2
+
+ .. group-tab:: Arch Linux
+
+ .. code:: sh
+
+ sudo -H pacman -S apache
+ sudo -H systemctl enable httpd
+ sudo -H systemctl start http
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code:: sh
+
+ sudo -H dnf install httpd
+ sudo -H systemctl enable httpd
+ sudo -H systemctl start httpd
+
+Now at http://localhost you should see any kind of *Welcome* or *Test* page.
+How this default intro site is configured, depends on the linux distribution
+(compare `Apache directives`_).
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code:: sh
+
+ less /etc/apache2/sites-enabled/000-default.conf
+
+ In this file, there is a line setting the `DocumentRoot`_ directive:
+
+ .. code:: apache
+
+ DocumentRoot /var/www/html
+
+ And the *welcome* page is the HTML file at ``/var/www/html/index.html``.
+
+ .. group-tab:: Arch Linux
+
+ .. code:: sh
+
+ less /etc/httpd/conf/httpd.conf
+
+ In this file, there is a line setting the `DocumentRoot`_ directive:
+
+ .. code:: apache
+
+ DocumentRoot "/srv/http"
+ <Directory "/srv/http">
+ Options Indexes FollowSymLinks
+ AllowOverride None
+ Require all granted
+ </Directory>
+
+ The *welcome* page of Arch Linux is a page showing directory located at
+ ``DocumentRoot``. This is *directory* page is generated by the Module
+ `mod_autoindex <https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html>`_:
+
+ .. code:: apache
+
+ LoadModule autoindex_module modules/mod_autoindex.so
+ ...
+ Include conf/extra/httpd-autoindex.conf
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code:: sh
+
+ less /etc/httpd/conf/httpd.conf
+
+ In this file, there is a line setting the ``DocumentRoot`` directive:
+
+ .. code:: apache
+
+ DocumentRoot "/var/www/html"
+ ...
+ <Directory "/var/www">
+ AllowOverride None
+ # Allow open access:
+ Require all granted
+ </Directory>
+
+ On fresh installations, the ``/var/www`` is empty and the *default
+ welcome page* is shown, the configuration is located at::
+
+ less /etc/httpd/conf.d/welcome.conf
+
+.. _apache searx site:
+
+Apache Reverse Proxy
+====================
+
+.. sidebar:: public to the internet?
+
+ If your searx instance is public, stop here and first install :ref:`filtron
+ reverse proxy <filtron.sh>` and :ref:`result proxy morty <morty.sh>`, see
+ :ref:`installation scripts`. If already done, follow setup: *searx via
+ filtron plus morty*.
+
+To setup a Apache revers proxy you have to enable the *headers* and *proxy*
+modules and create a `Location`_ configuration for the searx site. In most
+distributions you have to un-comment the lines in the main configuration file,
+except in :ref:`The Debian Layout`.
+
+To pass the HTTP HOST header
+With ProxyPreserveHost_ the incoming Host HTTP request header is passed to the
+proxied host.
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ In the Apache setup, enable headers and proxy modules:
+
+ .. code:: sh
+
+ sudo -H a2enmod headers
+ sudo -H a2enmod proxy
+ sudo -H a2enmod proxy_http
+
+ In :ref:`The Debian Layout` you create a ``searx.conf`` with the
+ ``<Location /searx >`` directive and save this file in the *sites
+ available* folder at ``/etc/apache2/sites-available``. To enable the
+ ``searx.conf`` use :man:`a2ensite`:
+
+ .. code:: sh
+
+ sudo -H a2ensite searx.conf
+
+ .. group-tab:: Arch Linux
+
+ In the ``/etc/httpd/conf/httpd.conf`` file, activate headers and proxy
+ modules (LoadModule_):
+
+ .. code:: apache
+
+ FIXME needs test
+
+ LoadModule headers_module modules/mod_headers.so
+ LoadModule proxy_module modules/mod_proxy.so
+ LoadModule proxy_http_module modules/mod_proxy_http.so
+
+ .. group-tab:: Fedora / RHEL
+
+ In the ``/etc/httpd/conf/httpd.conf`` file, activate headers and proxy
+ modules (LoadModule_):
+
+ .. code:: apache
+
+ FIXME needs test
+
+ LoadModule headers_module modules/mod_headers.so
+ LoadModule proxy_module modules/mod_proxy.so
+ LoadModule proxy_http_module modules/mod_proxy_http.so
+
+.. tabs::
+
+ .. group-tab:: searx via filtron plus morty
+
+ Use this setup, if your instance is public to the internet, compare
+ figure: :ref:`architecture <arch public>` and :ref:`installation scripts`.
+
+ 1. Configure a reverse proxy for :ref:`filtron <filtron.sh>`, listening on
+ *localhost 4004* (:ref:`filtron route request`):
+
+ .. code:: apache
+
+ <Location /searx >
+
+ # SetEnvIf Request_URI "/searx" dontlog
+ # CustomLog /dev/null combined env=dontlog
+
+ Require all granted
+
+ Order deny,allow
+ Deny from all
+ #Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
+ Allow from all
+
+ ProxyPreserveHost On
+ ProxyPass http://127.0.0.1:4004
+ RequestHeader set X-Script-Name /searx
+
+ </Location>
+
+ 2. Configure reverse proxy for :ref:`morty <searx morty>`, listening on
+ *localhost 3000*
+
+ .. code:: apache
+
+ ProxyPreserveHost On
+
+ <Location /morty >
+
+ # SetEnvIf Request_URI "/morty" dontlog
+ # CustomLog /dev/null combined env=dontlog
+
+ Require all granted
+
+ Order deny,allow
+ Deny from all
+ #Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
+ Allow from all
+
+ ProxyPass http://127.0.0.1:3000
+ RequestHeader set X-Script-Name /morty
+
+ </Location>
+
+ Note that reverse proxy advised to be used in case of single-user or
+ low-traffic instances. For a fully result proxification add :ref:`morty's
+ <searx morty>` **public URL** to your :origin:`searx/settings.yml`:
+
+ .. code:: yaml
+
+ result_proxy:
+ # replace example.org with your server's public name
+ url : https://example.org/morty
+
+ server:
+ image_proxy : True
+
+uWSGI support
+=============
+
+Be warned, with this setup, your instance isn't :ref:`protected <searx
+filtron>`, nevertheless it is good enough for intranet usage. In modern Linux
+distributions, the `mod_proxy_uwsgi`_ is compiled into the *normal* apache
+package and you need to install only the :ref:`uWSGI <searx uwsgi>` package:
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code:: sh
+
+ sudo -H apt-get install uwsgi
+
+ # Ubuntu =< 18.04
+ sudo -H apt-get install libapache2-mod-proxy-uwsgi
+
+ .. group-tab:: Arch Linux
+
+ .. code:: sh
+
+ sudo -H pacman -S uwsgi
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code:: sh
+
+ sudo -H dnf install uwsgi
+
+The next example shows a configuration using the `uWSGI Apache support`_ via
+unix sockets and `mod_proxy_uwsgi`_.
+
+For socket communication, you have to activate ``socket =
+/run/uwsgi/app/searx/socket`` and comment out the ``http = 127.0.0.1:8888``
+configuration in your :ref:`uwsgi ini file <uwsgi configuration>`. If not
+already exists, create a folder for the unix sockets, which can be used by the
+searx account (see :ref:`create searx user`):
+
+.. code:: bash
+
+ sudo -H mkdir -p /run/uwsgi/app/searx/
+ sudo -H chown -R searx:searx /run/uwsgi/app/searx/
+
+If the server is public; to limit access to your intranet replace ``Allow from
+all`` directive and replace ``192.168.0.0/16`` with your subnet IP/class.
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code:: apache
+
+ LoadModule headers_module /usr/lib/apache2/mod_headers.so
+ LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
+ LoadModule proxy_uwsgi_module /usr/lib/apache2/modules/mod_proxy_uwsgi.so
+
+ # SetEnvIf Request_URI /searx dontlog
+ # CustomLog /dev/null combined env=dontlog
+
+ <Location /searx>
+
+ Require all granted
+ Order deny,allow
+ Deny from all
+ # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
+ Allow from all
+
+ ProxyPreserveHost On
+ ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
+
+ </Location>
+
+ .. group-tab:: Arch Linux
+
+ .. code:: apache
+
+ FIXME needs test
+
+ LoadModule proxy_module modules/mod_proxy.so
+ LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
+
+ # SetEnvIf Request_URI /searx dontlog
+ # CustomLog /dev/null combined env=dontlog
+
+ <Location /searx>
+
+ Require all granted
+ Order deny,allow
+ Deny from all
+ # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
+ Allow from all
+
+ ProxyPreserveHost On
+ ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
+
+ </Location>
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code:: apache
+
+ FIXME needs test
+
+ LoadModule proxy_module modules/mod_proxy.so
+ LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
+ <IfModule proxy_uwsgi_module>
+
+ # SetEnvIf Request_URI /searx dontlog
+ # CustomLog /dev/null combined env=dontlog
+
+ <Location /searx>
+
+ Require all granted
+ Order deny,allow
+ Deny from all
+ # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
+ Allow from all
+
+ ProxyPreserveHost On
+ ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
+
+ </Location>
+
+ </IfModule>
+
+ .. group-tab:: old mod_wsgi
+
+ We show this only for historical reasons, DON'T USE `mod_uwsgi
+ <https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-uwsgi>`_.
+ ANYMORE!
+
+ .. code:: apache
+
+ <IfModule mod_uwsgi.c>
+
+ # SetEnvIf Request_URI "/searx" dontlog
+ # CustomLog /dev/null combined env=dontlog
+
+ <Location /searx >
+
+ Require all granted
+
+ Options FollowSymLinks Indexes
+ SetHandler uwsgi-handler
+ uWSGISocket /run/uwsgi/app/searx/socket
+
+ Order deny,allow
+ Deny from all
+ # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
+ Allow from all
+
+ </Location>
+
+ </IfModule>
+
+.. _restart apache:
+
+Restart service
+===============
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code:: sh
+
+ sudo -H systemctl restart apache2
+ sudo -H service uwsgi restart searx
+
+ .. group-tab:: Arch Linux
+
+ .. code:: sh
+
+ sudo -H systemctl restart httpd
+ sudo -H systemctl restart uwsgi@searx
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code:: sh
+
+ sudo -H systemctl restart httpd
+ sudo -H touch /etc/uwsgi.d/searx.ini
+
+
+disable logs
+============
+
+For better privacy you can disable Apache logs. In the examples above activate
+one of the lines and `restart apache`_::
+
+
+ # SetEnvIf Request_URI "/searx" dontlog
+ # CustomLog /dev/null combined env=dontlog
+
+The ``CustomLog`` directive disable logs for the whole (virtual) server, use it
+when the URL of the service does not have a path component (``/searx``) / is
+located at root (``/``).
+
+.. _The Debian Layout:
+
+The Debian Layout
+=================
+
+Be aware that the Debian layout is quite different from the standard Apache
+configuration. For details look at the README.Debian_
+(``/usr/share/doc/apache2/README.Debian.gz``). Some commands you should know on
+Debian:
+
+* :man:`apache2ctl`: Apache HTTP server control interface
+* :man:`a2enmod`, :man:`a2dismod`: switch on/off modules
+* :man:`a2enconf`, :man:`a2disconf`: switch on/off configurations
+* :man:`a2ensite`, :man:`a2dissite`: switch on/off sites
diff --git a/docs/admin/installation-docker.rst b/docs/admin/installation-docker.rst
new file mode 100644
index 0000000..340e663
--- /dev/null
+++ b/docs/admin/installation-docker.rst
@@ -0,0 +1,28 @@
+.. _installation docker:
+
+===================
+Docker installation
+===================
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
+
+Make sure you have installed Docker. For instance, you can deploy searx like this:
+
+.. code:: sh
+
+ docker pull wonderfall/searx
+ docker run -d --name searx -p $PORT:8888 wonderfall/searx
+
+Go to ``http://localhost:$PORT``.
+
+See https://hub.docker.com/r/wonderfall/searx/ for more informations. It's also
+possible to build searx from the embedded Dockerfile.
+
+.. code:: sh
+
+ git clone https://github.com/asciimoo/searx.git
+ cd searx
+ docker build -t whatever/searx .
diff --git a/docs/admin/installation-nginx.rst b/docs/admin/installation-nginx.rst
new file mode 100644
index 0000000..5e32d96
--- /dev/null
+++ b/docs/admin/installation-nginx.rst
@@ -0,0 +1,381 @@
+.. _installation nginx:
+
+==================
+Install with nginx
+==================
+
+.. _nginx:
+ https://docs.nginx.com/nginx/admin-guide/
+.. _nginx server configuration:
+ https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#setting-up-virtual-servers
+.. _nginx beginners guide:
+ http://nginx.org/en/docs/beginners_guide.html
+.. _Getting Started wiki:
+ https://www.nginx.com/resources/wiki/start/
+.. _uWSGI support from nginx:
+ https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html
+.. _uwsgi_params:
+ https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html#configuring-nginx
+.. _SCRIPT_NAME:
+ https://werkzeug.palletsprojects.com/en/1.0.x/wsgi/#werkzeug.wsgi.get_script_name
+
+.. sidebar:: further reading
+
+ - nginx_
+ - `nginx beginners guide`_
+ - `nginx server configuration`_
+ - `Getting Started wiki`_
+ - `uWSGI support from nginx`_
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
+
+----
+
+**Install** :ref:`nginx searx site` using :ref:`filtron.sh <filtron.sh overview>`
+
+.. code:: bash
+
+ $ sudo -H ./utils/filtron.sh nginx install
+
+**Install** :ref:`nginx searx site` using :ref:`morty.sh <morty.sh overview>`
+
+.. code:: bash
+
+ $ sudo -H ./utils/morty.sh nginx install
+
+----
+
+
+The nginx HTTP server
+=====================
+
+If nginx_ is not installed (uwsgi will not work with the package nginx-light),
+install it now.
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code:: sh
+
+ sudo -H apt-get install nginx
+
+ .. group-tab:: Arch Linux
+
+ .. code-block:: sh
+
+ sudo -H pacman -S nginx-mainline
+ sudo -H systemctl enable nginx
+ sudo -H systemctl start nginx
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code-block:: sh
+
+ sudo -H dnf install nginx
+ sudo -H systemctl enable nginx
+ sudo -H systemctl start nginx
+
+Now at http://localhost you should see a *Welcome to nginx!* page, on Fedora you
+see a *Fedora Webserver - Test Page*. The test page comes from the default
+`nginx server configuration`_. How this default intro site is configured,
+depends on the linux distribution:
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code:: sh
+
+ less /etc/nginx/nginx.conf
+
+ there is a line including site configurations from:
+
+ .. code:: nginx
+
+ include /etc/nginx/sites-enabled/*;
+
+ .. group-tab:: Arch Linux
+
+ .. code-block:: sh
+
+ less /etc/nginx/nginx.conf
+
+ in there is a configuration section named ``server``:
+
+ .. code-block:: nginx
+
+ server {
+ listen 80;
+ server_name localhost;
+ # ...
+ }
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code-block:: sh
+
+ less /etc/nginx/nginx.conf
+
+ there is a line including site configurations from:
+
+ .. code:: nginx
+
+ include /etc/nginx/conf.d/*.conf;
+
+.. _nginx searx site:
+
+A nginx searx site
+==================
+
+.. sidebar:: public to the internet?
+
+ If your searx instance is public, stop here and first install :ref:`filtron
+ reverse proxy <filtron.sh>` and :ref:`result proxy morty <morty.sh>`, see
+ :ref:`installation scripts`. If already done, follow setup: *searx via
+ filtron plus morty*.
+
+Now you have to create a configuration for the searx site. If nginx_ is new to
+you, the `nginx beginners guide`_ is a good starting point and the `Getting
+Started wiki`_ is always a good resource *to keep in the pocket*.
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ Create configuration at ``/etc/nginx/sites-available/searx`` and place a
+ symlink to sites-enabled:
+
+ .. code:: sh
+
+ sudo -H ln -s /etc/nginx/sites-available/searx /etc/nginx/sites-enabled/searx
+
+ .. group-tab:: Arch Linux
+
+ In the ``/etc/nginx/nginx.conf`` file, replace the configuration section
+ named ``server``.
+
+ .. group-tab:: Fedora / RHEL
+
+ Create configuration at ``/etc/nginx/conf.d/searx`` and place a
+ symlink to sites-enabled:
+
+.. tabs::
+
+ .. group-tab:: searx via filtron plus morty
+
+ Use this setup, if your instance is public to the internet, compare
+ figure: :ref:`architecture <arch public>` and :ref:`installation scripts`.
+
+ 1. Configure a reverse proxy for :ref:`filtron <filtron.sh>`, listening on
+ *localhost 4004* (:ref:`filtron route request`):
+
+ .. code:: nginx
+
+ # https://example.org/searx
+
+ location /searx {
+ proxy_pass http://127.0.0.1:4004/;
+
+ proxy_set_header Host $http_host;
+ proxy_set_header Connection $http_connection;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Scheme $scheme;
+ proxy_set_header X-Script-Name /searx;
+ }
+
+ location /searx/static {
+ /usr/local/searx/searx-src/searx/static;
+ }
+
+
+ 2. Configure reverse proxy for :ref:`morty <searx morty>`, listening on
+ *localhost 3000*:
+
+ .. code:: nginx
+
+ # https://example.org/morty
+
+ location /morty {
+ proxy_pass http://127.0.0.1:3000/;
+
+ proxy_set_header Host $http_host;
+ proxy_set_header Connection $http_connection;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Scheme $scheme;
+ }
+
+ Note that reverse proxy advised to be used in case of single-user or
+ low-traffic instances. For a fully result proxification add :ref:`morty's
+ <searx morty>` **public URL** to your :origin:`searx/settings.yml`:
+
+ .. code:: yaml
+
+ result_proxy:
+ # replace example.org with your server's public name
+ url : https://example.org/morty
+
+ server:
+ image_proxy : True
+
+
+ .. group-tab:: proxy or uWSGI
+
+ Be warned, with this setup, your instance isn't :ref:`protected <searx
+ filtron>`. Nevertheless it is good enough for intranet usage and it is a
+ excellent example of; *how different services can be set up*. The next
+ example shows a reverse proxy configuration wrapping the :ref:`searx-uWSGI
+ application <uwsgi configuration>`, listening on ``http =
+ 127.0.0.1:8888``.
+
+ .. code:: nginx
+
+ # https://hostname.local/
+
+ location / {
+ proxy_pass http://127.0.0.1:8888;
+
+ proxy_set_header Host $host;
+ proxy_set_header Connection $http_connection;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Scheme $scheme;
+ proxy_buffering off;
+ }
+
+ Alternatively you can use the `uWSGI support from nginx`_ via unix
+ sockets. For socket communication, you have to activate ``socket =
+ /run/uwsgi/app/searx/socket`` and comment out the ``http =
+ 127.0.0.1:8888`` configuration in your :ref:`uwsgi ini file <uwsgi
+ configuration>`.
+
+ The example shows a nginx virtual ``server`` configuration, listening on
+ port 80 (IPv4 and IPv6 http://[::]:80). The uWSGI app is configured at
+ location ``/`` by importing the `uwsgi_params`_ and passing requests to
+ the uWSGI socket (``uwsgi_pass``). The ``server``\'s root points to the
+ :ref:`searx-src clone <searx-src>` and wraps directly the
+ :origin:`searx/static/` content at ``location /static``.
+
+ .. code:: nginx
+
+ server {
+ # replace hostname.local with your server's name
+ server_name hostname.local;
+
+ listen 80;
+ listen [::]:80;
+
+ location / {
+ include uwsgi_params;
+ uwsgi_pass unix:/run/uwsgi/app/searx/socket;
+ }
+
+ root /usr/local/searx/searx-src/searx;
+ location /static { }
+ }
+
+ If not already exists, create a folder for the unix sockets, which can be
+ used by the searx account:
+
+ .. code:: bash
+
+ mkdir -p /run/uwsgi/app/searx/
+ sudo -H chown -R searx:searx /run/uwsgi/app/searx/
+
+ .. group-tab:: \.\. at subdir URL
+
+ Be warned, with these setups, your instance isn't :ref:`protected <searx
+ filtron>`. The examples are just here to demonstrate how to export the
+ searx application from a subdirectory URL ``https://example.org/searx/``.
+
+ .. code:: nginx
+
+ # https://hostname.local/searx
+
+ location /searx {
+ proxy_pass http://127.0.0.1:8888;
+
+ proxy_set_header Host $host;
+ proxy_set_header Connection $http_connection;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Scheme $scheme;
+ proxy_set_header X-Script-Name /searx;
+ proxy_buffering off;
+ }
+
+ location /searx/static {
+ alias /usr/local/searx/searx-src/searx/static;
+ }
+
+ The ``X-Script-Name /searx`` is needed by the searx implementation to
+ calculate relative URLs correct. The next example shows a uWSGI
+ configuration. Since there are no HTTP headers in a (u)WSGI protocol, the
+ value is shipped via the SCRIPT_NAME_ in the WSGI environment.
+
+ .. code:: nginx
+
+ # https://hostname.local/searx
+
+ location /searx {
+ uwsgi_param SCRIPT_NAME /searx;
+ include uwsgi_params;
+ uwsgi_pass unix:/run/uwsgi/app/searx/socket;
+ }
+
+ location /searx/static {
+ alias /usr/local/searx/searx-src/searx;
+ }
+
+ For searx to work correctly the ``base_url`` must be set in the
+ :origin:`searx/settings.yml`.
+
+ .. code:: yaml
+
+ server:
+ # replace example.org with your server's public name
+ base_url : https://example.org/searx/
+
+
+Restart service:
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code:: sh
+
+ sudo -H systemctl restart nginx
+ sudo -H service uwsgi restart searx
+
+ .. group-tab:: Arch Linux
+
+ .. code:: sh
+
+ sudo -H systemctl restart nginx
+ sudo -H systemctl restart uwsgi@searx
+
+ .. group-tab:: Fedora
+
+ .. code:: sh
+
+ sudo -H systemctl restart nginx
+ sudo -H touch /etc/uwsgi.d/searx.ini
+
+
+Disable logs
+============
+
+For better privacy you can disable nginx logs in ``/etc/nginx/nginx.conf``.
+
+.. code:: nginx
+
+ http {
+ # ...
+ access_log /dev/null;
+ error_log /dev/null;
+ # ...
+ }
diff --git a/docs/admin/installation-searx.rst b/docs/admin/installation-searx.rst
new file mode 100644
index 0000000..f1d4860
--- /dev/null
+++ b/docs/admin/installation-searx.rst
@@ -0,0 +1,92 @@
+.. _installation basic:
+
+=========================
+Step by step installation
+=========================
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
+
+Step by step installation with virtualenv. For Ubuntu, be sure to have enable
+universe repository.
+
+.. _install packages:
+
+Install packages
+================
+
+.. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START distro-packages
+ :end-before: END distro-packages
+
+.. hint::
+
+ This installs also the packages needed by :ref:`searx uwsgi`
+
+.. _create searx user:
+
+Create user
+===========
+
+.. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START create user
+ :end-before: END create user
+
+.. _searx-src:
+
+install searx & dependencies
+============================
+
+Start a interactive shell from new created user and clone searx:
+
+.. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START clone searx
+ :end-before: END clone searx
+
+In the same shell create *virtualenv*:
+
+.. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START create virtualenv
+ :end-before: END create virtualenv
+
+To install searx's dependencies, exit the searx *bash* session you opened above
+and restart a new. Before install, first check if your *virualenv* was sourced
+from the login (*~/.profile*):
+
+.. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START manage.sh update_packages
+ :end-before: END manage.sh update_packages
+
+.. tip::
+
+ Open a second terminal for the configuration tasks and left the ``(searx)$``
+ terminal open for the tasks below.
+
+Configuration
+==============
+
+Create a copy of the :origin:`searx/settings.yml` configuration file in system's
+*/etc* folder. Configure like shown below -- replace ``searx@\$(uname -n)`` with
+a name of your choice -- *and/or* edit ``/etc/searx/settings.yml`` if necessary.
+
+.. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START searx config
+ :end-before: END searx config
+
+Check
+=====
+
+To check your searx setup, optional enable debugging and start the *webapp*.
+Searx looks at the exported environment ``$SEARX_SETTINGS_PATH`` for a
+configuration file.
+
+.. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START check searx installation
+ :end-before: END check searx installation
+
+If everything works fine, hit ``[CTRL-C]`` to stop the *webapp* and disable the
+debug option in ``settings.yml``. You can now exit searx user bash (enter exit
+command twice). At this point searx is not demonized; uwsgi allows this.
+
diff --git a/docs/admin/installation-uwsgi.rst b/docs/admin/installation-uwsgi.rst
new file mode 100644
index 0000000..7b48297
--- /dev/null
+++ b/docs/admin/installation-uwsgi.rst
@@ -0,0 +1,150 @@
+.. _searx uwsgi:
+
+=====
+uwsgi
+=====
+
+.. sidebar:: further reading
+
+ - `systemd.unit`_
+ - `uWSGI Emperor`_
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
+
+
+.. _systemd.unit: https://www.freedesktop.org/software/systemd/man/systemd.unit.html
+.. _One service per app in systemd:
+ https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd
+.. _uWSGI Emperor:
+ https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html
+.. _uwsgi ini file:
+ https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#ini-files
+.. _systemd unit template:
+ http://0pointer.de/blog/projects/instances.html
+
+
+Origin uWSGI
+============
+
+How uWSGI is implemented by distributors is different. uWSGI itself
+recommend two methods
+
+`systemd.unit`_ template files as described here `One service per app in systemd`_.
+
+ There is one `systemd unit template`_ and one `uwsgi ini file`_ per uWSGI-app
+ placed at dedicated locations. Take archlinux and a searx.ini as example::
+
+ unit template --> /usr/lib/systemd/system/uwsgi@.service
+ uwsgi ini files --> /etc/uwsgi/searx.ini
+
+ The searx app can be maintained as know from common systemd units::
+
+ systemctl enable uwsgi@searx
+ systemctl start uwsgi@searx
+ systemctl restart uwsgi@searx
+ systemctl stop uwsgi@searx
+
+The `uWSGI Emperor`_ mode which fits for maintaining a large range of uwsgi apps.
+
+ The Emperor mode is a special uWSGI instance that will monitor specific
+ events. The Emperor mode (service) is started by a (common, not template)
+ systemd unit. The Emperor service will scan specific directories for `uwsgi
+ ini file`_\s (also know as *vassals*). If a *vassal* is added, removed or the
+ timestamp is modified, a corresponding action takes place: a new uWSGI
+ instance is started, reload or stopped. Take Fedora and a searx.ini as
+ example::
+
+ to start a new searx instance create --> /etc/uwsgi.d/searx.ini
+ to reload the instance edit timestamp --> touch /etc/uwsgi.d/searx.ini
+ to stop instance remove ini --> rm /etc/uwsgi.d/searx.ini
+
+Distributors
+============
+
+The `uWSGI Emperor`_ mode and `systemd unit template`_ is what the distributors
+mostly offer their users, even if they differ in the way they implement both
+modes and their defaults. Another point they might differ is the packaging of
+plugins (if so, compare :ref:`install packages`) and what the default python
+interpreter is (python2 vs. python3).
+
+Fedora starts a Emperor by default, while archlinux does not start any uwsgi
+service by default. Worth to know; debian (ubuntu) follow a complete different
+approach. *debian*: your are familiar with the apache infrastructure? .. they
+do similar for the uWSGI infrastructure (with less comfort), the folders are::
+
+ /etc/uwsgi/apps-available/
+ /etc/uwsgi/apps-enabled/
+
+The `uwsgi ini file`_ is enabled by a symbolic link::
+
+ ln -s /etc/uwsgi/apps-available/searx.ini /etc/uwsgi/apps-enabled/
+
+From debian's documentation (``/usr/share/doc/uwsgi/README.Debian.gz``): You
+could control specific instance(s) by issuing::
+
+ service uwsgi <command> <confname> <confname> ...
+
+ sudo -H service uwsgi start searx
+ sudo -H service uwsgi stop searx
+
+My experience is, that this command is a bit buggy.
+
+.. _uwsgi configuration:
+
+Alltogether
+===========
+
+Create the configuration ini-file according to your distribution (see below) and
+restart the uwsgi application.
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START searx uwsgi-description ubuntu-20.04
+ :end-before: END searx uwsgi-description ubuntu-20.04
+
+ .. hotfix: a bug group-tab need this comment
+
+ .. group-tab:: Arch Linux
+
+ .. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START searx uwsgi-description arch
+ :end-before: END searx uwsgi-description arch
+
+ .. hotfix: a bug group-tab need this comment
+
+ .. group-tab:: Fedora / RHEL
+
+ .. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START searx uwsgi-description fedora
+ :end-before: END searx uwsgi-description fedora
+
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START searx uwsgi-appini ubuntu-20.04
+ :end-before: END searx uwsgi-appini ubuntu-20.04
+
+ .. hotfix: a bug group-tab need this comment
+
+ .. group-tab:: Arch Linux
+
+ .. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START searx uwsgi-appini arch
+ :end-before: END searx uwsgi-appini arch
+
+ .. hotfix: a bug group-tab need this comment
+
+ .. group-tab:: Fedora / RHEL
+
+ .. kernel-include:: $DOCS_BUILD/includes/searx.rst
+ :start-after: START searx uwsgi-appini fedora
+ :end-before: END searx uwsgi-appini fedora
diff --git a/docs/admin/installation.rst b/docs/admin/installation.rst
index 15800fc..167c300 100644
--- a/docs/admin/installation.rst
+++ b/docs/admin/installation.rst
@@ -4,346 +4,63 @@
Installation
============
-.. contents::
- :depth: 3
+*You're spoilt for choice*, choose your preferred method of installation.
-Basic installation
-==================
+- :ref:`installation docker`
+- :ref:`installation scripts`
+- :ref:`installation basic`
-Step by step installation for Debian/Ubuntu with virtualenv. For Ubuntu, be sure
-to have enable universe repository.
+The :ref:`installation basic` is good enough for intranet usage and it is a
+excellent illustration of *how a searx instance is build up*. If you place your
+instance public to the internet you should really consider to install a
+:ref:`filtron reverse proxy <filtron.sh>` and for privacy a :ref:`result proxy
+<morty.sh>` is mandatory.
-Install packages:
+Therefore, if you do not have any special preferences, its recommend to use the
+:ref:`installation docker` or the `Installation scripts`_ from our :ref:`tooling
+box <toolboxing>` as described below.
-.. code:: sh
+.. _installation scripts:
- $ sudo -H apt-get install \
- git build-essential libxslt-dev \
- python-dev python-virtualenv python-babel \
- zlib1g-dev libffi-dev libssl-dev
+Installation scripts
+====================
-Install searx:
+.. sidebar:: Update OS first!
-.. code:: sh
+ To avoid unwanted side effects, update your OS before installing searx.
- cd /usr/local
- sudo -H git clone https://github.com/asciimoo/searx.git
- sudo -H useradd searx -d /usr/local/searx
- sudo -H chown searx:searx -R /usr/local/searx
+The following will install a setup as shown in :ref:`architecture`. First you
+need to get a clone. The clone is only needed for the installation procedure
+and some maintenance tasks (alternatively you can create your own fork).
-Install dependencies in a virtualenv:
+.. code:: bash
-.. code:: sh
+ $ cd ~/Downloads
+ $ git clone https://github.com/asciimoo/searx searx
+ $ cd searx
- cd /usr/local/searx
- sudo -H -u searx -i
+**Install** :ref:`searx service <searx.sh>`
-.. code:: sh
+This installs searx as described in :ref:`installation basic`.
- (searx)$ virtualenv searx-ve
- (searx)$ . ./searx-ve/bin/activate
- (searx)$ ./manage.sh update_packages
+.. code:: bash
-Configuration
-==============
+ $ sudo -H ./utils/searx.sh install all
-.. code:: sh
+**Install** :ref:`filtron reverse proxy <filtron.sh>`
- sed -i -e "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml
+.. code:: bash
-Edit searx/settings.yml if necessary.
+ $ sudo -H ./utils/filtron.sh install all
-Check
-=====
+**Install** :ref:`result proxy <morty.sh>`
-Start searx:
+.. code:: bash
-.. code:: sh
+ $ sudo -H ./utils/morty.sh install all
- python searx/webapp.py
+If all services are running fine, you can add it to your HTTP server:
-Go to http://localhost:8888
+- :ref:`installation apache`
+- :ref:`installation nginx`
-If everything works fine, disable the debug option in settings.yml:
-
-.. code:: sh
-
- sed -i -e "s/debug : True/debug : False/g" searx/settings.yml
-
-At this point searx is not demonized ; uwsgi allows this.
-
-You can exit the virtualenv and the searx user bash (enter exit command
-twice).
-
-uwsgi
-=====
-
-Install packages:
-
-.. code:: sh
-
- sudo -H apt-get install \
- uwsgi uwsgi-plugin-python
-
-Create the configuration file ``/etc/uwsgi/apps-available/searx.ini`` with this
-content:
-
-.. code:: ini
-
- [uwsgi]
- # Who will run the code
- uid = searx
- gid = searx
-
- # disable logging for privacy
- disable-logging = true
-
- # Number of workers (usually CPU count)
- workers = 4
-
- # The right granted on the created socket
- chmod-socket = 666
-
- # Plugin to use and interpretor config
- single-interpreter = true
- master = true
- plugin = python
- lazy-apps = true
- enable-threads = true
-
- # Module to import
- module = searx.webapp
-
- # Support running the module from a webserver subdirectory.
- route-run = fixpathinfo:
-
- # Virtualenv and python path
- virtualenv = /usr/local/searx/searx-ve/
- pythonpath = /usr/local/searx/
- chdir = /usr/local/searx/searx/
-
-Activate the uwsgi application and restart:
-
-.. code:: sh
-
- cd /etc/uwsgi/apps-enabled
- ln -s ../apps-available/searx.ini
- /etc/init.d/uwsgi restart
-
-Web server
-==========
-
-with nginx
-----------
-
-If nginx is not installed (uwsgi will not work with the package
-nginx-light):
-
-.. code:: sh
-
- sudo -H apt-get install nginx
-
-Hosted at /
-~~~~~~~~~~~
-
-Create the configuration file ``/etc/nginx/sites-available/searx`` with this
-content:
-
-.. code:: nginx
-
- server {
- listen 80;
- server_name searx.example.com;
- root /usr/local/searx/searx;
-
- location /static {
- }
-
- location / {
- include uwsgi_params;
- uwsgi_pass unix:/run/uwsgi/app/searx/socket;
- }
- }
-
-Create a symlink to sites-enabled:
-
-.. code:: sh
-
- sudo -H ln -s /etc/nginx/sites-available/searx /etc/nginx/sites-enabled/searx
-
-Restart service:
-
-.. code:: sh
-
- sudo -H service nginx restart
- sudo -H service uwsgi restart
-
-from subdirectory URL (/searx)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Add this configuration in the server config file
-``/etc/nginx/sites-enabled/default``:
-
-.. code:: nginx
-
- location /searx/static {
- alias /usr/local/searx/searx/static;
- }
-
- location /searx {
- uwsgi_param SCRIPT_NAME /searx;
- include uwsgi_params;
- uwsgi_pass unix:/run/uwsgi/app/searx/socket;
- }
-
-
-**OR** using reverse proxy (Please, note that reverse proxy advised to be used
-in case of single-user or low-traffic instances.)
-
-.. code:: nginx
-
- location /searx/static {
- alias /usr/local/searx/searx/static;
- }
-
- location /searx {
- proxy_pass http://127.0.0.1:8888;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Scheme $scheme;
- proxy_set_header X-Script-Name /searx;
- proxy_buffering off;
- }
-
-
-Enable ``base_url`` in ``searx/settings.yml``
-
-.. code:: yaml
-
- base_url : http://your.domain.tld/searx/
-
-Restart service:
-
-.. code:: sh
-
- sudo -H service nginx restart
- sudo -H service uwsgi restart
-
-disable logs
-^^^^^^^^^^^^
-
-for better privacy you can disable nginx logs about searx.
-
-how to proceed: below ``uwsgi_pass`` in ``/etc/nginx/sites-available/default``
-add:
-
-.. code:: nginx
-
- access_log /dev/null;
- error_log /dev/null;
-
-Restart service:
-
-.. code:: sh
-
- sudo -H service nginx restart
-
-with apache
------------
-
-Add wsgi mod:
-
-.. code:: sh
-
- sudo -H apt-get install libapache2-mod-uwsgi
- sudo -H a2enmod uwsgi
-
-Add this configuration in the file ``/etc/apache2/apache2.conf``:
-
-.. code:: apache
-
- <Location />
- Options FollowSymLinks Indexes
- SetHandler uwsgi-handler
- uWSGISocket /run/uwsgi/app/searx/socket
- </Location>
-
-Note that if your instance of searx is not at the root, you should change
-``<Location />`` by the location of your instance, like ``<Location /searx>``.
-
-Restart Apache:
-
-.. code:: sh
-
- sudo -H /etc/init.d/apache2 restart
-
-disable logs
-~~~~~~~~~~~~
-
-For better privacy you can disable Apache logs.
-
-.. warning::
-
- You can only disable logs for the whole (virtual) server not for a specific
- path.
-
-Go back to ``/etc/apache2/apache2.conf`` and above ``<Location />`` add:
-
-.. code:: apache
-
- CustomLog /dev/null combined
-
-Restart Apache:
-
-.. code:: sh
-
- sudo -H /etc/init.d/apache2 restart
-
-How to update
-=============
-
-.. code:: sh
-
- cd /usr/local/searx
- sudo -H -u searx -i
-
-.. code:: sh
-
- (searx)$ . ./searx-ve/bin/activate
- (searx)$ git stash
- (searx)$ git pull origin master
- (searx)$ git stash apply
- (searx)$ ./manage.sh update_packages
-
-.. code:: sh
-
- sudo -H service uwsgi restart
-
-Docker
-======
-
-Make sure you have installed Docker. For instance, you can deploy searx like this:
-
-.. code:: sh
-
- docker pull wonderfall/searx
- docker run -d --name searx -p $PORT:8888 wonderfall/searx
-
-Go to ``http://localhost:$PORT``.
-
-See https://hub.docker.com/r/wonderfall/searx/ for more informations. It's also
-possible to build searx from the embedded Dockerfile.
-
-.. code:: sh
-
- git clone https://github.com/asciimoo/searx.git
- cd searx
- docker build -t whatever/searx .
-
-References
-==========
-
-* https://about.okhin.fr/posts/Searx/ with some additions
-
-* How to: `Setup searx in a couple of hours with a free SSL certificate
- <https://www.reddit.com/r/privacytoolsIO/comments/366kvn/how_to_setup_your_own_privacy_respecting_search/>`__
diff --git a/docs/admin/morty.rst b/docs/admin/morty.rst
index 7d7b344..2858fde 100644
--- a/docs/admin/morty.rst
+++ b/docs/admin/morty.rst
@@ -1,7 +1,14 @@
+
+.. _searx morty:
+
=========================
How to setup result proxy
=========================
+.. sidebar:: further reading
+
+ - :ref:`morty.sh`
+
.. _morty: https://github.com/asciimoo/morty
.. _morty's README: https://github.com/asciimoo/morty
diff --git a/docs/admin/settings.rst b/docs/admin/settings.rst
index 0bfdcc6..8b1cb8d 100644
--- a/docs/admin/settings.rst
+++ b/docs/admin/settings.rst
@@ -4,11 +4,17 @@
``settings.yml``
================
+This page describe the options possibilities of the :origin:`searx/settings.yml`
+file.
+
.. sidebar:: Further reading ..
- :ref:`search API`
-This page describe the options possibilities of the settings.yml file.
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
.. _settings global:
@@ -98,7 +104,7 @@ Global Settings
specific instance of searx, a locale can be defined using an ISO language
code, like ``fr``, ``en``, ``de``.
-.. _requests proxies: http://docs.python-requests.org/en/latest/user/advanced/#proxies
+.. _requests proxies: http://requests.readthedocs.io/en/latest/user/advanced/#proxies
.. _PR SOCKS support: https://github.com/kennethreitz/requests/pull/478
``outgoing_proxies`` :
@@ -175,6 +181,9 @@ Engine settings
``weigth`` : default ``1``
Weighting of the results of this engine.
+``display_error_messages`` : default ``True``
+ When an engine returns an error, the message is displayed on the user interface.
+
.. note::
A few more options are possible, but they are pretty specific to some
diff --git a/docs/admin/update-searx.rst b/docs/admin/update-searx.rst
new file mode 100644
index 0000000..c74c956
--- /dev/null
+++ b/docs/admin/update-searx.rst
@@ -0,0 +1,23 @@
+.. _update searx:
+
+=============
+How to update
+=============
+
+.. code:: sh
+
+ sudo -H -u searx -i
+ (searx)$ git stash
+ (searx)$ git pull origin master
+ (searx)$ git stash apply
+ (searx)$ ./manage.sh update_packages
+
+Restart uwsgi:
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code:: sh
+
+ sudo -H systemctl restart uwsgi
diff --git a/docs/blog/index.rst b/docs/blog/index.rst
index 52fa3f1..04d9535 100644
--- a/docs/blog/index.rst
+++ b/docs/blog/index.rst
@@ -3,8 +3,11 @@ Blog
====
.. toctree::
- :maxdepth: 1
+ :maxdepth: 2
+ :caption: Contents
+ lxcdev-202006
python3
admin
intro-offline
+ private-engines
diff --git a/docs/blog/lxcdev-202006.rst b/docs/blog/lxcdev-202006.rst
new file mode 100644
index 0000000..f9ca3c2
--- /dev/null
+++ b/docs/blog/lxcdev-202006.rst
@@ -0,0 +1,413 @@
+.. _blog-lxcdev-202006:
+
+=======================================
+Developing in Linux containers [202006]
+=======================================
+
+.. _LXC: https://linuxcontainers.org/lxc/introduction/
+
+.. sidebar:: Audience
+
+ This blog post is written for experienced admins and developers / readers
+ should have a serious meaning about: *distributed*, *merge* and *linux
+ container*.
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
+
+In PR :PR:`1803` we added a lot of scripts to Searx's boilerplate. In this blog
+post I will show you, how you can make use of them in *distributed and
+heterogeneous development cycles* (TL;DR; jump to the :ref:`blog-lxcdev-202006
+abstract`).
+
+Motivation
+==========
+
+Normally in our development cycle, we edit the sources and run some test and/or
+builds by using ``make`` before we commit. This cycle is simple and perfect but
+might fail in some aspects we should not overlook.
+
+ The environment in which we run all our development processes matters!
+
+The :ref:`makefile` and the :ref:`make pyenv` encapsulate a lot for us, but they
+do not have access to all prerequisites. For example, there may have
+dependencies on packages that are installed on the developer's desktop, but
+usually are not preinstalled on a server or client system. Another examples
+are; settings have been made to the software on the developer's host that would
+never be set on a *production* system.
+
+*Linux Containers* (LXC_) are isolate environments and not to mix up on
+developer's all the prerequisites of all the projects he contribute to, is
+always a good choice.
+
+The scripts from PR :PR:`1803` can divide in those to install and maintain
+software:
+
+- :ref:`searx.sh`
+- :ref:`filtron.sh`
+- :ref:`morty.sh`
+
+and the script :ref:`lxc.sh`, with we can scale our installation, maintenance or
+even development tasks over a stack of containers, what we call: *Searx's lxc
+suite*.
+
+Gentlemen, start your engines!
+==============================
+
+.. _LXD: https://linuxcontainers.org/lxd/introduction/
+.. _archlinux: https://www.archlinux.org/
+
+Before you can start with containers, you need to install and initiate LXD_
+once:
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ snap install lxd
+ $ lxd init --auto
+
+And you need to clone from origin or if you have your own fork, clone from your
+fork:
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ cd ~/Downloads
+ $ git clone https://github.com/asciimoo/searx.git
+ $ cd searx
+
+The :ref:`lxc-searx.env` consists of several images, see ``export
+LXC_SUITE=(...`` near by :origin:`utils/lxc-searx.env#L19`. For this blog post
+we exercise on a archlinux_ image. The container of this image is named
+``searx-archlinux``. Lets build the container, but be sure that this container
+does not already exists, so first lets remove possible old one:
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh remove searx-archlinux
+ $ sudo -H ./utils/lxc.sh build searx-archlinux
+
+.. sidebar:: The ``searx-archlinux`` container
+
+ is the base of all our exercises here.
+
+In this container we install all services :ref:`including searx, morty & filtron
+<lxc.sh install suite>` in once:
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh install suite searx-archlinux
+
+To proxy HTTP from filtron and morty in the container to the outside of the
+container, install nginx into the container. Once for the bot blocker filtron:
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ ./utils/filtron.sh nginx install
+ ...
+ INFO: got 429 from http://10.174.184.156/searx
+
+and once for the content sanitizer (content proxy morty):
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ ./utils/morty.sh nginx install
+ ...
+ INFO: got 200 from http://10.174.184.156/morty/
+
+.. sidebar:: Fully functional searx suite
+
+ From here on you have a fully functional searx suite running with bot blocker
+ (filtron) and Web content sanitizer (content proxy morty) needed for a
+ *privacy protecting* search engine.
+
+On your system, the IP of your ``searx-archlinux`` container differs from
+http://10.174.184.156/searx, just open the URL reported in your installation
+protocol in your WEB browser from the desktop to test the instance from outside
+of the container.
+
+In such a searx suite admins can maintain and access the debug log of the
+different services quite easy.
+
+.. _working in containers:
+
+In containers, work as usual
+============================
+
+Usually you open a root-bash using ``sudo -H bash``. In case of LXC containers
+open the root-bash in the container using ``./utils/lxc.sh cmd
+searx-archlinux``:
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux bash
+ INFO: [searx-archlinux] bash
+ [root@searx-archlinux searx]# pwd
+ /share/searx
+
+The prompt ``[root@searx-archlinux ...]`` signals, that you are the root user in
+the searx-container. To debug the running searx instance use:
+
+.. tabs::
+
+ .. group-tab:: root@searx-archlinux
+
+ .. code:: sh
+
+ $ ./utils/searx.sh inspect service
+ ...
+ use [CTRL-C] to stop monitoring the log
+ ...
+
+Back in the browser on your desktop open the service http://10.174.184.156/searx
+and run your application tests while the debug log is shown in the terminal from
+above. You can stop monitoring using ``CTRL-C``, this also disables the *"debug
+option"* in searx's settings file and restarts the searx uwsgi application. To
+debug services from filtron and morty analogous use:
+
+.. tabs::
+
+ .. group-tab:: root@searx-archlinux
+
+ .. code:: sh
+
+ $ ./utils/filtron.sh inspect service
+ $ ./utils/morty.sh inspect service
+
+Another point we have to notice is that each service (:ref:`searx <searx.sh>`,
+:ref:`filtron <filtron.sh>` and :ref:`morty <morty.sh>`) runs under dedicated
+system user account with the same name (compare :ref:`create searx user`). To
+get a shell from theses accounts, simply call one of the scripts:
+
+.. tabs::
+
+ .. group-tab:: root@searx-archlinux
+
+ .. code:: sh
+
+ $ ./utils/searx.sh shell
+ $ ./utils/filtron.sh shell
+ $ ./utils/morty.sh shell
+
+To get in touch, open a shell from the service user (searx@searx-archlinux):
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ ./utils/searx.sh shell
+ // exit with [CTRL-D]
+ (searx-pyenv) [searx@searx-archlinux ~]$ ...
+
+The prompt ``[searx@searx-archlinux]`` signals that you are logged in as system
+user ``searx`` in the ``searx-archlinux`` container and the python *virtualenv*
+``(searx-pyenv)`` environment is activated.
+
+.. tabs::
+
+ .. group-tab:: searx@searx-archlinux
+
+ .. code:: sh
+
+ (searx-pyenv) [searx@searx-archlinux ~]$ pwd
+ /usr/local/searx
+
+
+
+Wrap production into developer suite
+====================================
+
+In this section we will see how to change the *"Fully functional searx suite"*
+from a LXC container (which is quite ready for production) into a developer
+suite. For this, we have to keep an eye on the :ref:`installation basic`:
+
+- searx setup in: ``/etc/searx/settings.yml``
+- searx user's home: ``/usr/local/searx``
+- virtualenv in: ``/usr/local/searx/searx-pyenv``
+- searx software in: ``/usr/local/searx/searx-src``
+
+The searx software is a clone of the ``GIT_URL`` (see :ref:`makefile setup`) and
+the working tree is checked out from the ``GIT_BRANCH``. With the use of the
+:ref:`searx.sh` the searx service was installed as :ref:`uWSGI application
+<searx uwsgi>`. To maintain this service, we can use ``systemctl`` (compare
+:ref:`service architectures on distributions <uwsgi configuration>`).
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ systemctl stop uwsgi@searx
+
+With the command above, we stopped the searx uWSGI-App in the archlinux
+container.
+
+The uWSGI-App for the archlinux dsitros is configured in
+:origin:`utils/templates/etc/uwsgi/apps-archlinux/searx.ini`, from where at
+least you should attend the settings of ``uid``, ``chdir``, ``env`` and
+``http``::
+
+ env = SEARX_SETTINGS_PATH=/etc/searx/settings.yml
+ http = 127.0.0.1:8888
+
+ chdir = /usr/local/searx/searx-src/searx
+ virtualenv = /usr/local/searx/searx-pyenv
+ pythonpath = /usr/local/searx/searx-src
+
+If you have read the :ref:`"Good to know section" <lxc.sh>` you remember, that
+each container shares the root folder of the repository and the command
+``utils/lxc.sh cmd`` handles relative path names **transparent**. To wrap the
+searx installation into a developer one, we simple have to create a smylink to
+the **transparent** reposetory from the desktop. Now lets replace the
+repository at ``searx-src`` in the container with the working tree from outside
+of the container:
+
+.. tabs::
+
+ .. group-tab:: container becomes a developer suite
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ mv /usr/local/searx/searx-src /usr/local/searx/searx-src.old
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ ln -s /share/searx/ /usr/local/searx/searx-src
+
+Now we can develop as usual in the working tree of our desktop system. Every
+time the software was changed, you have to restart the searx service (in the
+conatiner):
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ systemctl restart uwsgi@searx
+
+
+Remember: :ref:`working in containers` .. here are just some examples from my
+daily usage:
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ To *inspect* the searx instance (already described above):
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ ./utils/searx.sh inspect service
+
+ Run :ref:`makefile`, e.g. to test inside the container:
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ make test
+
+ To install all prerequisites needed for a :ref:`buildhosts`:
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ ./utils/searx.sh install buildhost
+
+ To build the docs on a buildhost :ref:`buildhosts`:
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
+ make docs
+
+.. _blog-lxcdev-202006 abstract:
+
+Abstract
+========
+
+We build up a fully functional searx suite in a archlinux container:
+
+.. code:: sh
+
+ $ sudo -H ./utils/lxc.sh install suite searx-archlinux
+
+To access HTTP from the desktop we installed nginx for the services inside the
+conatiner:
+
+.. tabs::
+
+ .. group-tab:: [root@searx-archlinux]
+
+ .. code:: sh
+
+ $ ./utils/filtron.sh nginx install
+ $ ./utils/morty.sh nginx install
+
+To wrap the suite into a developer one, we created a symbolic link to the
+repository which is shared **transparent** from the desktop's file system into
+the container :
+
+.. tabs::
+
+ .. group-tab:: [root@searx-archlinux]
+
+ .. code:: sh
+
+ $ mv /usr/local/searx/searx-src /usr/local/searx/searx-src.old
+ $ ln -s /share/searx/ /usr/local/searx/searx-src
+ $ systemctl restart uwsgi@searx
+
+To get remarks from the suite of the archlinux container we can use:
+
+.. tabs::
+
+ .. group-tab:: desktop
+
+ .. code:: sh
+
+ $ sudo -H ./utils/lxc.sh show suite searx-archlinux
+ ...
+ [searx-archlinux] INFO: (eth0) filtron: http://10.174.184.156:4004/ http://10.174.184.156/searx
+ [searx-archlinux] INFO: (eth0) morty: http://10.174.184.156:3000/
+ [searx-archlinux] INFO: (eth0) docs-live: http://10.174.184.156:8080/
+ [searx-archlinux] INFO: (eth0) IPv6: http://[fd42:573b:e0b3:e97e:216:3eff:fea5:9b65]
+ ...
+
diff --git a/docs/blog/private-engines.rst b/docs/blog/private-engines.rst
new file mode 100644
index 0000000..796f0fc
--- /dev/null
+++ b/docs/blog/private-engines.rst
@@ -0,0 +1,63 @@
+==================================
+Limit access to your searx engines
+==================================
+
+Administrators might find themselves wanting to limit access to some of the
+enabled engines on their instances. It might be because they do not want to
+expose some private information through an offline engine. Or they
+would rather share engines only with their trusted friends or colleagues.
+
+Private engines
+===============
+
+To solve this issue private engines were introduced in :pull:`1823`.
+A new option was added to engines named `tokens`. It expects a list
+of strings. If the user making a request presents one of the tokens
+of an engine, they can access information about the engine
+and make search requests.
+
+Example configuration to restrict access to the Arch Linux Wiki engine:
+
+.. code:: yaml
+
+ - name : arch linux wiki
+ engine : archlinux
+ shortcut : al
+ tokens : [ 'my-secret-token' ]
+
+
+Unless a user has configured the right token, the engine is going
+to be hidden from him/her. It is not going to be included in the
+list of engines on the Preferences page and in the output of
+`/config` REST API call.
+
+Tokens can be added to one's configuration on the Preferences page
+under "Engine tokens". The input expects a comma separated list of
+strings.
+
+The distribution of the tokens from the administrator to the users
+is not carved in stone. As providing access to such engines
+implies that the admin knows and trusts the user, we do not see
+necessary to come up with a strict process. Instead,
+we would like to add guidelines to the documentation of the feature.
+
+Next steps
+==========
+
+Now that searx has support for both offline engines and private engines,
+it is possible to add concrete engines which benefit from these features.
+For example engines which search on the local host running the instance.
+Be it searching your file system or querying a private database. Be creative
+and come up with new solutions which fit your use case.
+
+Acknowledgement
+===============
+
+This development was sponsored by `Search and Discovery Fund`_ of `NLnet Foundation`_ .
+
+.. _Search and Discovery Fund: https://nlnet.nl/discovery
+.. _NLnet Foundation: https://nlnet.nl/
+
+
+| Happy hacking.
+| kvch // 2020.02.28 22:26
diff --git a/docs/build-templates/filtron.rst b/docs/build-templates/filtron.rst
new file mode 100644
index 0000000..83a4518
--- /dev/null
+++ b/docs/build-templates/filtron.rst
@@ -0,0 +1,52 @@
+.. START create user
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: sh
+
+ $ sudo -H useradd --shell /bin/bash --system \\
+ --home-dir "$SERVICE_HOME" \\
+ --comment "Privacy-respecting metasearch engine" $SERVICE_USER
+
+ $ sudo -H mkdir "$SERVICE_HOME"
+ $ sudo -H chown -R "$SERVICE_GROUP:$SERVICE_GROUP" "$SERVICE_HOME"
+
+.. END create user
+
+.. START install go
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: bash
+
+ $ cat > "$GO_ENV" <<EOF
+ export GOPATH=${SERVICE_HOME}/go-apps
+ export PATH=\$PATH:${SERVICE_HOME}/local/go/bin:\$GOPATH/bin
+ EOF
+ $ sudo -i -u "${SERVICE_USER}"
+ (${SERVICE_USER}) $ echo 'source $GO_ENV' >> ~/.profile
+ (${SERVICE_USER}) $ mkdir ${SERVICE_HOME}/local
+ (${SERVICE_USER}) $ wget --progress=bar -O "${GO_TAR}" \\
+ "${GO_PKG_URL}"
+ (${SERVICE_USER}) $ tar -C ${SERVICE_HOME}/local/go -xzf "${GO_TAR}"
+ (${SERVICE_USER}) $ which go
+ ${SERVICE_HOME}/local/go/bin/go
+
+.. END install go
+
+.. START install filtron
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: bash
+
+ $ sudo -i -u "${SERVICE_USER}"
+ (${SERVICE_USER}) $ go get -v -u github.com/asciimoo/filtron
+
+.. END install filtron
diff --git a/docs/build-templates/morty.rst b/docs/build-templates/morty.rst
new file mode 100644
index 0000000..4a5d1f2
--- /dev/null
+++ b/docs/build-templates/morty.rst
@@ -0,0 +1,52 @@
+.. START create user
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: sh
+
+ $ sudo -H useradd --shell /bin/bash --system \\
+ --home-dir "$SERVICE_HOME" \\
+ --comment "Privacy-respecting metasearch engine" $SERVICE_USER
+
+ $ sudo -H mkdir "$SERVICE_HOME"
+ $ sudo -H chown -R "$SERVICE_GROUP:$SERVICE_GROUP" "$SERVICE_HOME"
+
+.. END create user
+
+.. START install go
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: bash
+
+ $ cat > "$GO_ENV" <<EOF
+ export GOPATH=${SERVICE_HOME}/go-apps
+ export PATH=\$PATH:${SERVICE_HOME}/local/go/bin:\$GOPATH/bin
+ EOF
+ $ sudo -i -u "${SERVICE_USER}"
+ (${SERVICE_USER}) $ echo 'source $GO_ENV' >> ~/.profile
+ (${SERVICE_USER}) $ mkdir ${SERVICE_HOME}/local
+ (${SERVICE_USER}) $ wget --progress=bar -O "${GO_TAR}" \\
+ "${GO_PKG_URL}"
+ (${SERVICE_USER}) $ tar -C ${SERVICE_HOME}/local/go -xzf "${GO_TAR}"
+ (${SERVICE_USER}) $ which go
+ ${SERVICE_HOME}/local/go/bin/go
+
+.. END install go
+
+.. START install morty
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: bash
+
+ $ sudo -i -u "${SERVICE_USER}"
+ (${SERVICE_USER}) $ go get -v -u github.com/asciimoo/morty
+
+.. END install morty
diff --git a/docs/build-templates/searx.rst b/docs/build-templates/searx.rst
new file mode 100644
index 0000000..5cb70e9
--- /dev/null
+++ b/docs/build-templates/searx.rst
@@ -0,0 +1,192 @@
+.. template evaluated by: ./utils/searx.sh docs
+.. hint: all dollar-names are variables, dollar sign itself is quoted by: \\$
+
+.. START distro-packages
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code-block:: sh
+
+ $ sudo -H apt-get install -y \\
+${debian}
+
+ .. group-tab:: Arch Linux
+
+ .. code-block:: sh
+
+ $ sudo -H pacman -S --noconfirm \\
+${arch}
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code-block:: sh
+
+ $ sudo -H dnf install -y \\
+${fedora}
+
+.. END distro-packages
+
+.. START build-packages
+
+.. tabs::
+
+ .. group-tab:: Ubuntu / debian
+
+ .. code-block:: sh
+
+ $ sudo -H apt-get install -y \\
+${debian_build}
+
+ .. group-tab:: Arch Linux
+
+ .. code-block:: sh
+
+ $ sudo -H pacman -S --noconfirm \\
+${arch_build}
+
+ .. group-tab:: Fedora / RHEL
+
+ .. code-block:: sh
+
+ $ sudo -H dnf install -y \\
+${fedora_build}
+
+.. END build-packages
+
+.. START create user
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: sh
+
+ $ sudo -H useradd --shell /bin/bash --system \\
+ --home-dir "$SERVICE_HOME" \\
+ --comment "Privacy-respecting metasearch engine" $SERVICE_USER
+
+ $ sudo -H mkdir "$SERVICE_HOME"
+ $ sudo -H chown -R "$SERVICE_GROUP:$SERVICE_GROUP" "$SERVICE_HOME"
+
+.. END create user
+
+.. START clone searx
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: sh
+
+ $ sudo -H -u ${SERVICE_USER} -i
+ (${SERVICE_USER})$ git clone "https://github.com/asciimoo/searx.git" "$SEARX_SRC"
+
+.. END clone searx
+
+.. START create virtualenv
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: sh
+
+ (${SERVICE_USER})$ python3 -m venv "${SEARX_PYENV}"
+ (${SERVICE_USER})$ echo ". ${SEARX_PYENV}/bin/activate" >> "$SERVICE_HOME/.profile"
+
+.. END create virtualenv
+
+.. START manage.sh update_packages
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: sh
+
+ $ sudo -H -u ${SERVICE_USER} -i
+
+ (${SERVICE_USER})$ command -v python && python --version
+ $SEARX_PYENV/bin/python
+ Python 3.8.1
+
+ # update pip's boilerplate ..
+ pip install -U pip
+ pip install -U setuptools
+ pip install -U wheel
+
+ # jump to searx's working tree and install searx into virtualenv
+ (${SERVICE_USER})$ cd "$SEARX_SRC"
+ (${SERVICE_USER})$ pip install -e .
+
+
+.. END manage.sh update_packages
+
+.. START searx config
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: sh
+
+ $ sudo -H cp "$SEARX_SRC/searx/settings.yml" "${SEARX_SETTINGS_PATH}"
+ $ sudo -H sed -i -e "s/ultrasecretkey/\\$(openssl rand -hex 16)/g" "$SEARX_SETTINGS_PATH"
+ $ sudo -H sed -i -e "s/{instance_name}/searx@\\$(uname -n)/g" "$SEARX_SETTINGS_PATH"
+
+.. END searx config
+
+.. START check searx installation
+
+.. tabs::
+
+ .. group-tab:: bash
+
+ .. code-block:: sh
+
+ # enable debug ..
+ $ sudo -H sed -i -e "s/debug : False/debug : True/g" "$SEARX_SETTINGS_PATH"
+
+ # start webapp
+ $ sudo -H -u ${SERVICE_USER} -i
+ (${SERVICE_USER})$ cd ${SEARX_SRC}
+ (${SERVICE_USER})$ export SEARX_SETTINGS_PATH="${SEARX_SETTINGS_PATH}"
+ (${SERVICE_USER})$ python searx/webapp.py
+
+ # disable debug
+ $ sudo -H sed -i -e "s/debug : True/debug : False/g" "$SEARX_SETTINGS_PATH"
+
+Open WEB browser and visit http://$SEARX_INTERNAL_URL . If you are inside a
+container or in a script, test with curl:
+
+.. tabs::
+
+ .. group-tab:: WEB browser
+
+ .. code-block:: sh
+
+ $ xgd-open http://$SEARX_INTERNAL_URL
+
+ .. group-tab:: curl
+
+ .. code-block:: none
+
+ $ curl --location --verbose --head --insecure $SEARX_INTERNAL_URL
+
+ * Trying 127.0.0.1:8888...
+ * TCP_NODELAY set
+ * Connected to 127.0.0.1 (127.0.0.1) port 8888 (#0)
+ > HEAD / HTTP/1.1
+ > Host: 127.0.0.1:8888
+ > User-Agent: curl/7.68.0
+ > Accept: */*
+ >
+ * Mark bundle as not supporting multiuse
+ * HTTP 1.0, assume close after body
+ < HTTP/1.0 200 OK
+ HTTP/1.0 200 OK
+ ...
+
+.. END check searx installation
diff --git a/docs/conf.py b/docs/conf.py
index af255e2..1f79e4c 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,17 +1,19 @@
# -*- coding: utf-8 -*-
import sys, os
+from sphinx_build_tools import load_sphinx_config
from searx.version import VERSION_STRING
from pallets_sphinx_themes import ProjectLink
-GIT_URL = os.environ.get("GIT_URL", "https://github.com/asciimoo/searx")
-SEARX_URL = os.environ.get("SEARX_URL", "https://searx.me")
-DOCS_URL = os.environ.get("DOCS_URL", "https://asciimoo.github.io/searx/")
+from searx.brand import GIT_URL
+GIT_BRANCH = os.environ.get("GIT_BRANCH", "master")
+from searx.brand import SEARX_URL
+from searx.brand import DOCS_URL
# Project --------------------------------------------------------------
project = u'searx'
-copyright = u'2015-2019, Adam Tauber, Noémi Ványi'
+copyright = u'2015-2020, Adam Tauber, Noémi Ványi'
author = u'Adam Tauber'
release, version = VERSION_STRING, VERSION_STRING
highlight_language = 'none'
@@ -22,6 +24,8 @@ master_doc = "index"
source_suffix = '.rst'
numfig = True
+exclude_patterns = ['build-templates/*.rst']
+
from searx import webapp
jinja_contexts = {
'webapp': dict(**webapp.__dict__)
@@ -35,7 +39,7 @@ extlinks['wiki'] = ('https://github.com/asciimoo/searx/wiki/%s', ' ')
extlinks['pull'] = ('https://github.com/asciimoo/searx/pull/%s', 'PR ')
# links to custom brand
-extlinks['origin'] = (GIT_URL + '/blob/master/%s', 'git://')
+extlinks['origin'] = (GIT_URL + '/blob/' + GIT_BRANCH + '/%s', 'git://')
extlinks['patch'] = (GIT_URL + '/commit/%s', '#')
extlinks['search'] = (SEARX_URL + '/%s', '#')
extlinks['docs'] = (DOCS_URL + '/%s', 'docs: ')
@@ -61,6 +65,8 @@ extensions = [
"pallets_sphinx_themes",
"sphinx_issues", # https://github.com/sloria/sphinx-issues/blob/master/README.rst
"sphinxcontrib.jinja", # https://github.com/tardyp/sphinx-jinja
+ "sphinxcontrib.programoutput", # https://github.com/NextThought/sphinxcontrib-programoutput
+ 'linuxdoc.kernel_include', # Implementation of the 'kernel-include' reST-directive.
'linuxdoc.rstFlatTable', # Implementation of the 'flat-table' reST-directive.
'linuxdoc.kfigure', # Sphinx extension which implements scalable image handling.
"sphinx_tabs.tabs", # https://github.com/djungelorm/sphinx-tabs
@@ -94,7 +100,7 @@ html_context = {
"project_links": [
ProjectLink("Source", GIT_URL),
ProjectLink("Wiki", "https://github.com/asciimoo/searx/wiki"),
- ProjectLink("Public instances", "https://asciimoo.github.io/searx/user/public_instances.html"),
+ ProjectLink("Public instances", "https://searx.space/"),
ProjectLink("Twitter", "https://twitter.com/Searx_engine"),
]
}
@@ -112,3 +118,9 @@ html_show_sourcelink = False
latex_documents = [
(master_doc, "searx-{}.tex".format(VERSION_STRING), html_title, author, "manual")
]
+
+# ------------------------------------------------------------------------------
+# Since loadConfig overwrites settings from the global namespace, it has to be
+# the last statement in the conf.py file
+# ------------------------------------------------------------------------------
+load_sphinx_config(globals())
diff --git a/docs/dev/contribution_guide.rst b/docs/dev/contribution_guide.rst
index 459dfb4..f9e9569 100644
--- a/docs/dev/contribution_guide.rst
+++ b/docs/dev/contribution_guide.rst
@@ -4,6 +4,11 @@
How to contribute
=================
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: entry
+
Prime directives: Privacy, Hackability
======================================
diff --git a/docs/dev/engine_overview.rst b/docs/dev/engine_overview.rst
index 449c837..c3c81ff 100644
--- a/docs/dev/engine_overview.rst
+++ b/docs/dev/engine_overview.rst
@@ -57,6 +57,7 @@ engine string name of searx-engine
(filename without ``.py``)
shortcut string shortcut of search-engine
timeout string specific timeout for search-engine
+display_error_messages boolean display error messages on the web UI
======================= =========== ===========================================
diff --git a/docs/dev/index.rst b/docs/dev/index.rst
index cb913a8..ba0a25a 100644
--- a/docs/dev/index.rst
+++ b/docs/dev/index.rst
@@ -3,7 +3,8 @@ Developer documentation
=======================
.. toctree::
- :maxdepth: 1
+ :maxdepth: 2
+ :caption: Contents
quickstart
contribution_guide
diff --git a/docs/dev/makefile.rst b/docs/dev/makefile.rst
index f595700..62cd0a9 100644
--- a/docs/dev/makefile.rst
+++ b/docs/dev/makefile.rst
@@ -11,23 +11,17 @@ Makefile Targets
Before looking deeper at the targets, first read about :ref:`makefile setup`
and :ref:`make pyenv`.
+ To install system requirements follow :ref:`buildhosts`.
+
With the aim to simplify development cycles, started with :pull:`1756` a
``Makefile`` based boilerplate was added. If you are not familiar with
Makefiles, we recommend to read gnu-make_ introduction.
The usage is simple, just type ``make {target-name}`` to *build* a target.
-Calling the ``help`` target gives a first overview::
-
- $ make help
- test - run developer tests
- docs - build documentation
- docs-live - autobuild HTML documentation while editing
- run - run developer instance
- install - developer install (./local)
- uninstall - uninstall (./local)
- gh-pages - build docs & deploy on gh-pages branch
- clean - drop builds and environments
- ...
+Calling the ``help`` target gives a first overview (``make help``):
+
+.. program-output:: bash -c "cd ..; make --no-print-directory help"
+
.. contents:: Contents
:depth: 2
@@ -37,27 +31,33 @@ Calling the ``help`` target gives a first overview::
.. _makefile setup:
-Setup
-=====
+Makefile setup
+==============
.. _git stash: https://git-scm.com/docs/git-stash
-The main setup is done in the :origin:`Makefile`::
-
- export GIT_URL=https://github.com/asciimoo/searx
- export SEARX_URL=https://searx.me
- export DOCS_URL=https://asciimoo.github.io/searx
-
.. sidebar:: fork & upstream
Commit changes in your (local) branch, fork or whatever, but do not push them
upstream / `git stash`_ is your friend.
-:GIT_URL: Changes this, to point to your searx fork.
+The main setup is done in the :origin:`Makefile`.
+
+.. literalinclude:: ../../Makefile
+ :start-after: START Makefile setup
+ :end-before: END Makefile setup
+
+:GIT_URL: Changes this, to point to your searx fork.
+:GIT_BRANCH: Changes this, to point to your searx branch.
+:SEARX_URL: Changes this, to point to your searx instance.
+:DOCS_URL: If you host your own (*brand*) documentation, change this URL.
-:SEARX_URL: Changes this, to point to your searx instance.
+If you change any of this build environment variables, you have to run ``make
+buildenv``::
-:DOCS_URL: If you host your own (branded) documentation, change this URL.
+ $ make buildenv
+ build searx/brand.py
+ build utils/brand.env
.. _make pyenv:
@@ -170,7 +170,7 @@ e.g.:
.. code:: sh
- $ make test.pep8 test.unit
+ $ make test.pep8 test.unit test.sh
. ./local/py3/bin/activate; ./manage.sh pep8_check
[!] Running pep8 check
. ./local/py3/bin/activate; ./manage.sh unit_tests
diff --git a/docs/dev/plugins.rst b/docs/dev/plugins.rst
index 2bf44f1..6add975 100644
--- a/docs/dev/plugins.rst
+++ b/docs/dev/plugins.rst
@@ -30,6 +30,14 @@ Example plugin
ctx['search'].suggestions.add('example')
return True
+Register your plugin
+====================
+
+To enable your plugin register your plugin in
+searx > plugin > __init__.py.
+And at the bottom of the file add your plugin like.
+``plugins.register(name_of_python_file)``
+
Plugin entry points
===================
diff --git a/docs/dev/quickstart.rst b/docs/dev/quickstart.rst
index e40772b..a4fc897 100644
--- a/docs/dev/quickstart.rst
+++ b/docs/dev/quickstart.rst
@@ -27,7 +27,7 @@ searx-ve virtualenv and install the required packages using ``manage.sh``.
cd ~/myprojects
git clone https://github.com/asciimoo/searx.git
cd searx
- virtualenv searx-ve
+ python3 -m venv searx-ve
. ./searx-ve/bin/activate
./manage.sh update_dev_packages
@@ -87,8 +87,8 @@ After satisfying the requirements styles can be build using ``manage.sh``
./manage.sh styles
-How to build the source of the oscar theme
-==========================================
+How to build the source of the themes
+=====================================
.. _grunt: https://gruntjs.com/
@@ -98,13 +98,13 @@ NodeJS, so first Node has to be installed.
.. code:: sh
sudo -H apt-get install nodejs
- sudo -H npm install -g grunt-cli
+ make node.env
After installing grunt, the files can be built using the following command:
.. code:: sh
- ./manage.sh grunt_build
+ make themes
Tips for debugging/development
diff --git a/docs/dev/reST.rst b/docs/dev/reST.rst
index 4dc1279..906a0e9 100644
--- a/docs/dev/reST.rst
+++ b/docs/dev/reST.rst
@@ -285,7 +285,7 @@ content becomes smart.
:rst:role:`pep` :pep:`8` ``:pep:`8```
sphinx.ext.extlinks_
--------------------------------------------------------------------------------------------------
- project's wiki article :wiki:`Searx-instances` ``:wiki:`Searx-instances```
+ project's wiki article :wiki:`Offline-engines` ``:wiki:`Offline-engines```
to docs public URL :docs:`dev/reST.html` ``:docs:`dev/reST.html```
files & folders origin :origin:`docs/dev/reST.rst` ``:origin:`docs/dev/reST.rst```
pull request :pull:`1756` ``:pull:`1756```
@@ -325,8 +325,9 @@ Literal blocks
The simplest form of :duref:`literal-blocks` is a indented block introduced by
two colons (``::``). For highlighting use :dudir:`highlight` or :ref:`reST
-code` directive. To include literals from external files use directive
-:dudir:`literalinclude`.
+code` directive. To include literals from external files use
+:rst:dir:`literalinclude` or :ref:`kernel-include <kernel-include-directive>`
+directive (latter one expands environment variables in the path name).
.. _reST literal:
@@ -1312,9 +1313,8 @@ others are basic-tabs_ and code-tabs_. Below a *group-tab* example from
.. literalinclude:: ../admin/buildhosts.rst
:language: reST
- :start-after: .. _system requirements:
- :end-before: .. _system requirements END:
-
+ :start-after: .. SNIP sh lint requirements
+ :end-before: .. SNAP sh lint requirements
.. _math:
diff --git a/docs/dev/search_api.rst b/docs/dev/search_api.rst
index 922548f..960d2fb 100644
--- a/docs/dev/search_api.rst
+++ b/docs/dev/search_api.rst
@@ -81,7 +81,7 @@ Parameters
Theme of instance.
Please note, available themes depend on an instance. It is possible that an
- instance administrator deleted, created or renamed themes on his/her instance.
+ instance administrator deleted, created or renamed themes on their instance.
See the available options in the preferences page of the instance.
``oscar-style`` : default ``logicodev``
@@ -91,7 +91,7 @@ Parameters
``oscar``.
Please note, available styles depend on an instance. It is possible that an
- instance administrator deleted, created or renamed styles on his/her
+ instance administrator deleted, created or renamed styles on their
instance. See the available options in the preferences page of the instance.
``enabled_plugins`` : optional
diff --git a/docs/index.rst b/docs/index.rst
index d9503fe..9e59086 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -2,7 +2,14 @@
Welcome to searx
================
-Search without being tracked.
+ *Search without being tracked.*
+
+Searx is a free internet metasearch engine which aggregates results from more
+than 70 search services. Users are neither tracked nor profiled. Additionally,
+searx can be used over Tor for online anonymity.
+
+Get started with searx by using one of the Searx-instances_. If you don't trust
+anyone, you can set up your own, see :ref:`installation`.
.. sidebar:: Features
@@ -16,17 +23,14 @@ Search without being tracked.
- Hosted by organizations, such as *La Quadrature du Net*, which promote
digital rights
-Searx is a free internet metasearch engine which aggregates results from more
-than 70 search services. Users are neither tracked nor profiled. Additionally,
-searx can be used over Tor for online anonymity.
-
-Get started with searx by using one of the :wiki:`Searx-instances`. If you
-don't trust anyone, you can set up your own, see :ref:`installation`.
-
.. toctree::
:maxdepth: 2
+ :caption: Contents
user/index
admin/index
dev/index
+ utils/index
blog/index
+
+.. _Searx-instances: https://searx.space
diff --git a/docs/user/conf.py b/docs/user/conf.py
new file mode 100644
index 0000000..53ade4b
--- /dev/null
+++ b/docs/user/conf.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8; mode: python -*-
+"""Configuration for the Searx user handbook
+"""
+project = 'Searx User-HB'
+version = release = VERSION_STRING
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+# author, documentclass [howto, manual, or own class]).
+latex_documents = [
+ ('index' # startdocname
+ , 'searx-user-hb.tex' # targetname
+ , '' # take title from .rst
+ , author # author
+ , 'howto' # documentclass
+ , False # toctree_only
+ ),
+]
+
diff --git a/docs/user/index.rst b/docs/user/index.rst
index 329be3b..96d11bf 100644
--- a/docs/user/index.rst
+++ b/docs/user/index.rst
@@ -3,8 +3,8 @@ User documentation
==================
.. toctree::
- :maxdepth: 1
+ :maxdepth: 2
+ :caption: Contents
- public_instances
search_syntax
own-instance
diff --git a/docs/user/own-instance.rst b/docs/user/own-instance.rst
index a2f7365..af415b6 100644
--- a/docs/user/own-instance.rst
+++ b/docs/user/own-instance.rst
@@ -2,8 +2,10 @@
Why use a private instance?
===========================
-"Is it worth to run my own instance?" is a common question among searx users.
-Before answering this question, see what options a searx user has.
+ *"Is it worth to run my own instance?"*
+
+\.\. is a common question among searx users. Before answering this question,
+see what options a searx user has.
Public instances are open to everyone who has access to its URL. Usually, these
are operated by unknown parties (from the users' point of view). Private
@@ -42,9 +44,9 @@ hidden from visited result pages.
What are the consequences of using public instances?
----------------------------------------------------
-If someone uses a public instance, he/she has to trust the administrator of that
+If someone uses a public instance, they have to trust the administrator of that
instance. This means that the user of the public instance does not know whether
-his/her requests are logged, aggregated and sent or sold to a third party.
+their requests are logged, aggregated and sent or sold to a third party.
Also, public instances without proper protection are more vulnerable to abusing
the search service, In this case the external service in exchange returns
diff --git a/docs/user/public_instances.rst b/docs/user/public_instances.rst
deleted file mode 100644
index 9665c58..0000000
--- a/docs/user/public_instances.rst
+++ /dev/null
@@ -1,318 +0,0 @@
-.. _public instances:
-
-..
- links has been ported from markdown to reST by::
-
- regexpr: \[([^\]]*)\]\(([^)]*)\)
- substitution: `\1 <\2>`__
-
-
-======================
-Public Searx instances
-======================
-
-.. _mailing list: mailto:searx-instances@autistici.org
-.. _subscription page: https://www.autistici.org/mailman/listinfo/searx-instances
-
-
-Useful information
-==================
-
-* Up-to-date health report available on https://stats.searx.xyz [1]_, for onion
- (tor) services: https://stats.searx.xyz/tor.html
-
-* Searx instances `mailing list`_ & `subscription page`_.
-
-* Some of the Searx instances have a CAcert SSL certificate. You can install the
- missing root cert `from here <http://www.cacert.org/index.php?id=3>`__.
-
-* To add your own Searx instance to this page send us your PR. A GitHub account
- is required to send PR or add an issue.
-
-.. [1] Note that most of the instances with a A+ grade in CSP column in this
- site are not fully functional - for example auto-completion may not work.
-
-
-List of public Searx instances
-==============================
-
-Meta-searx instances
-====================
-
-These are websites that source from other searx instances. These are useful if
-you can't decide which Searx instance to use:
-
-
-.. flat-table:: Meta-searx instances
- :header-rows: 1
- :stub-columns: 0
- :widths: 2 1 2 4 4
-
- * - clearnet host
- - onion host
- - issuer
- - source selection method
- - extra privacy features
-
- * - `Neocities <https://searx.neocities.org/>`__
- - n/a
- - Comodo (`Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.neocities.org>`__)
- - Redirects users directly to a random selection of any known running
- server after entering query. Requires
- Javascript. `Changelog <https://searx.neocities.org/changelog.html>`__.
- - Excludes servers with user tracking and analytics or are proxied through
- Cloudflare.
-
- * - `Searxes <https://searxes.danwin1210.me/>`__ @Danwin
- - onion v3 `hidden service
- <http://searxes.nmqnkngye4ct7bgss4bmv5ca3wpa55yugvxen5kz2bbq67lwy6ps54yd.onion/>`__
- - Let's Encrypt (`Verification
- <https://www.ssllabs.com/ssltest/analyze.html?d=searxes.danwin1210.me>`__)
- - sources data from a randomly selected running server that satisfies
- admin's quality standards which is used for post-processing
- - filters out privacy-hostile websites (like CloudFlare) and either marks
- them as such or folds them below the high ranking results.
-
-
-Alive and running
-=================
-
-**BEFORE EDITING**: Please add your Searx instance by respecting the alphabetic order.
-
-.. note::
-
- Public instances listed here may yield less accurate results as they have
- much higher traffic and consequently have a higher chance of being blocked by
- search providers such as Google, Qwant, Bing, Startpage, etc. Hosting your
- own instance or using an instance that isn't listed here may give you a more
- consistent search experience.
-
-* `ai.deafpray.wtf/searx <https://ai.deafpray.wtf/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=ai.deafpray.wtf/searx>`__
-* `bamboozle.it <https://bamboozle.it/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=bamboozle.it>`__
-* `bee.jaekr.dev <https://bee.jaekr.dev>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=bee.jaekr.dev>`__
-* `beezboo.com <https://beezboo.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=beezboo.com>`__
-* `burtrum.org/searx <https://burtrum.org/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=burtrum.org/searx>`__
-* `darmarit.cloud/searx <https://darmarit.cloud/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=darmarit.cloud/searx>`__
-* `dc.ax <https://dc.ax>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=dc.ax>`__
-* `dynabyte.ca <https://dynabyte.ca>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=dynabyte.ca>`__
-* `goso.ga <https://goso.ga/search>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=goso.ga>`__
-* `gruble.de <https://www.gruble.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.gruble.de>`__
-* `haku.ahmia.fi <https://haku.ahmia.fi/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=haku.ahmia.fi&latest>`__
-* `haku.lelux.fi <https://haku.lelux.fi/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=haku.lelux.fi>`__
-* `huyo.me <https://huyo.me/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=huyo.me>`__
-* `jsearch.pw <https://jsearch.pw>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=jsearch.pw>`__
-* `le-dahut.com/searx <https://le-dahut.com/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=le-dahut.com/searx>`__
-* `mijisou.com <https://mijisou.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=mijisou.com>`__
-* `null.media <https://null.media>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=null.media>`__
-* `openworlds.info <https://openworlds.info/>`__ - Issuer: Let's Encrypt
-* `perfectpixel.de/searx/ <https://www.perfectpixel.de/searx/>`__ - Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.perfectpixel.de>`__
-* `ransack.i2p <http://ransack.i2p/>`__ - I2P eepsite, only accessible with `I2P <https://geti2p.net/>`__ (`base32 address <http://mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq.b32.i2p>`__)
-* `rapu.nz <https://rapu.nz/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=rapu.nz>`__
-* `roflcopter.fr <https://wtf.roflcopter.fr/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=wtf.roflcopter.fr>`__
-* `roteserver.de/searx <https://roteserver.de/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=roteserver.de>`__
-* `s.cmd.gg <https://s.cmd.gg>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=s.cmd.gg>`__
-* `search.activemail.de <https://search.activemail.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.activemail.de&latest>`__
-* `search.anonymize.com <https://search.anonymize.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.anonymize.com>`__
-* `search.azkware.net <https://search.azkware.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.azkware.net>`__
-* `search.biboumail.fr <https://search.biboumail.fr/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.biboumail.fr>`__
-* `search.blankenberg.eu <https://search.blankenberg.eu>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.blankenberg.eu>`__
-* `search.d4networks.com <https://search.d4networks.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.d4networks.com>`__
-* `search.datensturm.net <https://search.datensturm.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.datensturm.net>`__
-* `search.disroot.org <https://search.disroot.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.disroot.org>`__
-* `search.ethibox.fr <https://search.ethibox.fr>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.ethibox.fr>`__
-* `search.fossdaily.xyz <https://search.fossdaily.xyz>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.fossdaily.xyz>`__
-* `search.galaxy.cat <https://search.galaxy.cat>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.galaxy.cat>`__
-* `search.gibberfish.org <https://search.gibberfish.org/>`__ (as `Hidden Service <http://o2jdk5mdsijm2b7l.onion/>`__ or `Proxied through Tor <https://search.gibberfish.org/tor/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.gibberfish.org>`__
-* `search.koehn.com <https://search.koehn.com>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.koehn.com>`__
-* `search.lgbtq.cool <https://search.lgbtq.cool/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.lgbtq.cool>`__
-* `search.mdosch.de <https://search.mdosch.de/>`__ (as `Hidden Service <http://search.4bkxscubgtxwvhpe.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.mdosch.de>`__
-* `search.modalogi.com <https://search.modalogi.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.modalogi.com&latest>`__
-* `search.moravit.com <https://search.moravit.com>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.moravit.com>`__
-* `search.nebulacentre.net <https://search.nebulacentre.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.nebulacentre.net>`__
-* `search.paulla.asso.fr <https://search.paulla.asso.fr/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.paulla.asso.fr>`__
-* `search.pifferi.info <https://search.pifferi.info/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.pifferi.info&latest>`__
-* `search.poal.co <https://search.poal.co/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.poal.co>`__
-* `search.privacytools.io <https://search.privacytools.io/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.privacytools.io>`__ - Uses Matomo for user tracking and analytics
-* `search.seds.nl <https://search.seds.nl/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.seds.nl&latest>`__
-* `search.snopyta.org <https://search.snopyta.org/>`__ (as `Hidden Service <http://juy4e6eicawzdrz7.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.snopyta.org>`__
-* `search.spaeth.me <https://search.spaeth.me/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.spaeth.me&latest>`__
-* `search.st8.at <https://search.st8.at/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.st8.at>`__
-* `search.stinpriza.org <https://search.stinpriza.org>`__ (as `Hidden Service <http://z5vawdol25vrmorm4yydmohsd4u6rdoj2sylvoi3e3nqvxkvpqul7bqd.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.stinpriza.org&hideResults=on>`__
-* `search.sudo-i.net <https://search.sudo-i.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.sudo-i.net>`__
-* `search.tolstoevsky.ml <https://search.tolstoevsky.ml>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.tolstoevsky.ml>`__
-* `searchsin.com/searx <https://searchsin.com/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searchsin.com/searx>`__
-* `searx.anongoth.pl <https://searx.anongoth.pl>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.anongoth.pl&latest>`__
-* `searx.be <https://searx.be>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.be>`__
-* `searx.ca <https://searx.ca/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ca>`__
-* `searx.canox.net <https://searx.canox.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.canox.net>`__
-* `searx.cybt.de <https://searx.cybt.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.cybt.de>`__
-* `searx.de <https://www.searx.de/>`__ - Issuer: COMODO `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.de>`__
-* `searx.decatec.de <https://searx.decatec.de>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.decatec.de>`__
-* `searx.devol.it <https://searx.devol.it/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=sears.devol.it>`__
-* `searx.dnswarden.com <https://searx.dnswarden.com>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.dnswarden.com>`__
-* `searx.drakonix.net <https://searx.drakonix.net/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.drakonix.net>`__
-* `searx.dresden.network <https://searx.dresden.network/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.dresden.network>`__
-* `searx.elukerio.org <https://searx.elukerio.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.elukerio.org/>`__
-* `searx.everdot.org <https://searx.everdot.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.everdot.org/>`__ - Crawls using YaCy
-* `searx.foo.li <https://searx.foo.li>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.foo.li&hideResults=on>`__
-* `searx.fossencdi.org <https://searx.fossencdi.org>`__ (as `Hidden Service <http://searx.cwuzdtzlubq5uual.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.fossencdi.org>`__
-* `searx.fr32k.de <https://searx.fr32k.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.fr32k.de>`__
-* `searx.good.one.pl <https://searx.good.one.pl>`__ (as `Hidden Service <http://searxl7u2y6gvonm.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.good.one.pl>`__
-* `searx.gotrust.de <https://searx.gotrust.de/>`__ (as `Hidden Service <http://nxhhwbbxc4khvvlw.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.gotrust.de>`__
-* `searx.hardwired.link <https://searx.hardwired.link/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.hardwired.link>`__
-* `searx.hlfh.space <https://searx.hlfh.space>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.hlfh.space>`__
-* `searx.info <https://searx.info>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.info>`__
-* `searx.itunix.eu <https://searx.itunix.eu/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.itunix.eu>`__
-* `searx.john-at-me.net <https://searx.john-at-me.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.john-at-me.net>`__
-* `searx.kvch.me <https://searx.kvch.me>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.kvch.me>`__
-* `searx.laquadrature.net <https://searx.laquadrature.net>`__ (as `Hidden Service <http://searchb5a7tmimez.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.laquadrature.net>`__
-* `searx.lelux.fi <https://searx.lelux.fi/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=haku.lelux.fi>`__
-* `searx.lhorn.de <https://searx.lhorn.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lhorn.de&latest>`__
-* `searx.li <https://searx.li/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.li>`__
-* `searx.libmail.eu <https://searx.libmail.eu/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.libmail.eu/>`__
-* `searx.linux.pizza <https://searx.linux.pizza>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.linux.pizza>`__
-* `searx.lynnesbian.space <https://searx.lynnesbian.space/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lynnesbian.space>`__
-* `searx.mastodontech.de <https://searx.mastodontech.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.mastodontech.de>`__
-* `searx.me <https://searx.me>`__ (as `Hidden Service <http://ulrn6sryqaifefld.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.me>`__
-* `searx.mxchange.org <https://searx.mxchange.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.mxchange.org>`__
-* `searx.nakhan.net <https://searx.nakhan.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nakhan.net>`__
-* `searx.nixnet.xyz <https://searx.nixnet.xyz>`__ (as `Hidden Service <http://searx.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nixnet.xyz>`__
-* `searx.nnto.net <https://searx.nnto.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nnto.net>`__
-* `searx.openhoofd.nl <https://searx.openhoofd.nl/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=openhoofd.nl>`__
-* `searx.openpandora.org <https://searx.openpandora.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.openpandora.org&latest>`__
-* `searx.operationtulip.com <https://searx.operationtulip.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.operationtulip.com>`__
-* `searx.orcadian.net <https://searx.orcadian.net/>`__ - Issuer: Comodo CA Limited `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.orcadian.net>`__
-* `searx.ouahpit.info <https://searx.ouahpiti.info/>`__ - Issuer: Let's Encrypt
-* `searx.pofilo.fr <https://searx.pofilo.fr/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.pofilo.fr>`__
-* `searx.prvcy.eu <https://searx.prvcy.eu/>`__ (as `Hidden Service <http://hmfztxt3pfhevucl.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.prvcy.eu>`__
-* `searx.pwoss.org <https://searx.pwoss.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.pwoss.org>`__
-* `searx.ro <https://searx.ro/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ro>`__
-* `searx.ru <https://searx.ru/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ru>`__
-* `searx.solusar.de <https://searx.solusar.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.solusar.de>`__
-* `searx.targaryen.house <https://searx.targaryen.house/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.targaryen.house>`__
-* `searx.tuxcloud.net <https://searx.tuxcloud.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.tuxcloud.net>`__
-* `searx.tyil.nl <https://searx.tyil.nl>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.tyil.nl>`__
-* `searx.wegeeks.win <https://searx.wegeeks.win>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.wegeeks.win>`__
-* `searx.win <https://searx.win/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.win&latest>`__
-* `searx.xyz <https://searx.xyz/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.xyz&latest>`__
-* `searx.zareldyn.net <https://searx.zareldyn.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.zareldyn.net>`__
-* `searx.zdechov.net <https://searx.zdechov.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.zdechov.net>`__
-* `searxs.eu <https://www.searxs.eu>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.searxs.eu&hideResults=on>`__
-* `seeks.hsbp.org <https://seeks.hsbp.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=seeks.hsbp.org>`__ - `PGP signed fingerprints of cert <https://seeks.hsbp.org/cert>`__
-* `skyn3t.in/srx <https://skyn3t.in/srx/>`__ - Issuer: Let's Encrypt | onion `hidden service <http://skyn3tb3bas655mw.onion/srx/>`__
-* `spot.ecloud.global <https://spot.ecloud.global/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=spot.ecloud.global>`__
-* `srx.sx <https://srx.sx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=srx.sx>`__
-* `stemy.me/searx <https://stemy.me/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=stemy.me>`__
-* `suche.dasnetzundich.de <https://suche.dasnetzundich.de>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=suche.dasnetzundich.de>`__
-* `suche.elaon.de <https://suche.elaon.de>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=suche.elaon.de>`__
-* `suche.xyzco456vwisukfg.onion <http://suche.xyzco456vwisukfg.onion/>`__
-* `suche.uferwerk.org <https://suche.uferwerk.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=suche.uferwerk.org>`__
-* `timdor.noip.me/searx <https://timdor.noip.me/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=timdor.noip.me/searx>`__
-* `trovu.komun.org <https://trovu.komun.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=trovu.komun.org>`__
-* `unmonito.red <https://unmonito.red/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=unmonito.red>`__
-* `www.finden.tk <https://www.finden.tk/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.finden.tk>`__
-* `zoek.anchel.nl <https://zoek.anchel.nl/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=zoek.anchel.nl>`__
-
-
-
-Running in exclusive private walled-gardens
-===========================================
-
-These instances run in walled-gardens that exclude some segment of the general
-public (e.g. Tor users and users sharing IPs with many other users). Caution:
-privacy is also compromised on these sites due to exposure of cleartext traffic
-to a third party other than the website operator.
-
-* `intelme.com <https://intelme.com>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=intelme.com>`__
-* `search404.io <https://www.search404.io/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search404.io>`__
-* `searx.com.au <https://searx.com.au/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.com.au>`__
-* `searx.lavatech.top <https://searx.lavatech.top/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lavatech.top>`__
-* `searchx.mobi <https://searchx.mobi/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searchx.mobi>`__
-* `searx.org <https://searx.org/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.org>`__
-* `searx.run <https://searx.run/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.run>`__
-* `searx.world <https://searx.world>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.world>`__ - Adds Amazon affiliate links
-
-
-Running with an incorrect SSL certificate
-=========================================
-
-* `listi.me <https://listi.me/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=listi.me&latest>`__
-* `s.matejc.com <https://s.matejc.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=s.matejc.com>`__
-* `search.jollausers.de <https://search.jollausers.de>`__ - Incorrectly configured `SSL certificate <https://www.ssllabs.com/ssltest/analyze.html?d=search.jollausers.de>`__
-* `search.paviro.de <https://search.paviro.de>`__ - Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.paviro.de>`__
-* `searx.abenthung.it <https://searx.abenthung.it/>`__ - Issuer: Comodo CA Limited `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.abenthung.it>`__
-* `searx.coding4schoki.org <https://searx.coding4schoki.org/>`__ - Incorrectly configured `SSL Certificate <https://www.ssllabs.com/ssltest/analyze.html?d=searx.coding4schoki.org>`__
-* `searx.haxors.club <https://searx.haxors.club/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.haxors.club>`__
-* `searx.nulltime.net <https://searx.nulltime.net/>`__ (as `Hidden Service <http://searx7gwtu5rh6wr.onion>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nulltime.net>`__
-* `searx.ch <https://searx.ch/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ch>`__ (cert clock problems)
-
-
-Offline
-=======
-
-* `a.searx.space <https://a.searx.space>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=a.searx.space>`__ (unstable, under construction).
-* `anyonething.de <https://anyonething.de>`__ - (was found to have become a pastebin on or before 2019-03-01) Issuer: Comodo CA Limited (Warning: uses Cloudflare) `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=anyonething.de>`__
-* `h7jwxg5rakyfvikpi.onion <http://7jwxg5rakyfvikpi.onion/>`__ - available only as Tor Hidden Service (down on 2019-06-26)
-* `hacktivis.me/searx <https://hacktivis.me/searx>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=hacktivis.me/searx>`__
-* `icebal.com <https://icebal.com>`__ - (down) Issuer: Let's Encrypt
-* `netrangler.host <https://netrangler.host>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=netrangler.host>`__
-* `opengo.nl <https://www.opengo.nl>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.opengo.nl>`__
-* `p9e.de <https://p9e.de/>`__ - (down - timeout) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=p9e.de>`__
-* `rubri.co <https://rubri.co>`__ - (down) Issuer: Let's Encrypt
-* `s.bacafe.xyz <https://s.bacafe.xyz/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=s.bacafe.xyz&latest>`__
-* `search.alecpap.com <https://search.alecpap.com/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.alecpap.com>`__
-* `search.blackit.de <https://search.blackit.de/>`__ - (down) Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.blackit.de>`__
-* `search.deblan.org <https://search.deblan.org/>`__ (down) - Issuer: COMODO via GANDI `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.deblan.org>`__
-* `search.homecomputing.fr <https://search.homecomputing.fr/>`__ - (down) Issuer: CAcert `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.homecomputing.fr>`__
-* `search.jpope.org <https://search.jpope.org>`__ - (down - timeout) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.jpope.org>`__
-* `search.kakise.xyz <https://search.kakise.xyz/>`__ - down
-* `search.kosebamse.com <https://search.kosebamse.com>`__ - Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.kosebamse.com>`__
-* `search.kujiu.org <https://search.kujiu.org>`__ - (down) Issuer: Let's Encrypt
-* `search.mailaender.coffee <https://search.mailaender.coffee/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.mailaender.coffee>`__
-* `search.matrix.ac <https://search.matrix.ac>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=matrix.ac>`__
-* `search.mypsc.ca <https://search.mypsc.ca/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.mypsc.ca>`__
-* `search.namedkitten.pw <https://search.namedkitten.pw>`__ - (SSL error) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.namedkitten.pw>`__
-* `search.opentunisia.org <https://search.opentunisia.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.opentunisia.org>`__
-* `search.r3d007.com <https://search.r3d007.com/>`__ - (down) Issuer: Let's Encrypt
-* `search.static.lu <https://search.static.lu/>`__ - (down) Issuer: StartCom `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.static.lu>`__
-* `search.teej.xyz <https://search.teej.xyz>`__ - (down) Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.teej.xyz>`__
-* `search.wxzm.sx <https://search.wxzm.sx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.wxzm.sx>`__
-* `searx.4ray.co <https://searx.4ray.co/>`__ - (no longer an instance, redirects to main page) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.4ray.co>`__
-* `searx.32bitflo.at <https://searx.32bitflo.at/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.32bitflo.at>`__
-* `searx.ahh.si <https://searx.ahh.si/>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ahh.si>`__
-* `searx.angristan.xyz <https://searx.angristan.xyz/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.angristan.xyz>`__
-* `searx.antirep.net <https://searx.antirep.net/>`__ - (return a 502 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.antirep.net>`__
-* `searx.aquilenet.fr <https://searx.aquilenet.fr/>`__ - (down - 429 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.aquilenet.fr>`__
-* `searx.at <https://searx.at/>`__ - (return "request exception" at every search) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.at>`__
-* `searx.cc <https://searx.cc/>`__ - (down on 2019-06-26) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.cc>`__
-* `searx.dk <https://searx.dk/>`__ - (down - 429 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.dk>`__
-* `searx.ehrmanns.ch <https://searx.ehrmanns.ch>`__ - (down) Issuer: Let's Encrypt
-* `searx.glibre.net <https://searx.glibre.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.glibre.net>`__
-* `searx.infini.fr <https://searx.infini.fr>`__ - (return a page stating that the website is not installed) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.infini.fr>`__
-* `searx.jeanphilippemorvan.info <https://searx.jeanphilippemorvan.info/>`__ - (down) Issuer: StartCom `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.jeanphilippemorvan.info>`__
-* `searx.lhorn.de <https://searx.lhorn.de/>`__ - (redirect the Searx's github repository page) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lhorn.de&latest>`__ (only reachable from european countries)
-* `searx.lvweb.host <https://searx.lvweb.host>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lvweb.host>`__
-* `searx.mrtino.eu <https://searx.mrtino.eu>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.mrtino.eu>`__
-* `searx.netzspielplatz.de <https://searx.netzspielplatz.de/>`__ - (error page about GDPR even when browsing it from USA and Asia) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.netzspielplatz.de>`__
-* `searx.new-admin.net <https://searx.new-admin.net>`__ - (down) Issuer: Let's Encrypt
-* `searx.nogafa.org <https://searx.nogafa.org/>`__ - (broken CSS) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nogafa.org>`__
-* `searx.potato.hu <https://searx.potato.hu>`__ - (not a searx instance) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.potato.hu>`__
-* `searx.rubbeldiekatz.info <https://searx.rubbeldiekatz.info/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.rubbeldiekatz.info/>`__
-* `searx.s42.space <https://searx.s42.space>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.s42.space>`__
-* `searx.salcay.hu <https://searx.salcay.hu/>`__ - (down - blank page) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.salcay.hu>`__
-* `searx.selea.se <https://searx.selea.se>`__ - (Leads to default Apache page) Issuer: RapidSSL (HSTS preloaded, DNSSEC) `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.selea.se>`__ | `HSTS Preload <https://hstspreload.org/?domain=searx.selea.se>`__
-* `searx.steinscraft.net <https://searx.steinscraft.net/>`__ - (down) Issuer: Cloudflare
-* `searx.techregion.de <https://searx.techregion.de/>`__ - (domain expired) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.techregion.de>`__
-* `searx.tognella.com <https://searx.tognella.com/>`__ - (down) Issuer: Cloudflare
-* `searx.xi.ht <https://searx.xi.ht/>`__ - (return a 502 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.xi.ht>`__
-* `searxist.com <https://searxist.com/>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searxist.com>`__
-* `so.sb <https://so.sb/>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=so.sb>`__
-* `srx.stdout.net <https://srx.stdout.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=srx.stdout.net>`__
-* `w6f7cgdm54cyvohcuhraaafhajctyj3ihenrovuxogoagrr5g43qmoid.onion <http://w6f7cgdm54cyvohcuhraaafhajctyj3ihenrovuxogoagrr5g43qmoid.onion/>`__ - Hidden Service
-* `win8linux.nohost.me <https://win8linux.nohost.me/searx/>`__ - (down) Issuer: Let's Encrypt
-* `wiznet.tech <https://wiznet.tech>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=wiznet.tech>`__
-* `www.mercurius.space <https://www.mercurius.space/>`__ - (down) Issuer: Let's Encrypt
-* `www.ready.pm <https://www.ready.pm>`__ - Issuer: WoSign `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.ready.pm>`__
-* `z.awsmppl.com <https://z.awsmppl.com>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=z.awsmppl.com>`__
-* `zlsdzh.tk <https://zlsdzh.tk>`__ - (down - 404 HTTP error) Issuer: TrustAsia Technologies, Inc. `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=zlsdzh.tk>`__ *
-
diff --git a/docs/utils/filtron.sh.rst b/docs/utils/filtron.sh.rst
new file mode 100644
index 0000000..86e3fa8
--- /dev/null
+++ b/docs/utils/filtron.sh.rst
@@ -0,0 +1,80 @@
+
+.. _filtron.sh:
+
+====================
+``utils/filtron.sh``
+====================
+
+.. sidebar:: further reading
+
+ - :ref:`searx filtron`
+ - :ref:`architecture`
+ - :ref:`installation` (:ref:`nginx <installation nginx>` & :ref:`apache
+ <installation apache>`)
+
+.. _Go: https://golang.org/
+.. _filtron: https://github.com/asciimoo/filtron
+.. _filtron README: https://github.com/asciimoo/filtron/blob/master/README.md
+
+To simplify installation and maintenance of a filtron instance you can use the
+script :origin:`utils/filtron.sh`. In most cases you will install filtron_
+simply by running the command:
+
+.. code:: bash
+
+ sudo -H ./utils/filtron.sh install all
+
+The script adds a ``${SERVICE_USER}`` (default:``filtron``) and installs filtron_
+into this user account:
+
+#. Create a separated user account (``filtron``).
+#. Download and install Go_ binary in user's $HOME (``~filtron``).
+#. Install filtron with the package management from Go_ (``go get -v -u
+ github.com/asciimoo/filtron``)
+#. Setup a proper rule configuration :origin:`[ref]
+ <utils/templates/etc/filtron/rules.json>` (``/etc/filtron/rules.json``).
+#. Setup a systemd service unit :origin:`[ref]
+ <utils/templates/lib/systemd/system/filtron.service>`
+ (``/lib/systemd/system/filtron.service``).
+
+
+Create user
+===========
+
+.. kernel-include:: $DOCS_BUILD/includes/filtron.rst
+ :start-after: START create user
+ :end-before: END create user
+
+
+Install go
+==========
+
+.. kernel-include:: $DOCS_BUILD/includes/filtron.rst
+ :start-after: START install go
+ :end-before: END install go
+
+
+Install filtron
+===============
+
+Install :origin:`rules.json <utils/templates/etc/filtron/rules.json>` at
+``/etc/filtron/rules.json`` (see :ref:`Sample configuration of filtron`) and
+install filtron software and systemd unit:
+
+.. kernel-include:: $DOCS_BUILD/includes/filtron.rst
+ :start-after: START install filtron
+ :end-before: END install filtron
+
+.. kernel-include:: $DOCS_BUILD/includes/filtron.rst
+ :start-after: START install systemd unit
+ :end-before: END install systemd unit
+
+.. _filtron.sh overview:
+
+Overview
+========
+
+The ``--help`` output of the script is largely self-explanatory
+(:ref:`toolboxing common`):
+
+.. program-output:: ../utils/filtron.sh --help
diff --git a/docs/utils/index.rst b/docs/utils/index.rst
new file mode 100644
index 0000000..13914af
--- /dev/null
+++ b/docs/utils/index.rst
@@ -0,0 +1,53 @@
+.. _searx_utils:
+.. _toolboxing:
+
+=======================
+Tooling box ``utils/*``
+=======================
+
+In the folder :origin:`utils/` we maintain some tools useful for admins and
+developers.
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Contents
+
+ searx.sh
+ filtron.sh
+ morty.sh
+ lxc.sh
+
+.. _toolboxing common:
+
+Common commands & environment
+=============================
+
+Scripts to maintain services often dispose of common commands and environments.
+
+``shell`` : command
+ Opens a shell from the service user ``${SERVICE_USSR}``, very helpful for
+ troubleshooting.
+
+``inspect service`` : command
+ Shows status and log of the service, most often you have a option to enable
+ more verbose debug logs. Very helpful for debugging, but be careful not to
+ enable debugging in a production environment!
+
+``FORCE_TIMEOUT`` : environment
+ Sets timeout for interactive prompts. If you want to run a script in batch
+ job, with defaults choices, set ``FORCE_TIMEOUT=0``. By example; to install a
+ reverse proxy for filtron on all containers of the :ref:`searx suite
+ <lxc-searx.env>` use ::
+
+ sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/filtron.sh apache install
+
+.. _toolboxing setup:
+
+Tooling box setup
+=================
+
+The main setup is done in the :origin:`.config.sh` (read also :ref:`makefile
+setup`).
+
+.. literalinclude:: ../../.config.sh
+ :language: bash
diff --git a/docs/utils/lxc.sh.rst b/docs/utils/lxc.sh.rst
new file mode 100644
index 0000000..114d091
--- /dev/null
+++ b/docs/utils/lxc.sh.rst
@@ -0,0 +1,149 @@
+
+.. _snap: https://snapcraft.io
+.. _snapcraft LXD: https://snapcraft.io/lxd
+.. _LXC/LXD Image Server: https://uk.images.linuxcontainers.org/
+.. _LXC: https://linuxcontainers.org/lxc/introduction/
+.. _LXD: https://linuxcontainers.org/lxd/introduction/
+.. _`LXD@github`: https://github.com/lxc/lxd
+
+.. _archlinux: https://www.archlinux.org/
+
+.. _lxc.sh:
+
+================
+``utils/lxc.sh``
+================
+
+.. sidebar:: further reading
+
+ - snap_, `snapcraft LXD`_
+ - LXC_, LXD_
+ - `LXC/LXD Image Server`_
+ - `LXD@github`_
+
+With the use of *Linux Containers* (LXC_) we can scale our tasks over a stack of
+containers, what we call the: *lxc suite*. The *searx suite*
+(:origin:`lxc-searx.env <utils/lxc-searx.env>`) is loaded by default, every time
+you start the ``lxc.sh`` script (*you do not need to care about*).
+
+Before you can start with containers, you need to install and initiate LXD_
+once::
+
+ $ snap install lxd
+ $ lxd init --auto
+
+To make use of the containers from the *searx suite*, you have to build the
+:ref:`LXC suite containers <lxc.sh help>` initial. But be warned, **this might
+take some time**::
+
+ $ sudo -H ./utils/lxc.sh build
+
+A cup of coffee later, your LXC suite is build up and you can run whatever task
+you want / in a selected or even in all :ref:`LXC suite containers <lxc.sh
+help>`. If you do not want to build all containers, **you can build just
+one**::
+
+ $ sudo -H ./utils/lxc.sh build searx-ubu1804
+
+*Good to know ...*
+
+Each container shares the root folder of the repository and the command
+``utils/lxc.sh cmd`` **handles relative path names transparent**, compare output
+of::
+
+ $ sudo -H ./utils/lxc.sh cmd -- ls -la Makefile
+ ...
+
+In the containers, you can run what ever you want, e.g. to start a bash use::
+
+ $ sudo -H ./utils/lxc.sh cmd searx-ubu1804 bash
+ INFO: [searx-ubu1804] bash
+ root@searx-ubu1804:/share/searx#
+
+If there comes the time you want to **get rid off all** the containers and
+**clean up local images** just type::
+
+ $ sudo -H ./utils/lxc.sh remove
+ $ sudo -H ./utils/lxc.sh remove images
+
+.. _lxc.sh install suite:
+
+Install suite
+=============
+
+To install the complete :ref:`searx suite (includes searx, morty & filtron)
+<lxc-searx.env>` into all LXC_ use::
+
+ $ sudo -H ./utils/lxc.sh install suite
+
+The command above installs a searx suite (see :ref:`installation scripts`). To
+get the IP (URL) of the filtron service in the containers use ``show suite``
+command. To test instances from containers just open the URLs in your
+WEB-Browser::
+
+ $ sudo ./utils/lxc.sh show suite | grep filtron
+ [searx-ubu1604] INFO: (eth0) filtron: http://n.n.n.246:4004/ http://n.n.n.246/searx
+ [searx-ubu1804] INFO: (eth0) filtron: http://n.n.n.147:4004/ http://n.n.n.147/searx
+ [searx-ubu1910] INFO: (eth0) filtron: http://n.n.n.140:4004/ http://n.n.n.140/searx
+ [searx-ubu2004] INFO: (eth0) filtron: http://n.n.n.18:4004/ http://n.n.n.18/searx
+ [searx-fedora31] INFO: (eth0) filtron: http://n.n.n.46:4004/ http://n.n.n.46/searx
+ [searx-archlinux] INFO: (eth0) filtron: http://n.n.n.32:4004/ http://n.n.n.32/searx
+
+To :ref:`install a nginx <installation nginx>` reverse proxy for filtron and
+morty use (or alternatively use :ref:`apache <installation apache>`)::
+
+ sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/filtron.sh nginx install
+ sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/morty.sh nginx install
+
+
+Running commands
+================
+
+**Inside containers, you can use make or run scripts** from the
+:ref:`toolboxing`. By example: to setup a :ref:`buildhosts` and run the
+Makefile target ``test`` in the archlinux_ container::
+
+ sudo -H ./utils/lxc.sh cmd searx-archlinux ./utils/searx.sh install buildhost
+ sudo -H ./utils/lxc.sh cmd searx-archlinux make test
+
+
+Setup searx buildhost
+=====================
+
+You can **install the searx buildhost environment** into one or all containers.
+The installation procedure to set up a :ref:`build host<buildhosts>` takes its
+time. Installation in all containers will take more time (time for another cup
+of coffee).::
+
+ sudo -H ./utils/lxc.sh cmd -- ./utils/searx.sh install buildhost
+
+To build (live) documentation inside a archlinux_ container::
+
+ sudo -H ./utils/lxc.sh cmd searx-archlinux make docs-clean docs-live
+ ...
+ [I 200331 15:00:42 server:296] Serving on http://0.0.0.0:8080
+
+To get IP of the container and the port number *live docs* is listening::
+
+ $ sudo ./utils/lxc.sh show suite | grep docs-live
+ ...
+ [searx-archlinux] INFO: (eth0) docs-live: http://n.n.n.12:8080/
+
+
+.. _lxc.sh help:
+
+Overview
+========
+
+The ``--help`` output of the script is largely self-explanatory:
+
+.. program-output:: ../utils/lxc.sh --help
+
+
+.. _lxc-searx.env:
+
+searx suite
+===========
+
+.. literalinclude:: ../../utils/lxc-searx.env
+ :language: bash
diff --git a/docs/utils/morty.sh.rst b/docs/utils/morty.sh.rst
new file mode 100644
index 0000000..3bdf9bd
--- /dev/null
+++ b/docs/utils/morty.sh.rst
@@ -0,0 +1,80 @@
+
+.. _morty: https://github.com/asciimoo/morty
+.. _morty's README: https://github.com/asciimoo/morty
+.. _Go: https://golang.org/
+
+.. _morty.sh:
+
+==================
+``utils/morty.sh``
+==================
+
+.. sidebar:: further reading
+
+ - :ref:`architecture`
+ - :ref:`installation` (:ref:`nginx <installation nginx>` & :ref:`apache
+ <installation apache>`)
+ - :ref:`searx morty`
+
+To simplify installation and maintenance of a morty_ instance you can use the
+script :origin:`utils/morty.sh`. In most cases you will install morty_ simply by
+running the command:
+
+.. code:: bash
+
+ sudo -H ./utils/morty.sh install all
+
+The script adds a ``${SERVICE_USER}`` (default:``morty``) and installs morty_
+into this user account:
+
+#. Create a separated user account (``morty``).
+#. Download and install Go_ binary in user's $HOME (``~morty``).
+#. Install morty_ with the package management from Go_ (``go get -v -u
+ github.com/asciimoo/morty``)
+#. Setup a systemd service unit :origin:`[ref]
+ <utils/templates/lib/systemd/system/morty.service>`
+ (``/lib/systemd/system/morty.service``).
+
+.. hint::
+
+ To add morty to your searx instance read chapter :ref:`searx morty`.
+
+Create user
+===========
+
+.. kernel-include:: $DOCS_BUILD/includes/morty.rst
+ :start-after: START create user
+ :end-before: END create user
+
+
+Install go
+==========
+
+.. kernel-include:: $DOCS_BUILD/includes/morty.rst
+ :start-after: START install go
+ :end-before: END install go
+
+
+Install morty
+=============
+
+Install morty software and systemd unit:
+
+.. kernel-include:: $DOCS_BUILD/includes/morty.rst
+ :start-after: START install morty
+ :end-before: END install morty
+
+.. kernel-include:: $DOCS_BUILD/includes/morty.rst
+ :start-after: START install systemd unit
+ :end-before: END install systemd unit
+
+.. _morty.sh overview:
+
+Overview
+========
+
+The ``--help`` output of the script is largely self-explanatory
+(:ref:`toolboxing common`):
+
+.. program-output:: ../utils/morty.sh --help
+
diff --git a/docs/utils/searx.sh.rst b/docs/utils/searx.sh.rst
new file mode 100644
index 0000000..dd4442f
--- /dev/null
+++ b/docs/utils/searx.sh.rst
@@ -0,0 +1,39 @@
+
+.. _searx.sh:
+
+==================
+``utils/searx.sh``
+==================
+
+.. sidebar:: further reading
+
+ - :ref:`architecture`
+ - :ref:`installation`
+ - :ref:`installation nginx`
+ - :ref:`installation apache`
+
+To simplify installation and maintenance of a searx instance you can use the
+script :origin:`utils/searx.sh`.
+
+Install
+=======
+
+In most cases you will install searx simply by running the command:
+
+.. code:: bash
+
+ sudo -H ./utils/searx.sh install all
+
+The script adds a ``${SERVICE_USER}`` (default:``searx``) and installs searx
+into this user account. The installation is described in chapter
+:ref:`installation basic`.
+
+.. _intranet reverse proxy:
+
+Overview
+========
+
+The ``--help`` output of the script is largely self-explanatory
+(:ref:`toolboxing common`):
+
+.. program-output:: ../utils/searx.sh --help
diff --git a/manage.sh b/manage.sh
index 3b5d2cf..424d64e 100755
--- a/manage.sh
+++ b/manage.sh
@@ -1,5 +1,7 @@
#!/bin/sh
+export LANG=C
+
BASE_DIR="$(dirname -- "`readlink -f -- "$0"`")"
cd -- "$BASE_DIR"
@@ -10,6 +12,7 @@ PYTHONPATH="$BASE_DIR"
SEARX_DIR="$BASE_DIR/searx"
ACTION="$1"
+. "${BASE_DIR}/utils/brand.env"
#
# Python
@@ -70,52 +73,14 @@ locales() {
pybabel compile -d "$SEARX_DIR/translations"
}
-update_useragents() {
- echo '[!] Updating user agent versions'
- python utils/fetch_firefox_version.py
-}
-
-pep8_check() {
- echo '[!] Running pep8 check'
- # ignored rules:
- # E402 module level import not at top of file
- # W503 line break before binary operator
- pep8 --exclude=searx/static --max-line-length=120 --ignore "E402,W503" "$SEARX_DIR" "$BASE_DIR/tests"
-}
-
-unit_tests() {
- echo '[!] Running unit tests'
- python -m nose2 -s "$BASE_DIR/tests/unit"
-}
-
-py_test_coverage() {
- echo '[!] Running python test coverage'
- PYTHONPATH="`pwd`" python -m nose2 -C --log-capture --with-coverage --coverage "$SEARX_DIR" -s "$BASE_DIR/tests/unit" \
- && coverage report \
- && coverage html
-}
-
-robot_tests() {
- echo '[!] Running robot tests'
- PYTHONPATH="`pwd`" python "$SEARX_DIR/testing.py" robot
-}
-
-tests() {
- set -e
- pep8_check
- unit_tests
- install_geckodriver
- robot_tests
- set +e
-}
-
#
# Web
#
npm_path_setup() {
- true
+ which npm || (printf 'Error: npm is not found\n'; exit 1)
+ export PATH="$(npm bin)":$PATH
}
npm_packages() {
@@ -134,43 +99,6 @@ npm_packages() {
npm install
}
-build_style() {
- npm_path_setup
-
- lessc -x "$BASE_DIR/searx/static/$1" "$BASE_DIR/searx/static/$2"
-}
-
-styles() {
- npm_path_setup
-
- echo '[!] Building legacy style'
- build_style themes/legacy/less/style.less themes/legacy/css/style.css
- build_style themes/legacy/less/style-rtl.less themes/legacy/css/style-rtl.css
- echo '[!] Building courgette style'
- build_style themes/courgette/less/style.less themes/courgette/css/style.css
- build_style themes/courgette/less/style-rtl.less themes/courgette/css/style-rtl.css
- echo '[!] Building pix-art style'
- build_style themes/pix-art/less/style.less themes/pix-art/css/style.css
- echo '[!] Building simple style'
- build_style themes/simple/less/style.less themes/simple/css/searx.min.css
- build_style themes/simple/less/style-rtl.less themes/simple/css/searx-rtl.min.css
- echo '[!] Building logicodev'
- build_style themes/oscar/less/logicodev/oscar.less themes/oscar/css/logicodev.min.css
- echo '[!] Building logicodev-dark'
- build_style themes/oscar/less/logicodev-dark/oscar.less themes/oscar/css/logicodev-dark.min.css
- echo '[!] Building pointhi'
- build_style themes/oscar/less/pointhi/oscar.less themes/oscar/css/pointhi.min.css
-}
-
-grunt_build() {
- npm_path_setup
-
- echo '[!] Grunt build : oscar theme'
- grunt --gruntfile "$SEARX_DIR/static/themes/oscar/gruntfile.js"
- echo '[!] Grunt build : simple theme'
- grunt --gruntfile "$SEARX_DIR/static/themes/simple/gruntfile.js"
-}
-
docker_build() {
# Check if it is a git repository
if [ ! -d .git ]; then
@@ -195,8 +123,9 @@ docker_build() {
SEARX_GIT_VERSION=$(git describe --match "v[0-9]*\.[0-9]*\.[0-9]*" HEAD 2>/dev/null | awk -F'-' '{OFS="-"; $1=substr($1, 2); $3=substr($3, 2); print}')
# add the suffix "-dirty" if the repository has uncommited change
+ # /!\ HACK for searx/searx: ignore searx/brand.py and utils/brand.env
git update-index -q --refresh
- if [ ! -z "$(git diff-index --name-only HEAD --)" ]; then
+ if [ ! -z "$(git diff-index --name-only HEAD -- | grep -v 'searx/brand.py' | grep -v 'utils/brand.env')" ]; then
SEARX_GIT_VERSION="${SEARX_GIT_VERSION}-dirty"
fi
@@ -217,18 +146,18 @@ docker_build() {
fi
# define the docker image name
- # /!\ HACK to get the user name /!\
- GITHUB_USER=$(git remote get-url origin | sed 's/.*github\.com\/\([^\/]*\).*/\1/')
+ GITHUB_USER=$(echo "${GIT_URL}" | sed 's/.*github\.com\/\([^\/]*\).*/\1/')
SEARX_IMAGE_NAME="${GITHUB_USER:-searx}/searx"
# build Docker image
echo "Building image ${SEARX_IMAGE_NAME}:${SEARX_GIT_VERSION}"
sudo docker build \
+ --build-arg GIT_URL="${GIT_URL}" \
--build-arg SEARX_GIT_VERSION="${SEARX_GIT_VERSION}" \
--build-arg VERSION_GITCOMMIT="${VERSION_GITCOMMIT}" \
--build-arg LABEL_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
--build-arg LABEL_VCS_REF=$(git rev-parse HEAD) \
- --build-arg LABEL_VCS_URL=$(git remote get-url origin) \
+ --build-arg LABEL_VCS_URL="${GIT_URL}" \
--build-arg TIMESTAMP_SETTINGS=$(git log -1 --format="%cd" --date=unix -- searx/settings.yml) \
--build-arg TIMESTAMP_UWSGI=$(git log -1 --format="%cd" --date=unix -- dockerfiles/uwsgi.ini) \
-t ${SEARX_IMAGE_NAME}:latest -t ${SEARX_IMAGE_NAME}:${SEARX_GIT_VERSION} .
@@ -257,22 +186,17 @@ Commands
update_dev_packages - Check & update development and production dependency changes
install_geckodriver - Download & install geckodriver if not already installed (required for robot_tests)
npm_packages - Download & install npm dependencies
- update_useragents - Update useragents.json with the most recent versions of Firefox
Build
-----
locales - Compile locales
- styles - Build less files
- grunt_build - Build files for themes
- docker_build - Build Docker image
- Tests
- -----
- unit_tests - Run unit tests
- pep8_check - Pep8 validation
- robot_tests - Run selenium tests
- tests - Run all python tests (pep8, unit, robot_tests)
- py_test_coverage - Unit test coverage
+Environment:
+ GIT_URL: ${GIT_URL}
+ ISSUE_URL: ${ISSUE_URL}
+ SEARX_URL: ${SEARX_URL}
+ DOCS_URL: ${DOCS_URL}
+ PUBLIC_INSTANCES: ${PUBLIC_INSTANCES}
"
}
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 3e8f617..5a1ca15 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -5,6 +5,7 @@ mock==2.0.0
nose2[coverage_plugin]
cov-core==1.15.0
pep8==1.7.0
+pylint
plone.testing==5.0.0
splinter==0.11.0
transifex-client==0.12.2
@@ -14,3 +15,5 @@ selenium==3.141.0
linuxdoc @ git+http://github.com/return42/linuxdoc.git
sphinx-jinja
sphinx-tabs
+sphinxcontrib-programoutput
+twine
diff --git a/requirements.txt b/requirements.txt
index 6e4df37..5d508d7 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,12 +1,12 @@
-certifi==2019.3.9
+certifi==2020.4.5.1
babel==2.7.0
-flask-babel==0.12.2
-flask==1.0.2
-idna==2.8
-jinja2==2.10.1
-lxml==4.3.3
+flask-babel==1.0.0
+flask==1.1.2
+idna==2.9
+jinja2==2.11.1
+lxml==4.5.0
pygments==2.1.3
-pyopenssl==19.0.0
+pyopenssl==19.1.0
python-dateutil==2.8.0
-pyyaml==5.1
-requests[socks]==2.22.0
+pyyaml==5.3.1
+requests[socks]==2.23.0
diff --git a/searx/__init__.py b/searx/__init__.py
index d32fe00..2f3ebfc 100644
--- a/searx/__init__.py
+++ b/searx/__init__.py
@@ -38,6 +38,7 @@ def check_settings_yml(file_name):
else:
return None
+
# find location of settings.yml
if 'SEARX_SETTINGS_PATH' in environ:
# if possible set path to settings using the
diff --git a/searx/autocomplete.py b/searx/autocomplete.py
index ff89585..00a9f95 100644
--- a/searx/autocomplete.py
+++ b/searx/autocomplete.py
@@ -165,6 +165,14 @@ def startpage(query, lang):
return []
+def swisscows(query, lang):
+ # swisscows autocompleter
+ url = 'https://swisscows.ch/api/suggest?{query}&itemsCount=5'
+
+ resp = loads(get(url.format(query=urlencode({'query': query}))).text)
+ return resp
+
+
def qwant(query, lang):
# qwant autocompleter (additional parameter : lang=en_en&count=xxx )
url = 'https://api.qwant.com/api/suggest?{query}'
@@ -196,6 +204,7 @@ backends = {'dbpedia': dbpedia,
'duckduckgo': duckduckgo,
'google': google,
'startpage': startpage,
+ 'swisscows': swisscows,
'qwant': qwant,
'wikipedia': wikipedia
}
diff --git a/searx/brand.py b/searx/brand.py
new file mode 100644
index 0000000..91d2ab3
--- /dev/null
+++ b/searx/brand.py
@@ -0,0 +1,6 @@
+GIT_URL = 'https://github.com/asciimoo/searx'
+GIT_BRANCH = 'master'
+ISSUE_URL = 'https://github.com/asciimoo/searx/issues'
+SEARX_URL = 'https://searx.me'
+DOCS_URL = 'https://asciimoo.github.io/searx'
+PUBLIC_INSTANCES = 'https://searx.space'
diff --git a/searx/data/engines_languages.json b/searx/data/engines_languages.json
index 2c9e64e..83701e6 100644
--- a/searx/data/engines_languages.json
+++ b/searx/data/engines_languages.json
@@ -1,27489 +1,28334 @@
{
- "qwant news": [
- "bg-BG",
- "br-FR",
- "ca-AD",
- "ca-ES",
- "ca-FR",
- "co-FR",
- "cs-CZ",
- "cy-GB",
- "da-DK",
- "de-AT",
- "de-CH",
- "de-DE",
- "el-GR",
- "en-AU",
- "en-CA",
- "en-GB",
- "en-IE",
- "en-IN",
- "en-MY",
- "en-NZ",
- "en-PH",
- "en-SG",
- "en-US",
- "es-AD",
- "es-AR",
- "es-CL",
- "es-ES",
- "es-MX",
- "et-EE",
- "eu-ES",
- "eu-FR",
- "fi-FI",
- "fr-AD",
- "fr-BE",
- "fr-CA",
- "fr-CH",
- "fr-FR",
- "gd-GB",
- "he-IL",
- "hu-HU",
- "it-CH",
- "it-IT",
- "ja-JP",
- "ko-KR",
- "ms-MY",
- "nl-BE",
- "nl-NL",
- "no-NO",
- "pl-PL",
- "pt-AD",
- "pt-BR",
- "pt-PT",
- "ro-RO",
- "ru-RU",
- "sv-SE",
- "th-TH",
- "tr-TR"
- ],
- "qwant social": [
- "bg-BG",
- "br-FR",
- "ca-AD",
- "ca-ES",
- "ca-FR",
- "co-FR",
- "cs-CZ",
- "cy-GB",
- "da-DK",
- "de-AT",
- "de-CH",
- "de-DE",
- "el-GR",
- "en-AU",
- "en-CA",
- "en-GB",
- "en-IE",
- "en-IN",
- "en-MY",
- "en-NZ",
- "en-PH",
- "en-SG",
- "en-US",
- "es-AD",
- "es-AR",
- "es-CL",
- "es-ES",
- "es-MX",
- "et-EE",
- "eu-ES",
- "eu-FR",
- "fi-FI",
- "fr-AD",
- "fr-BE",
- "fr-CA",
- "fr-CH",
- "fr-FR",
- "gd-GB",
- "he-IL",
- "hu-HU",
- "it-CH",
- "it-IT",
- "ja-JP",
- "ko-KR",
- "ms-MY",
- "nl-BE",
- "nl-NL",
- "no-NO",
- "pl-PL",
- "pt-AD",
- "pt-BR",
- "pt-PT",
- "ro-RO",
- "ru-RU",
- "sv-SE",
- "th-TH",
- "tr-TR"
- ],
- "duckduckgo": [
- "ar-XA",
- "bg-BG",
- "ca-CT",
- "ca-ES",
- "cs-CZ",
- "da-DK",
- "de-AT",
- "de-CH",
- "de-DE",
- "el-GR",
- "en-AU",
- "en-CA",
- "en-ID",
- "en-IE",
- "en-IN",
- "en-MY",
- "en-NZ",
- "en-PH",
- "en-SG",
- "en-UK",
- "en-US",
- "en-ZA",
- "es-AR",
- "es-CL",
- "es-CO",
- "es-ES",
- "es-MX",
- "es-PE",
- "es-US",
- "et-EE",
- "fi-FI",
- "fr-BE",
- "fr-CA",
- "fr-CH",
- "fr-FR",
- "he-IL",
- "hr-HR",
- "hu-HU",
- "id-ID",
- "it-CH",
- "it-IT",
- "jp-JP",
- "kr-KR",
- "lt-LT",
- "lv-LV",
- "ms-MY",
- "nl-BE",
- "nl-NL",
- "no-NO",
- "pl-PL",
- "pt-BR",
- "pt-PT",
- "ro-RO",
- "ru-RU",
- "sk-SK",
- "sl-SL",
- "sv-SE",
- "th-TH",
- "tl-PH",
- "tr-TR",
- "tzh-HK",
- "tzh-TW",
- "vi-VN",
- "wt-WT",
- "zh-CN"
- ],
- "ddg definitions": [
- "ar-XA",
- "bg-BG",
- "ca-CT",
- "ca-ES",
- "cs-CZ",
- "da-DK",
- "de-AT",
- "de-CH",
- "de-DE",
- "el-GR",
- "en-AU",
- "en-CA",
- "en-ID",
- "en-IE",
- "en-IN",
- "en-MY",
- "en-NZ",
- "en-PH",
- "en-SG",
- "en-UK",
- "en-US",
- "en-ZA",
- "es-AR",
- "es-CL",
- "es-CO",
- "es-ES",
- "es-MX",
- "es-PE",
- "es-US",
- "et-EE",
- "fi-FI",
- "fr-BE",
- "fr-CA",
- "fr-CH",
- "fr-FR",
- "he-IL",
- "hr-HR",
- "hu-HU",
- "id-ID",
- "it-CH",
- "it-IT",
- "jp-JP",
- "kr-KR",
- "lt-LT",
- "lv-LV",
- "ms-MY",
- "nl-BE",
- "nl-NL",
- "no-NO",
- "pl-PL",
- "pt-BR",
- "pt-PT",
- "ro-RO",
- "ru-RU",
- "sk-SK",
- "sl-SL",
- "sv-SE",
- "th-TH",
- "tl-PH",
- "tr-TR",
- "tzh-HK",
- "tzh-TW",
- "vi-VN",
- "wt-WT",
- "zh-CN"
- ],
- "bing": [
- "ar",
- "bg",
- "ca",
- "cs",
- "da",
- "de",
- "el",
- "en",
- "es",
- "et",
- "fa",
- "fi",
- "fr",
- "he",
- "hr",
- "hu",
- "id",
- "is",
- "it",
- "ja",
- "ko",
- "lt",
- "lv",
- "ms",
- "nl",
- "no",
- "pl",
- "pt-BR",
- "pt-PT",
- "ro",
- "ru",
- "sk",
- "sl",
- "sq",
- "sr",
- "sv",
- "th",
- "tr",
- "uk",
- "vi",
- "zh-CHS",
- "zh-CHT"
- ],
- "bing videos": [
- "ar-AE",
- "ar-EG",
- "ar-SA",
- "da-DK",
- "de-AT",
- "de-CH",
- "de-DE",
- "en-AU",
- "en-CA",
- "en-GB",
- "en-ID",
- "en-IE",
- "en-IN",
- "en-MY",
- "en-NZ",
- "en-PH",
- "en-SG",
- "en-US",
- "en-ZA",
- "es-AR",
- "es-CL",
- "es-ES",
- "es-MX",
- "es-US",
- "fi-FI",
- "fr-BE",
- "fr-CA",
- "fr-CH",
- "fr-FR",
- "it-IT",
- "ja-JP",
- "ko-KR",
- "nl-BE",
- "nl-NL",
- "no-NO",
- "pl-PL",
- "pt-BR",
- "pt-PT",
- "ru-RU",
- "sv-SE",
- "tr-TR",
- "zh-CN",
- "zh-HK",
- "zh-TW"
- ],
- "qwant": [
- "bg-BG",
- "br-FR",
- "ca-AD",
- "ca-ES",
- "ca-FR",
- "co-FR",
- "cs-CZ",
- "cy-GB",
- "da-DK",
- "de-AT",
- "de-CH",
- "de-DE",
- "el-GR",
- "en-AU",
- "en-CA",
- "en-GB",
- "en-IE",
- "en-IN",
- "en-MY",
- "en-NZ",
- "en-PH",
- "en-SG",
- "en-US",
- "es-AD",
- "es-AR",
- "es-CL",
- "es-ES",
- "es-MX",
- "et-EE",
- "eu-ES",
- "eu-FR",
- "fi-FI",
- "fr-AD",
- "fr-BE",
- "fr-CA",
- "fr-CH",
- "fr-FR",
- "gd-GB",
- "he-IL",
- "hu-HU",
- "it-CH",
- "it-IT",
- "ja-JP",
- "ko-KR",
- "ms-MY",
- "nl-BE",
- "nl-NL",
- "no-NO",
- "pl-PL",
- "pt-AD",
- "pt-BR",
- "pt-PT",
- "ro-RO",
- "ru-RU",
- "sv-SE",
- "th-TH",
- "tr-TR"
- ],
- "gigablast": [],
- "google news": {
- "nl": {
- "name": "Nederlands"
- },
- "eo": {
- "name": "Esperanto"
- },
- "ko": {
- "name": "한국어"
- },
- "id": {
- "name": "Indonesia"
- },
- "ca": {
- "name": "Català"
- },
- "ar": {
- "name": "العربية"
- },
- "sl": {
- "name": "Slovenščina"
- },
- "sr": {
- "name": "Српски"
- },
- "sv": {
- "name": "Svenska"
- },
- "be": {
- "name": "Беларуская"
- },
- "et": {
- "name": "Eesti"
- },
- "sw": {
- "name": "Kiswahili"
- },
- "is": {
- "name": "Íslenska"
- },
- "it": {
- "name": "Italiano"
- },
- "hi": {
- "name": "हिन्दी"
- },
- "pl": {
- "name": "Polski"
- },
- "el": {
- "name": "Ελληνικά"
- },
- "hu": {
- "name": "Magyar"
- },
- "fr": {
- "name": "Français"
- },
- "th": {
- "name": "ไทย"
- },
- "tl": {
- "name": "Filipino"
- },
- "de": {
- "name": "Deutsch"
- },
- "ru": {
- "name": "Русский"
- },
- "sk": {
- "name": "Slovenčina"
- },
- "lt": {
- "name": "Lietuvių"
- },
- "vi": {
- "name": "Tiếng Việt"
- },
- "uk": {
- "name": "Українська"
- },
- "pt": {
- "name": "Português"
- },
- "zh-TW": {
- "name": "中文 (繁體)"
- },
- "cs": {
- "name": "Čeština"
- },
- "fa": {
- "name": "فارسی"
- },
- "af": {
- "name": "Afrikaans"
- },
- "hy": {
- "name": "Հայերեն"
- },
- "bg": {
- "name": "Български"
- },
- "hr": {
- "name": "Hrvatski"
- },
- "en": {
- "name": "English"
- },
- "tr": {
- "name": "Türkçe"
- },
- "lv": {
- "name": "Latviešu"
- },
- "ro": {
- "name": "Română"
- },
- "zh-CN": {
- "name": "中文 (简体)"
- },
- "ja": {
- "name": "日本語"
- },
- "iw": {
- "name": "עברית"
- },
- "es": {
- "name": "Español"
- },
- "fi": {
- "name": "Suomi"
- },
- "no": {
- "name": "Norsk"
- },
- "da": {
- "name": "Dansk"
- }
- },
- "duckduckgo images": [
- "ar-XA",
- "bg-BG",
- "ca-CT",
- "ca-ES",
- "cs-CZ",
- "da-DK",
- "de-AT",
- "de-CH",
- "de-DE",
- "el-GR",
- "en-AU",
- "en-CA",
- "en-ID",
- "en-IE",
- "en-IN",
- "en-MY",
- "en-NZ",
- "en-PH",
- "en-SG",
- "en-UK",
- "en-US",
- "en-ZA",
- "es-AR",
- "es-CL",
- "es-CO",
- "es-ES",
- "es-MX",
- "es-PE",
- "es-US",
- "et-EE",
- "fi-FI",
- "fr-BE",
- "fr-CA",
- "fr-CH",
- "fr-FR",
- "he-IL",
- "hr-HR",
- "hu-HU",
- "id-ID",
- "it-CH",
- "it-IT",
- "jp-JP",
- "kr-KR",
- "lt-LT",
- "lv-LV",
- "ms-MY",
- "nl-BE",
- "nl-NL",
- "no-NO",
- "pl-PL",
- "pt-BR",
- "pt-PT",
- "ro-RO",
- "ru-RU",
- "sk-SK",
- "sl-SL",
- "sv-SE",
- "th-TH",
- "tl-PH",
- "tr-TR",
- "tzh-HK",
- "tzh-TW",
- "vi-VN",
- "wt-WT",
- "zh-CN"
- ],
- "bing images": [
- "ar-AE",
- "ar-EG",
- "ar-SA",
- "da-DK",
- "de-AT",
- "de-CH",
- "de-DE",
- "en-AU",
- "en-CA",
- "en-GB",
- "en-ID",
- "en-IE",
- "en-IN",
- "en-MY",
- "en-NZ",
- "en-PH",
- "en-SG",
- "en-US",
- "en-ZA",
- "es-AR",
- "es-CL",
- "es-ES",
- "es-MX",
- "es-US",
- "fi-FI",
- "fr-BE",
- "fr-CA",
- "fr-CH",
- "fr-FR",
- "it-IT",
- "ja-JP",
- "ko-KR",
- "nl-BE",
- "nl-NL",
- "no-NO",
- "pl-PL",
- "pt-BR",
- "pt-PT",
- "ru-RU",
- "sv-SE",
- "tr-TR",
- "zh-CN",
- "zh-HK",
- "zh-TW"
- ],
- "bing news": [
- "ar",
- "bg",
- "ca",
- "cs",
- "da",
- "de",
- "el",
- "en",
- "es",
- "et",
- "fa",
- "fi",
- "fr",
- "he",
- "hr",
- "hu",
- "id",
- "is",
- "it",
- "ja",
- "ko",
- "lt",
- "lv",
- "ms",
- "nl",
- "no",
- "pl",
- "pt-BR",
- "pt-PT",
- "ro",
- "ru",
- "sk",
- "sl",
- "sq",
- "sr",
- "sv",
- "th",
- "tr",
- "uk",
- "vi",
- "zh-CHS",
- "zh-CHT"
- ],
- "dailymotion": {
- "fag": {
- "english_name": "Finongan"
- },
- "mpd": {
- "english_name": "Machinere"
- },
- "bzx": {
- "english_name": "Bozo, Kɛlɛngaxo"
- },
- "kpc": {
- "english_name": "Curripaco"
- },
- "sll": {
- "english_name": "Salt-Yui"
- },
- "bop": {
- "english_name": "Bonkiman"
- },
- "mlz": {
- "english_name": "Malaynon"
- },
- "gnw": {
- "english_name": "Guaraní, Western Bolivian"
- },
- "sbc": {
- "english_name": "Kele (Papua New Guinea)"
- },
- "pbc": {
- "english_name": "Patamona"
- },
- "xkw": {
- "english_name": "Kembra"
- },
- "bec": {
- "english_name": "Iceve-Maci"
- },
- "tlg": {
- "english_name": "Tofanma"
- },
- "ges": {
- "english_name": "Geser-Gorom"
- },
- "mxh": {
- "english_name": "Mvuba"
- },
- "wos": {
- "english_name": "Hanga Hundi"
- },
- "mrf": {
- "english_name": "Elseng"
- },
- "tdr": {
- "english_name": "Todrah"
- },
- "dos": {
- "english_name": "Dogosé"
- },
- "lah": {
- "english_name": "Lahnda"
- },
- "qxa": {
- "english_name": "Quechua, Chiquián Ancash"
- },
- "kkv": {
- "english_name": "Kangean"
- },
- "ajt": {
- "english_name": "Arabic, Judeo-Tunisian"
- },
- "dof": {
- "english_name": "Domu"
- },
- "cll": {
- "english_name": "Chala"
- },
- "dta": {
- "english_name": "Daur"
- },
- "gji": {
- "english_name": "Geji"
- },
- "nmx": {
- "english_name": "Nama (Papua New Guinea)"
- },
- "tcl": {
- "english_name": "Taman (Myanmar)"
- },
- "kcc": {
- "english_name": "Lubila"
- },
- "tsl": {
- "english_name": "Ts'ün-Lao"
- },
- "abl": {
- "english_name": "Lampung Nyo"
- },
- "ply": {
- "english_name": "Bolyu"
- },
- "xor": {
- "english_name": "Korubo"
- },
- "tpc": {
- "english_name": "Me'phaa, Azoyú"
- },
- "ard": {
- "english_name": "Arabana"
- },
- "jen": {
- "english_name": "Dza"
- },
- "ofs": {
- "english_name": "Frisian, Old"
- },
- "bzz": {
- "english_name": "Evant"
- },
- "ts": {
- "english_name": "Tsonga"
- },
- "vin": {
- "english_name": "Vinza"
- },
- "blm": {
- "english_name": "Beli (Sudan)"
- },
- "mkc": {
- "english_name": "Siliput"
- },
- "utu": {
- "english_name": "Utu"
- },
- "xnt": {
- "english_name": "Narragansett"
- },
- "rue": {
- "english_name": "Rusyn"
- },
- "kaw": {
- "english_name": "Kawi"
- },
- "peo": {
- "english_name": "Persian, Old (ca. 600-400 B.C.)"
- },
- "gjn": {
- "english_name": "Gonja"
- },
- "ecy": {
- "english_name": "Eteocypriot"
- },
- "jdt": {
- "english_name": "Judeo-Tat"
- },
- "esl": {
- "english_name": "Egypt Sign Language"
- },
- "bti": {
- "english_name": "Burate"
- },
- "nev": {
- "english_name": "Nyaheun"
- },
- "omb": {
- "english_name": "Ambae, East"
- },
- "ks": {
- "english_name": "Kashmiri"
- },
- "gbg": {
- "english_name": "Gbanziri"
- },
- "bhp": {
- "english_name": "Bima"
- },
- "kpz": {
- "english_name": "Kupsabiny"
- },
- "zyg": {
- "english_name": "Zhuang, Yang"
- },
- "dsq": {
- "english_name": "Tadaksahak"
- },
- "pck": {
- "english_name": "Chin, Paite"
- },
- "wim": {
- "english_name": "Wik-Mungkan"
- },
- "tbc": {
- "english_name": "Takia"
- },
- "xcr": {
- "english_name": "Carian"
- },
- "ar": {
- "english_name": "Arabic",
- "name": "العربية"
- },
- "vai": {
- "english_name": "Vai"
- },
- "gll": {
- "english_name": "Garlali"
- },
- "bmf": {
- "english_name": "Bom"
- },
- "abt": {
- "english_name": "Ambulas"
- },
- "mok": {
- "english_name": "Morori"
- },
- "buc": {
- "english_name": "Bushi"
- },
- "lbn": {
- "english_name": "Lamet"
- },
- "aoj": {
- "english_name": "Mufian"
- },
- "mpl": {
- "english_name": "Watut, Middle"
- },
- "unz": {
- "english_name": "Kaili, Unde"
- },
- "csl": {
- "english_name": "Chinese Sign Language"
- },
- "mby": {
- "english_name": "Memoni"
- },
- "maf": {
- "english_name": "Mafa"
- },
- "shn": {
- "english_name": "Shan"
- },
- "teo": {
- "english_name": "Teso"
- },
- "xts": {
- "english_name": "Mixtec, Sindihui"
- },
- "sms": {
- "english_name": "Sami, Skolt"
- },
- "kln": {
- "english_name": "Kalenjin"
- },
- "dij": {
- "english_name": "Dai"
- },
- "msu": {
- "english_name": "Musom"
- },
- "vi": {
- "english_name": "Vietnamese",
- "name": "Tiếng Việt"
- },
- "kyk": {
- "english_name": "Kamayo"
- },
- "ngr": {
- "english_name": "Engdewu"
- },
- "klm": {
- "english_name": "Migum"
- },
- "igm": {
- "english_name": "Kanggape"
- },
- "bto": {
- "english_name": "Bikol, Rinconada"
- },
- "krm": {
- "english_name": "Krim"
- },
- "tii": {
- "english_name": "Tiene"
- },
- "dob": {
- "english_name": "Dobu"
- },
- "ttj": {
- "english_name": "Tooro"
- },
- "sjk": {
- "english_name": "Sami, Kemi"
- },
- "nrz": {
- "english_name": "Lala"
- },
- "zch": {
- "english_name": "Zhuang, Central Hongshuihe"
- },
- "aws": {
- "english_name": "Awyu, South"
- },
- "alo": {
- "english_name": "Larike-Wakasihu"
- },
- "plp": {
- "english_name": "Palpa"
- },
- "nwa": {
- "english_name": "Nawathinehena"
- },
- "aon": {
- "english_name": "Arapesh, Bumbita"
- },
- "tag": {
- "english_name": "Tagoi"
- },
- "dei": {
- "english_name": "Demisa"
- },
- "smk": {
- "english_name": "Bolinao"
- },
- "ndf": {
- "english_name": "Nadruvian"
- },
- "sly": {
- "english_name": "Selayar"
- },
- "twu": {
- "english_name": "Termanu"
- },
- "ags": {
- "english_name": "Esimbi"
- },
- "zyj": {
- "english_name": "Zhuang, Youjiang"
- },
- "xap": {
- "english_name": "Apalachee"
- },
- "imn": {
- "english_name": "Imonda"
- },
- "goj": {
- "english_name": "Gowlan"
- },
- "ikz": {
- "english_name": "Ikizu"
- },
- "miy": {
- "english_name": "Mixtec, Ayutla"
- },
- "iyo": {
- "english_name": "Mesaka"
- },
- "kdl": {
- "english_name": "Tsikimba"
- },
- "ptt": {
- "english_name": "Enrekang"
- },
- "ymq": {
- "english_name": "Muji, Qila"
- },
- "vaa": {
- "english_name": "Vaagri Booli"
- },
- "xcy": {
- "english_name": "Cayuse"
- },
- "pgg": {
- "english_name": "Pangwali"
- },
- "aly": {
- "english_name": "Alyawarr"
- },
- "bdt": {
- "english_name": "Bokoto"
- },
- "zkk": {
- "english_name": "Karankawa"
- },
- "mkj": {
- "english_name": "Mokilese"
- },
- "way": {
- "english_name": "Wayana"
- },
- "kxs": {
- "english_name": "Kangjia"
- },
- "sdk": {
- "english_name": "Sos Kundi"
- },
- "mne": {
- "english_name": "Naba"
- },
- "iry": {
- "english_name": "Iraya"
- },
- "ngp": {
- "english_name": "Ngulu"
- },
- "eke": {
- "english_name": "Ekit"
- },
- "mkr": {
- "english_name": "Malas"
- },
- "sxo": {
- "english_name": "Sorothaptic"
- },
- "auy": {
- "english_name": "Awiyaana"
- },
- "llc": {
- "english_name": "Lele (Guinea)"
- },
- "bcs": {
- "english_name": "Kohumono"
- },
- "aja": {
- "english_name": "Aja (Sudan)"
- },
- "kab": {
- "english_name": "Kabyle"
- },
- "mdv": {
- "english_name": "Mixtec, Santa Lucía Monteverde"
- },
- "vkj": {
- "english_name": "Kujarge"
- },
- "kad": {
- "english_name": "Adara"
- },
- "ymx": {
- "english_name": "Muji, Northern"
- },
- "aup": {
- "english_name": "Makayam"
- },
- "swo": {
- "english_name": "Shanenawa"
- },
- "plq": {
- "english_name": "Palaic"
- },
- "mph": {
- "english_name": "Maung"
- },
- "ksv": {
- "english_name": "Kusu"
- },
- "zkn": {
- "english_name": "Kanan"
- },
- "kcy": {
- "english_name": "Korandje"
- },
- "mzu": {
- "english_name": "Inapang"
- },
- "svm": {
- "english_name": "Slavomolisano"
- },
- "aos": {
- "english_name": "Taikat"
- },
- "cip": {
- "english_name": "Chiapanec"
- },
- "nsp": {
- "english_name": "Nepalese Sign Language"
- },
- "akd": {
- "english_name": "Ukpet-Ehom"
- },
- "wrd": {
- "english_name": "Warduji"
- },
- "zng": {
- "english_name": "Mang"
- },
- "obo": {
- "english_name": "Manobo, Obo"
- },
- "dwa": {
- "english_name": "Diri"
- },
- "vrt": {
- "english_name": "Burmbar"
- },
- "xem": {
- "english_name": "Kembayan"
- },
- "cpc": {
- "english_name": "Ajyíninka Apurucayali"
- },
- "sib": {
- "english_name": "Sebop"
- },
- "mff": {
- "english_name": "Naki"
- },
- "yes": {
- "english_name": "Nyankpa"
- },
- "txc": {
- "english_name": "Tsetsaut"
- },
- "cbl": {
- "english_name": "Chin, Bualkhaw"
- },
- "fi": {
- "english_name": "Finnish",
- "name": "suomi"
- },
- "lgl": {
- "english_name": "Wala"
- },
- "etr": {
- "english_name": "Edolo"
- },
- "tyz": {
- "english_name": "Tày"
- },
- "aqd": {
- "english_name": "Dogon, Ampari"
- },
- "tja": {
- "english_name": "Tajuasohn"
- },
- "nnb": {
- "english_name": "Nande"
- },
- "ayo": {
- "english_name": "Ayoreo"
- },
- "ctp": {
- "english_name": "Chatino, Western Highland"
- },
- "knm": {
- "english_name": "Kanamarí"
- },
- "dgr": {
- "english_name": "Dogrib"
- },
- "bs": {
- "english_name": "Bosnian",
- "name": "Bosnian"
- },
- "byv": {
- "english_name": "Medumba"
- },
- "kts": {
- "english_name": "Muyu, South"
- },
- "bpu": {
- "english_name": "Bongu"
- },
- "nen": {
- "english_name": "Nengone"
- },
- "sl": {
- "english_name": "Slovenian",
- "name": "slovenščina"
- },
- "tmd": {
- "english_name": "Haruai"
- },
- "yrb": {
- "english_name": "Yareba"
- },
- "rie": {
- "english_name": "Rien"
- },
- "qu": {
- "english_name": "Quechua"
- },
- "dgh": {
- "english_name": "Dghwede"
- },
- "vmw": {
- "english_name": "Makhuwa"
- },
- "grx": {
- "english_name": "Guriaso"
- },
- "sar": {
- "english_name": "Saraveca"
- },
- "ztm": {
- "english_name": "Zapotec, San Agustín Mixtepec"
- },
- "boa": {
- "english_name": "Bora"
- },
- "xga": {
- "english_name": "Galatian"
- },
- "aas": {
- "english_name": "Aasáx"
- },
- "kif": {
- "english_name": "Kham, Eastern Parbate"
- },
- "bsw": {
- "english_name": "Baiso"
- },
- "drd": {
- "english_name": "Darmiya"
- },
- "twe": {
- "english_name": "Tewa (Indonesia)"
- },
- "abx": {
- "english_name": "Inabaknon"
- },
- "ntw": {
- "english_name": "Nottoway"
- },
- "lse": {
- "english_name": "Lusengo"
- },
- "xby": {
- "english_name": "Batyala"
- },
- "cjm": {
- "english_name": "Cham, Eastern"
- },
- "dgi": {
- "english_name": "Dagara, Northern"
- },
- "xps": {
- "english_name": "Pisidian"
- },
- "hlb": {
- "english_name": "Halbi"
- },
- "dnt": {
- "english_name": "Dani, Mid Grand Valley"
- },
- "bht": {
- "english_name": "Bhattiyali"
- },
- "mbz": {
- "english_name": "Mixtec, Amoltepec"
- },
- "gvp": {
- "english_name": "Gavião, Pará"
- },
- "cmr": {
- "english_name": "Chin, Mro-Khimi"
- },
- "qvl": {
- "english_name": "Quechua, Cajatambo North Lima"
- },
- "moy": {
- "english_name": "Shekkacho"
- },
- "smy": {
- "english_name": "Semnani"
- },
- "aqn": {
- "english_name": "Alta, Northern"
- },
- "syk": {
- "english_name": "Sukur"
- },
- "gdl": {
- "english_name": "Dirasha"
- },
- "doh": {
- "english_name": "Dong"
- },
- "jda": {
- "english_name": "Jad"
- },
- "mad": {
- "english_name": "Madurese"
- },
- "var": {
- "english_name": "Huarijio"
- },
- "trj": {
- "english_name": "Toram"
- },
- "tvy": {
- "english_name": "Pidgin, Timor"
- },
- "luy": {
- "english_name": "Luyia"
- },
- "ldi": {
- "english_name": "Laari"
- },
- "nlu": {
- "english_name": "Nchumbulu"
- },
- "klr": {
- "english_name": "Khaling"
- },
- "mfk": {
- "english_name": "Mofu, North"
- },
- "ksr": {
- "english_name": "Borong"
- },
- "akt": {
- "english_name": "Akolet"
- },
- "bkt": {
- "english_name": "Boloki"
- },
- "ruf": {
- "english_name": "Luguru"
- },
- "dka": {
- "english_name": "Dakpakha"
- },
- "bdw": {
- "english_name": "Baham"
- },
- "myl": {
- "english_name": "Moma"
- },
- "bda": {
- "english_name": "Bayot"
- },
- "bpr": {
- "english_name": "Blaan, Koronadal"
- },
- "ugn": {
- "english_name": "Ugandan Sign Language"
- },
- "mel": {
- "english_name": "Melanau, Central"
- },
- "kwo": {
- "english_name": "Kwomtari"
- },
- "bmd": {
- "english_name": "Manduri, Baga"
- },
- "rkw": {
- "english_name": "Arakwal"
- },
- "png": {
- "english_name": "Pongu"
- },
- "bzm": {
- "english_name": "Bolondo"
- },
- "sbw": {
- "english_name": "Simba"
- },
- "aqp": {
- "english_name": "Atakapa"
- },
- "sah": {
- "english_name": "Yakut"
- },
- "cps": {
- "english_name": "Capiznon"
- },
- "dze": {
- "english_name": "Djiwarli"
- },
- "srs": {
- "english_name": "Sarsi"
- },
- "anz": {
- "english_name": "Anem"
- },
- "skw": {
- "english_name": "Creole Dutch, Skepi"
- },
- "nut": {
- "english_name": "Nung (Viet Nam)"
- },
- "ngc": {
- "english_name": "Ngombe (Democratic Republic of Congo)"
- },
- "xrb": {
- "english_name": "Karaboro, Eastern"
- },
- "btm": {
- "english_name": "Batak Mandailing"
- },
- "poo": {
- "english_name": "Pomo, Central"
- },
- "tlb": {
- "english_name": "Tobelo"
- },
- "nil": {
- "english_name": "Nila"
- },
- "nns": {
- "english_name": "Ningye"
- },
- "skg": {
- "english_name": "Malagasy, Sakalava"
- },
- "sww": {
- "english_name": "Sowa"
- },
- "kyg": {
- "english_name": "Keyagana"
- },
- "hah": {
- "english_name": "Hahon"
- },
- "hii": {
- "english_name": "Hinduri"
- },
- "fui": {
- "english_name": "Fulfulde, Bagirmi"
- },
- "ahh": {
- "english_name": "Aghu"
- },
- "tec": {
- "english_name": "Terik"
- },
- "whu": {
- "english_name": "Kayan, Wahau"
- },
- "txt": {
- "english_name": "Citak"
- },
- "qug": {
- "english_name": "Quichua, Chimborazo Highland"
- },
- "bhg": {
- "english_name": "Binandere"
- },
- "xsn": {
- "english_name": "Sanga (Nigeria)"
- },
- "tbu": {
- "english_name": "Tubar"
- },
- "ysl": {
- "english_name": "Yugoslavian Sign Language"
- },
- "kfd": {
- "english_name": "Koraga, Korra"
- },
- "mt": {
- "english_name": "Maltese",
- "name": "Malti"
- },
- "saq": {
- "english_name": "Samburu"
- },
- "stp": {
- "english_name": "Tepehuan, Southeastern"
- },
- "sbq": {
- "english_name": "Sileibi"
- },
- "tnb": {
- "english_name": "Tunebo, Western"
- },
- "aec": {
- "english_name": "Arabic, Saidi"
- },
- "tpg": {
- "english_name": "Kula"
- },
- "kjo": {
- "english_name": "Kinnauri, Harijan"
- },
- "leq": {
- "english_name": "Lembena"
- },
- "ktd": {
- "english_name": "Kokata"
- },
- "tad": {
- "english_name": "Tause"
- },
- "mtq": {
- "english_name": "Muong"
- },
- "tig": {
- "english_name": "Tigre",
- "name": "ትግረ"
- },
- "ht": {
- "english_name": "Haitian"
- },
- "nkk": {
- "english_name": "Nokuku"
- },
- "blj": {
- "english_name": "Bolongan"
- },
- "tdo": {
- "english_name": "Teme"
- },
- "xmc": {
- "english_name": "Makhuwa-Marrevone"
- },
- "mbf": {
- "english_name": "Malay, Baba"
- },
- "aty": {
- "english_name": "Aneityum"
- },
- "grb": {
- "english_name": "Grebo"
- },
- "cwe": {
- "english_name": "Kwere"
- },
- "cfa": {
- "english_name": "Dijim-Bwilim"
- },
- "gig": {
- "english_name": "Goaria"
- },
- "mxn": {
- "english_name": "Moi (Indonesia)"
- },
- "zac": {
- "english_name": "Zapotec, Ocotlán"
- },
- "bny": {
- "english_name": "Bintulu"
- },
- "jeu": {
- "english_name": "Jonkor Bourmataguil"
- },
- "gnk": {
- "english_name": "//Gana"
- },
- "pfa": {
- "english_name": "Pááfang"
- },
- "bcq": {
- "english_name": "Bench"
- },
- "dbv": {
- "english_name": "Dungu"
- },
- "zhn": {
- "english_name": "Zhuang, Nong"
- },
- "hba": {
- "english_name": "Hamba"
- },
- "kte": {
- "english_name": "Nubri"
- },
- "fy": {
- "english_name": "Frisian, Western"
- },
- "nhi": {
- "english_name": "Nahuatl, Zacatlán-Ahuacatlán-Tepetzintla"
- },
- "okx": {
- "english_name": "Okpe (Northwestern Edo)"
- },
- "kwa": {
- "english_name": "Dâw"
- },
- "kjh": {
- "english_name": "Khakas"
- },
- "mr": {
- "english_name": "Marathi",
- "name": "मराठी"
- },
- "ngz": {
- "english_name": "Ngungwel"
- },
- "gbi": {
- "english_name": "Galela"
- },
- "ubu": {
- "english_name": "Umbu-Ungu"
- },
- "bgn": {
- "english_name": "Balochi, Western"
- },
- "las": {
- "english_name": "Lama (Togo)"
- },
- "ojp": {
- "english_name": "Japanese, Old"
- },
- "asd": {
- "english_name": "Asas"
- },
- "nej": {
- "english_name": "Neko"
- },
- "ygr": {
- "english_name": "Yagaria"
- },
- "goz": {
- "english_name": "Gozarkhani"
- },
- "nat": {
- "english_name": "Hungworo"
- },
- "ymp": {
- "english_name": "Yamap"
- },
- "zaz": {
- "english_name": "Zari"
- },
- "yaz": {
- "english_name": "Lokaa"
- },
- "nd": {
- "english_name": "Ndebele, North"
- },
- "lkm": {
- "english_name": "Kalaamaya"
- },
- "brl": {
- "english_name": "Birwa"
- },
- "lbj": {
- "english_name": "Ladakhi"
- },
- "chk": {
- "english_name": "Chuukese"
- },
- "mva": {
- "english_name": "Manam"
- },
- "lvk": {
- "english_name": "Lavukaleve"
- },
- "hnj": {
- "english_name": "Hmong Njua"
- },
- "lko": {
- "english_name": "Khayo"
- },
- "mgi": {
- "english_name": "Lijili"
- },
- "cmo": {
- "english_name": "Mnong, Central"
- },
- "woa": {
- "english_name": "Tyaraity"
- },
- "eky": {
- "english_name": "Kayah, Eastern"
- },
- "yoy": {
- "english_name": "Yoy"
- },
- "bap": {
- "english_name": "Bantawa"
- },
- "auq": {
- "english_name": "Anus"
- },
- "sam": {
- "english_name": "Aramaic, Samaritan"
- },
- "nhm": {
- "english_name": "Nahuatl, Morelos"
- },
- "agb": {
- "english_name": "Legbo"
- },
- "dag": {
- "english_name": "Dagbani"
- },
- "sep": {
- "english_name": "Sénoufo, Sìcìté"
- },
- "kbm": {
- "english_name": "Iwal"
- },
- "tqw": {
- "english_name": "Tonkawa"
- },
- "cwb": {
- "english_name": "Maindo"
- },
- "ba": {
- "english_name": "Bashkir"
- },
- "nht": {
- "english_name": "Nahuatl, Ometepec"
- },
- "kfo": {
- "english_name": "Koro (Côte d'Ivoire)"
- },
- "hol": {
- "english_name": "Holu"
- },
- "bqi": {
- "english_name": "Bakhtiari"
- },
- "ggn": {
- "english_name": "Gurung, Eastern"
- },
- "mvm": {
- "english_name": "Muya"
- },
- "shq": {
- "english_name": "Sala"
- },
- "tom": {
- "english_name": "Tombulu"
- },
- "bsp": {
- "english_name": "Baga Sitemu"
- },
- "dau": {
- "english_name": "Daju, Dar Sila"
- },
- "trw": {
- "english_name": "Torwali"
- },
- "car": {
- "english_name": "Carib, Galibi"
- },
- "xpr": {
- "english_name": "Parthian"
- },
- "tmp": {
- "english_name": "Tai Mène"
- },
- "bkw": {
- "english_name": "Bekwel"
- },
- "wll": {
- "english_name": "Wali (Sudan)"
- },
- "kgb": {
- "english_name": "Kawe"
- },
- "peq": {
- "english_name": "Pomo, Southern"
- },
- "mcb": {
- "english_name": "Machiguenga"
- },
- "pka": {
- "english_name": "Prākrit, Ardhamāgadhī"
- },
- "lih": {
- "english_name": "Lihir"
- },
- "ska": {
- "english_name": "Skagit"
- },
- "mze": {
- "english_name": "Morawa"
- },
- "tlm": {
- "english_name": "Tolomako"
- },
- "ulw": {
- "english_name": "Ulwa"
- },
- "rug": {
- "english_name": "Roviana"
- },
- "kpr": {
- "english_name": "Korafe-Yegha"
- },
- "ary": {
- "english_name": "Arabic, Moroccan"
- },
- "eso": {
- "english_name": "Estonian Sign Language"
- },
- "xgl": {
- "english_name": "Galindan"
- },
- "kvq": {
- "english_name": "Karen, Geba"
- },
- "xkd": {
- "english_name": "Kayan, Mendalam"
- },
- "bwb": {
- "english_name": "Namosi-Naitasiri-Serua"
- },
- "ttv": {
- "english_name": "Titan"
- },
- "nyj": {
- "english_name": "Nyanga"
- },
- "bok": {
- "english_name": "Bonjo"
- },
- "nhc": {
- "english_name": "Nahuatl, Tabasco"
- },
- "wsa": {
- "english_name": "Warembori"
- },
- "bnk": {
- "english_name": "Bierebo"
- },
- "boq": {
- "english_name": "Bogaya"
- },
- "nyh": {
- "english_name": "Nyigina"
- },
- "rog": {
- "english_name": "Roglai, Northern"
- },
- "swf": {
- "english_name": "Sere"
- },
- "cpo": {
- "english_name": "Kpeego"
- },
- "krd": {
- "english_name": "Kairui-Midiki"
- },
- "tyj": {
- "english_name": "Tai Do"
- },
- "zrg": {
- "english_name": "Mirgan"
- },
- "mki": {
- "english_name": "Dhatki"
- },
- "jpa": {
- "english_name": "Aramaic, Jewish Palestinian"
- },
- "uun": {
- "english_name": "Kulon-Pazeh"
- },
- "tdt": {
- "english_name": "Tetun Dili"
- },
- "bhc": {
- "english_name": "Biga"
- },
- "bnc": {
- "english_name": "Bontok"
- },
- "ekm": {
- "english_name": "Elip"
- },
- "lcl": {
- "english_name": "Lisela"
- },
- "pmy": {
- "english_name": "Malay, Papuan"
- },
- "xeu": {
- "english_name": "Keoru-Ahia"
- },
- "nif": {
- "english_name": "Nek"
- },
- "ilk": {
- "english_name": "Ilongot"
- },
- "cof": {
- "english_name": "Colorado"
- },
- "nhy": {
- "english_name": "Nahuatl, Northern Oaxaca"
- },
- "bth": {
- "english_name": "Bidayuh, Biatah"
- },
- "tla": {
- "english_name": "Tepehuan, Southwestern"
- },
- "xcm": {
- "english_name": "Comecrudo"
- },
- "crt": {
- "english_name": "Chorote, Iyojwa'ja"
- },
- "raf": {
- "english_name": "Meohang, Western"
- },
- "ifu": {
- "english_name": "Ifugao, Mayoyao"
- },
- "rau": {
- "english_name": "Raute"
- },
- "xbc": {
- "english_name": "Bactrian"
- },
- "arn": {
- "english_name": "Mapudungun"
- },
- "yia": {
- "english_name": "Yinggarda"
- },
- "eip": {
- "english_name": "Eipomek"
- },
- "wro": {
- "english_name": "Worrorra"
- },
- "sif": {
- "english_name": "Siamou"
- },
- "bjf": {
- "english_name": "Neo-Aramaic, Barzani Jewish"
- },
- "sau": {
- "english_name": "Saleman"
- },
- "zmu": {
- "english_name": "Muruwari"
- },
- "bar": {
- "english_name": "Bavarian"
- },
- "dbt": {
- "english_name": "Dogon, Ben Tey"
- },
- "ets": {
- "english_name": "Yekhee"
- },
- "czt": {
- "english_name": "Chin, Zotung"
- },
- "dgc": {
- "english_name": "Agta, Casiguran Dumagat"
- },
- "kgr": {
- "english_name": "Abun"
- },
- "bek": {
- "english_name": "Bebeli"
- },
- "taz": {
- "english_name": "Tocho"
- },
- "lep": {
- "english_name": "Lepcha"
- },
- "kmv": {
- "english_name": "Creole French, Karipúna"
- },
- "nim": {
- "english_name": "Nilamba"
- },
- "tum": {
- "english_name": "Tumbuka"
- },
- "bsu": {
- "english_name": "Bahonsuai"
- },
- "tco": {
- "english_name": "Taungyo"
- },
- "spm": {
- "english_name": "Akukem"
- },
- "jv": {
- "english_name": "Javanese"
- },
- "isa": {
- "english_name": "Isabi"
- },
- "fay": {
- "english_name": "Fars, Southwestern"
- },
- "pln": {
- "english_name": "Palenquero"
- },
- "qvj": {
- "english_name": "Quichua, Loja Highland"
- },
- "xav": {
- "english_name": "Xavánte"
- },
- "vsv": {
- "english_name": "Valencian Sign Language"
- },
- "tyl": {
- "english_name": "Thu Lao"
- },
- "spq": {
- "english_name": "Spanish, Loreto-Ucayali"
- },
- "ak": {
- "english_name": "Akan"
- },
- "mug": {
- "english_name": "Musgu"
- },
- "jum": {
- "english_name": "Jumjum"
- },
- "era": {
- "english_name": "Eravallan"
- },
- "kjb": {
- "english_name": "Q'anjob'al"
- },
- "irh": {
- "english_name": "Irarutu"
- },
- "elx": {
- "english_name": "Elamite"
- },
- "cay": {
- "english_name": "Cayuga"
- },
- "yun": {
- "english_name": "Bena (Nigeria)"
- },
- "god": {
- "english_name": "Godié"
- },
- "nnp": {
- "english_name": "Naga, Wancho"
- },
- "kem": {
- "english_name": "Kemak"
- },
- "knu": {
- "english_name": "Kono (Guinea)"
- },
- "grc": {
- "english_name": "Greek, Ancient (to 1453)"
- },
- "muz": {
- "english_name": "Mursi"
- },
- "gye": {
- "english_name": "Gyem"
- },
- "noe": {
- "english_name": "Nimadi"
- },
- "sgy": {
- "english_name": "Sanglechi"
- },
- "bvu": {
- "english_name": "Malay, Bukit"
- },
- "fln": {
- "english_name": "Flinders Island"
- },
- "qul": {
- "english_name": "Quechua, North Bolivian"
- },
- "uta": {
- "english_name": "Otank"
- },
- "ebu": {
- "english_name": "Embu"
- },
- "hmi": {
- "english_name": "Hmong, Northern Huishui"
- },
- "tku": {
- "english_name": "Totonac, Upper Necaxa"
- },
- "ppe": {
- "english_name": "Papi"
- },
- "ril": {
- "english_name": "Riang (Myanmar)"
- },
- "iya": {
- "english_name": "Iyayu"
- },
- "gwx": {
- "english_name": "Gua"
- },
- "sjw": {
- "english_name": "Shawnee"
- },
- "kpo": {
- "english_name": "Ikposo"
- },
- "ars": {
- "english_name": "Arabic, Najdi"
- },
- "xru": {
- "english_name": "Marriammu"
- },
- "nmg": {
- "english_name": "Kwasio"
- },
- "slu": {
- "english_name": "Selaru"
- },
- "lmv": {
- "english_name": "Lomaiviti"
- },
- "ide": {
- "english_name": "Idere"
- },
- "bev": {
- "english_name": "Bété, Daloa"
- },
- "xat": {
- "english_name": "Katawixi"
- },
- "wbl": {
- "english_name": "Wakhi"
- },
- "gno": {
- "english_name": "Gondi, Northern"
- },
- "ngy": {
- "english_name": "Tibea"
- },
- "fie": {
- "english_name": "Fyer"
- },
- "vau": {
- "english_name": "Vanuma"
- },
- "bml": {
- "english_name": "Bomboli"
- },
- "gip": {
- "english_name": "Gimi (West New Britain)"
- },
- "dia": {
- "english_name": "Dia"
- },
- "ury": {
- "english_name": "Orya"
- },
- "kmj": {
- "english_name": "Kumarbhag Paharia"
- },
- "ort": {
- "english_name": "Oriya, Adivasi"
- },
- "ast": {
- "english_name": "Asturian",
- "name": "Asturianu"
- },
- "ptw": {
- "english_name": "Pentlatch"
- },
- "vma": {
- "english_name": "Martuyhunira"
- },
- "emu": {
- "english_name": "Muria, Eastern"
- },
- "emg": {
- "english_name": "Meohang, Eastern"
- },
- "puj": {
- "english_name": "Punan Tubu"
- },
- "bcg": {
- "english_name": "Baga Binari"
- },
- "kkq": {
- "english_name": "Kaiku"
- },
- "gea": {
- "english_name": "Geruma"
- },
- "kdr": {
- "english_name": "Karaim"
- },
- "ima": {
- "english_name": "Malasar, Mala"
- },
- "afk": {
- "english_name": "Nanubae"
- },
- "auh": {
- "english_name": "Aushi"
- },
- "ksx": {
- "english_name": "Kedang"
- },
- "dnr": {
- "english_name": "Danaru"
- },
- "kku": {
- "english_name": "Tumi"
- },
- "ckl": {
- "english_name": "Cibak"
- },
- "gaj": {
- "english_name": "Gadsup"
- },
- "obm": {
- "english_name": "Moabite"
- },
- "sc": {
- "english_name": "Sardinian"
- },
- "lbx": {
- "english_name": "Lawangan"
- },
- "pno": {
- "english_name": "Panobo"
- },
- "bds": {
- "english_name": "Burunge"
- },
- "crc": {
- "english_name": "Lonwolwol"
- },
- "gwn": {
- "english_name": "Gwandara"
- },
- "tnd": {
- "english_name": "Tunebo, Angosturas"
- },
- "daj": {
- "english_name": "Daju, Dar Fur"
- },
- "iwk": {
- "english_name": "I-Wak"
- },
- "hsb": {
- "english_name": "Sorbian, Upper"
- },
- "kvz": {
- "english_name": "Tsakwambo"
- },
- "zen": {
- "english_name": "Zenaga"
- },
- "tgv": {
- "english_name": "Tingui-Boto"
- },
- "yel": {
- "english_name": "Yela"
- },
- "av": {
- "english_name": "Avaric"
- },
- "pin": {
- "english_name": "Piame"
- },
- "aed": {
- "english_name": "Argentine Sign Language"
- },
- "esk": {
- "english_name": "Inupiatun, Northwest Alaska"
- },
- "jul": {
- "english_name": "Jirel"
- },
- "mkf": {
- "english_name": "Miya"
- },
- "mgo": {
- "english_name": "Meta'"
- },
- "tao": {
- "english_name": "Yami"
- },
- "paw": {
- "english_name": "Pawnee"
- },
- "los": {
- "english_name": "Loniu"
- },
- "iby": {
- "english_name": "Ibani"
- },
- "kxm": {
- "english_name": "Khmer, Northern"
- },
- "bxk": {
- "english_name": "Bukusu"
- },
- "wbk": {
- "english_name": "Waigali"
- },
- "tdq": {
- "english_name": "Tita"
- },
- "bwy": {
- "english_name": "Bwamu, Cwi"
- },
- "atk": {
- "english_name": "Ati"
- },
- "tss": {
- "english_name": "Taiwan Sign Language"
- },
- "jiu": {
- "english_name": "Jinuo, Youle"
- },
- "ywa": {
- "english_name": "Kalou"
- },
- "nxe": {
- "english_name": "Nage"
- },
- "gom": {
- "english_name": "Konkani, Goan"
- },
- "ssc": {
- "english_name": "Suba-Simbiti"
- },
- "pww": {
- "english_name": "Karen, Pwo Northern"
- },
- "aok": {
- "english_name": "Arhö"
- },
- "qya": {
- "english_name": "Quenya"
- },
- "ada": {
- "english_name": "Adangme"
- },
- "rir": {
- "english_name": "Ribun"
- },
- "kkh": {
- "english_name": "Khün"
- },
- "prc": {
- "english_name": "Parachi"
- },
- "quf": {
- "english_name": "Quechua, Lambayeque"
- },
- "yav": {
- "english_name": "Yangben"
- },
- "wbw": {
- "english_name": "Woi"
- },
- "gei": {
- "english_name": "Gebe"
- },
- "huy": {
- "english_name": "Hulaulá"
- },
- "nlk": {
- "english_name": "Yali, Ninia"
- },
- "njt": {
- "english_name": "Ndyuka-Trio Pidgin"
- },
- "tmu": {
- "english_name": "Iau"
- },
- "pbl": {
- "english_name": "Mak (Nigeria)"
- },
- "bpj": {
- "english_name": "Binji"
- },
- "ppu": {
- "english_name": "Papora"
- },
- "tnx": {
- "english_name": "Tanema"
- },
- "cal": {
- "english_name": "Carolinian"
- },
- "tdv": {
- "english_name": "Toro"
- },
- "kvw": {
- "english_name": "Wersing"
- },
- "lyn": {
- "english_name": "Luyana"
- },
- "tlk": {
- "english_name": "Taloki"
- },
- "dny": {
- "english_name": "Dení"
- },
- "bbk": {
- "english_name": "Babanki"
- },
- "afp": {
- "english_name": "Tapei"
- },
- "snj": {
- "english_name": "Sango, Riverain"
- },
- "lip": {
- "english_name": "Sekpele"
- },
- "bja": {
- "english_name": "Budza"
- },
- "umo": {
- "english_name": "Umotína"
- },
- "jan": {
- "english_name": "Jandai"
- },
- "cur": {
- "english_name": "Chhulung"
- },
- "urn": {
- "english_name": "Uruangnirin"
- },
- "xbb": {
- "english_name": "Burdekin, Lower"
- },
- "bhd": {
- "english_name": "Bhadrawahi"
- },
- "ixc": {
- "english_name": "Ixcatec"
- },
- "sku": {
- "english_name": "Sakao"
- },
- "enq": {
- "english_name": "Enga"
- },
- "ncl": {
- "english_name": "Nahuatl, Michoacán"
- },
- "nka": {
- "english_name": "Nkoya"
- },
- "xaw": {
- "english_name": "Kawaiisu"
- },
- "bcp": {
- "english_name": "Bali (Democratic Republic of Congo)"
- },
- "fit": {
- "english_name": "Finnish, Tornedalen"
- },
- "lab": {
- "english_name": "Linear A"
- },
- "jor": {
- "english_name": "Jorá"
- },
- "agd": {
- "english_name": "Agarabi"
- },
- "zsm": {
- "english_name": "Malay, Standard"
- },
- "vep": {
- "english_name": "Veps"
- },
- "tsd": {
- "english_name": "Tsakonian"
- },
- "yre": {
- "english_name": "Yaouré"
- },
- "atl": {
- "english_name": "Agta, Mt. Iraya"
- },
- "bhm": {
- "english_name": "Bathari"
- },
- "bwa": {
- "english_name": "Bwatoo"
- },
- "obl": {
- "english_name": "Oblo"
- },
- "xls": {
- "english_name": "Lusitanian"
- },
- "kdm": {
- "english_name": "Kagoma"
- },
- "crf": {
- "english_name": "Caramanta"
- },
- "kkw": {
- "english_name": "Teke-Kukuya"
- },
- "tsu": {
- "english_name": "Tsou"
- },
- "lma": {
- "english_name": "Limba, East"
- },
- "hut": {
- "english_name": "Humla"
- },
- "bqx": {
- "english_name": "Baangi"
- },
- "mgs": {
- "english_name": "Manda (Tanzania)"
- },
- "sve": {
- "english_name": "Serili"
- },
- "fpe": {
- "english_name": "Creole English, Fernando Po"
- },
- "gsl": {
- "english_name": "Gusilay"
- },
- "xbw": {
- "english_name": "Kambiwá"
- },
- "csq": {
- "english_name": "Croatia Sign Language"
- },
- "iko": {
- "english_name": "Olulumo-Ikom"
- },
- "krj": {
- "english_name": "Kinaray-A"
- },
- "mme": {
- "english_name": "Mae"
- },
- "mmt": {
- "english_name": "Malalamai"
- },
- "tpi": {
- "english_name": "Tok Pisin"
- },
- "col": {
- "english_name": "Columbia-Wenatchi"
- },
- "kvo": {
- "english_name": "Dobel"
- },
- "mfu": {
- "english_name": "Mbwela"
- },
- "bdv": {
- "english_name": "Bodo Parja"
- },
- "mvk": {
- "english_name": "Mekmek"
- },
- "cds": {
- "english_name": "Chadian Sign Language"
- },
- "yej": {
- "english_name": "Yevanic"
- },
- "bba": {
- "english_name": "Baatonum"
- },
- "ycl": {
- "english_name": "Lolopo"
- },
- "due": {
- "english_name": "Agta, Umiray Dumaget"
- },
- "byz": {
- "english_name": "Banaro"
- },
- "nzz": {
- "english_name": "Dogon, Nanga Dama"
- },
- "lmf": {
- "english_name": "Lembata, South"
- },
- "kwl": {
- "english_name": "Kofyar"
- },
- "ne": {
- "english_name": "Nepali (macrolanguage)"
- },
- "lzh": {
- "english_name": "Chinese, Literary"
- },
- "sse": {
- "english_name": "Balangingi"
- },
- "hif": {
- "english_name": "Hindi, Fiji"
- },
- "btr": {
- "english_name": "Baetora"
- },
- "pru": {
- "english_name": "Puragi"
- },
- "stg": {
- "english_name": "Trieng"
- },
- "tcg": {
- "english_name": "Tamagario"
- },
- "iin": {
- "english_name": "Thiin"
- },
- "pux": {
- "english_name": "Puare"
- },
- "xso": {
- "english_name": "Solano"
- },
- "ais": {
- "english_name": "Amis, Nataoran"
- },
- "cok": {
- "english_name": "Cora, Santa Teresa"
- },
- "lul": {
- "english_name": "Olu'bo"
- },
- "sns": {
- "english_name": "South West Bay"
- },
- "phv": {
- "english_name": "Pahlavani"
- },
- "ack": {
- "english_name": "Aka-Kora"
- },
- "zau": {
- "english_name": "Zangskari"
- },
- "yir": {
- "english_name": "Awyu, North"
- },
- "lya": {
- "english_name": "Layakha"
- },
- "llj": {
- "english_name": "Ladji Ladji"
- },
- "bmw": {
- "english_name": "Bomwali"
- },
- "ull": {
- "english_name": "Ullatan"
- },
- "tbt": {
- "english_name": "Tembo (Kitembo)"
- },
- "mxf": {
- "english_name": "Malgbe"
- },
- "kko": {
- "english_name": "Karko"
- },
- "mni": {
- "english_name": "Manipuri"
- },
- "zpj": {
- "english_name": "Zapotec, Quiavicuzas"
- },
- "jvn": {
- "english_name": "Javanese, Caribbean"
- },
- "sdp": {
- "english_name": "Sherdukpen"
- },
- "mtx": {
- "english_name": "Mixtec, Tidaá"
- },
- "osx": {
- "english_name": "Saxon, Old"
- },
- "gbp": {
- "english_name": "Gbaya-Bossangoa"
- },
- "xbe": {
- "english_name": "Bigambal"
- },
- "mjy": {
- "english_name": "Mahican"
- },
- "aij": {
- "english_name": "Lishanid Noshan"
- },
- "cbn": {
- "english_name": "Nyahkur"
- },
- "sbo": {
- "english_name": "Sabüm"
- },
- "zhd": {
- "english_name": "Zhuang, Dai"
- },
- "kgk": {
- "english_name": "Kaiwá"
- },
- "nfa": {
- "english_name": "Dhao"
- },
- "bmg": {
- "english_name": "Bamwe"
- },
- "aug": {
- "english_name": "Aguna"
- },
- "xkr": {
- "english_name": "Xakriabá"
- },
- "klj": {
- "english_name": "Khalaj, Turkic"
- },
- "hmh": {
- "english_name": "Hmong, Southwestern Huishui"
- },
- "yuf": {
- "english_name": "Havasupai-Walapai-Yavapai"
- },
- "tzh": {
- "english_name": "Tzeltal"
- },
- "oki": {
- "english_name": "Okiek"
- },
- "djk": {
- "english_name": "Eastern Maroon Creole"
- },
- "anv": {
- "english_name": "Denya"
- },
- "nss": {
- "english_name": "Nali"
- },
- "hil": {
- "english_name": "Hiligaynon"
- },
- "dym": {
- "english_name": "Dogon, Yanda Dom"
- },
- "pmh": {
- "english_name": "Prākrit, Māhārāṣṭri"
- },
- "zpi": {
- "english_name": "Zapotec, Santa María Quiegolani"
- },
- "slh": {
- "english_name": "Salish, Southern Puget Sound"
- },
- "abj": {
- "english_name": "Aka-Bea"
- },
- "bpl": {
- "english_name": "Broome Pearling Lugger Pidgin"
- },
- "zpp": {
- "english_name": "Zapotec, El Alto"
- },
- "es": {
- "english_name": "Spanish",
- "name": "Español"
- },
- "xpk": {
- "english_name": "Pano, Kulina"
- },
- "mxw": {
- "english_name": "Namo"
- },
- "cnh": {
- "english_name": "Chin, Haka"
- },
- "jbr": {
- "english_name": "Jofotek-Bromnya"
- },
- "ssg": {
- "english_name": "Seimat"
- },
- "lhp": {
- "english_name": "Lhokpu"
- },
- "mip": {
- "english_name": "Mixtec, Apasco-Apoala"
- },
- "kjy": {
- "english_name": "Erave"
- },
- "otb": {
- "english_name": "Tibetan, Old"
- },
- "otm": {
- "english_name": "Otomi, Eastern Highland"
- },
- "yix": {
- "english_name": "Yi, Axi"
- },
- "iwo": {
- "english_name": "Iwur"
- },
- "zmj": {
- "english_name": "Maridjabin"
- },
- "bvq": {
- "english_name": "Birri"
- },
- "tan": {
- "english_name": "Tangale"
- },
- "kjk": {
- "english_name": "Konjo, Highland"
- },
- "cji": {
- "english_name": "Chamalal"
- },
- "zmb": {
- "english_name": "Zimba"
- },
- "suv": {
- "english_name": "Puroik"
- },
- "byq": {
- "english_name": "Basay"
- },
- "phu": {
- "english_name": "Phuan"
- },
- "kac": {
- "english_name": "Kachin"
- },
- "tlu": {
- "english_name": "Tulehu"
- },
- "mht": {
- "english_name": "Mandahuaca"
- },
- "mqr": {
- "english_name": "Mander"
- },
- "axx": {
- "english_name": "Xârâgurè"
- },
- "mjw": {
- "english_name": "Karbi"
- },
- "dsi": {
- "english_name": "Disa"
- },
- "etz": {
- "english_name": "Semimi"
- },
- "arb": {
- "english_name": "Arabic, Standard"
- },
- "gwr": {
- "english_name": "Gwere"
- },
- "sae": {
- "english_name": "Sabanê"
- },
- "ann": {
- "english_name": "Obolo"
- },
- "jic": {
- "english_name": "Tol"
- },
- "nkz": {
- "english_name": "Nkari"
- },
- "srl": {
- "english_name": "Isirawa"
- },
- "nkf": {
- "english_name": "Naga, Inpui"
- },
- "hds": {
- "english_name": "Honduras Sign Language"
- },
- "khh": {
- "english_name": "Kehu"
- },
- "dti": {
- "english_name": "Dogon, Ana Tinga"
- },
- "bwq": {
- "english_name": "Bobo Madaré, Southern"
- },
- "gek": {
- "english_name": "Yiwom"
- },
- "dbn": {
- "english_name": "Duriankere"
- },
- "kax": {
- "english_name": "Kao"
- },
- "kwp": {
- "english_name": "Kodia"
- },
- "wkb": {
- "english_name": "Kumbaran"
- },
- "qua": {
- "english_name": "Quapaw"
- },
- "pee": {
- "english_name": "Taje"
- },
- "gne": {
- "english_name": "Ganang"
- },
- "mft": {
- "english_name": "Mokerang"
- },
- "hoc": {
- "english_name": "Ho"
- },
- "wym": {
- "english_name": "Wymysorys"
- },
- "mdm": {
- "english_name": "Mayogo"
- },
- "drr": {
- "english_name": "Dororo"
- },
- "mkt": {
- "english_name": "Vamale"
- },
- "psu": {
- "english_name": "Prākrit, Sauraseni"
- },
- "oue": {
- "english_name": "Oune"
- },
- "ynk": {
- "english_name": "Yupik, Naukan"
- },
- "sre": {
- "english_name": "Sara"
- },
- "kfs": {
- "english_name": "Bilaspuri"
- },
- "dnd": {
- "english_name": "Daonda"
- },
- "yyz": {
- "english_name": "Ayizi"
- },
- "yob": {
- "english_name": "Yoba"
- },
- "glj": {
- "english_name": "Gula Iro"
- },
- "bgg": {
- "english_name": "Bugun"
- },
- "hle": {
- "english_name": "Hlersu"
- },
- "soa": {
- "english_name": "Thai Song"
- },
- "nsx": {
- "english_name": "Nsongo"
- },
- "lap": {
- "english_name": "Laka (Chad)"
- },
- "knf": {
- "english_name": "Mankanya"
- },
- "ite": {
- "english_name": "Itene"
- },
- "dtb": {
- "english_name": "Kadazan, Labuk-Kinabatangan"
- },
- "ivb": {
- "english_name": "Ibatan"
- },
- "waq": {
- "english_name": "Wageman"
- },
- "toh": {
- "english_name": "Gitonga"
- },
- "zmo": {
- "english_name": "Molo"
- },
- "urc": {
- "english_name": "Urningangg"
- },
- "wja": {
- "english_name": "Waja"
- },
- "pem": {
- "english_name": "Phende"
- },
- "wlw": {
- "english_name": "Walak"
- },
- "drc": {
- "english_name": "Minderico"
- },
- "apk": {
- "english_name": "Apache, Kiowa"
- },
- "bva": {
- "english_name": "Barein"
- },
- "bjn": {
- "english_name": "Banjar"
- },
- "imo": {
- "english_name": "Imbongu"
- },
- "bfd": {
- "english_name": "Bafut"
- },
- "tvn": {
- "english_name": "Tavoyan"
- },
- "zax": {
- "english_name": "Zapotec, Xadani"
- },
- "tme": {
- "english_name": "Tremembé"
- },
- "ncf": {
- "english_name": "Notsi"
- },
- "lsi": {
- "english_name": "Lashi"
- },
- "xmk": {
- "english_name": "Macedonian, Ancient"
- },
- "bou": {
- "english_name": "Bondei"
- },
- "kls": {
- "english_name": "Kalasha"
- },
- "cjh": {
- "english_name": "Chehalis, Upper"
- },
- "sbz": {
- "english_name": "Sara Kaba"
- },
- "mvb": {
- "english_name": "Mattole"
- },
- "pel": {
- "english_name": "Pekal"
- },
- "gqu": {
- "english_name": "Qau"
- },
- "pni": {
- "english_name": "Aoheng"
- },
- "grh": {
- "english_name": "Gbiri-Niragu"
- },
- "ug": {
- "english_name": "Uighur"
- },
- "mmb": {
- "english_name": "Momina"
- },
- "zrn": {
- "english_name": "Zerenkel"
- },
- "sbn": {
- "english_name": "Bhil, Sindhi"
- },
- "tyi": {
- "english_name": "Teke-Tsaayi"
- },
- "asl": {
- "english_name": "Asilulu"
- },
- "quk": {
- "english_name": "Quechua, Chachapoyas"
- },
- "wog": {
- "english_name": "Wogamusin"
- },
- "sus": {
- "english_name": "Susu"
- },
- "beq": {
- "english_name": "Beembe"
- },
- "pby": {
- "english_name": "Pyu"
- },
- "yku": {
- "english_name": "Kuamasi"
- },
- "msc": {
- "english_name": "Maninka, Sankaran"
- },
- "buw": {
- "english_name": "Bubi"
- },
- "kwg": {
- "english_name": "Sara Kaba Deme"
- },
- "xri": {
- "english_name": "Krikati-Timbira"
- },
- "mgv": {
- "english_name": "Matengo"
- },
- "nds": {
- "english_name": "German, Low"
- },
- "ays": {
- "english_name": "Ayta, Sorsogon"
- },
- "age": {
- "english_name": "Angal"
- },
- "mib": {
- "english_name": "Mixtec, Atatláhuca"
- },
- "xmt": {
- "english_name": "Matbat"
- },
- "tcn": {
- "english_name": "Tichurong"
- },
- "ndb": {
- "english_name": "Kenswei Nsei"
- },
- "fiw": {
- "english_name": "Fiwaga"
- },
- "gvo": {
- "english_name": "Gavião Do Jiparaná"
- },
- "brg": {
- "english_name": "Baure"
- },
- "bnw": {
- "english_name": "Bisis"
- },
- "idd": {
- "english_name": "Ede Idaca"
- },
- "seb": {
- "english_name": "Senoufo, Shempire"
- },
- "ssn": {
- "english_name": "Waata"
- },
- "bjc": {
- "english_name": "Bariji"
- },
- "otz": {
- "english_name": "Otomi, Ixtenco"
- },
- "bxq": {
- "english_name": "Beele"
- },
- "ncr": {
- "english_name": "Ncane"
- },
- "seu": {
- "english_name": "Serui-Laut"
- },
- "obu": {
- "english_name": "Obulom"
- },
- "sra": {
- "english_name": "Saruga"
- },
- "dox": {
- "english_name": "Bussa"
- },
- "shc": {
- "english_name": "Sonde"
- },
- "kyc": {
- "english_name": "Kyaka"
- },
- "ibr": {
- "english_name": "Ibuoro"
- },
- "stt": {
- "english_name": "Stieng, Budeh"
- },
- "aor": {
- "english_name": "Aore"
- },
- "lhu": {
- "english_name": "Lahu"
- },
- "keh": {
- "english_name": "Keak"
- },
- "saa": {
- "english_name": "Saba"
- },
- "klb": {
- "english_name": "Kiliwa"
- },
- "kcw": {
- "english_name": "Kabwari"
- },
- "ome": {
- "english_name": "Omejes"
- },
- "kxh": {
- "english_name": "Karo (Ethiopia)"
- },
- "rad": {
- "english_name": "Rade"
- },
- "tms": {
- "english_name": "Tima"
- },
- "iap": {
- "english_name": "Iapama"
- },
- "na": {
- "english_name": "Nauru"
- },
- "bfx": {
- "english_name": "Bantayanon"
- },
- "lmx": {
- "english_name": "Laimbue"
- },
- "ktc": {
- "english_name": "Kholok"
- },
- "tsw": {
- "english_name": "Tsishingini"
- },
- "cbt": {
- "english_name": "Chayahuita"
- },
- "okn": {
- "english_name": "Oki-No-Erabu"
- },
- "xmz": {
- "english_name": "Mori Bawah"
- },
- "fj": {
- "english_name": "Fijian"
- },
- "kpn": {
- "english_name": "Kepkiriwát"
- },
- "wky": {
- "english_name": "Wangkayutyuru"
- },
- "oub": {
- "english_name": "Glio-Oubi"
- },
- "gvm": {
- "english_name": "Gurmana"
- },
- "ptr": {
- "english_name": "Piamatsina"
- },
- "lhn": {
- "english_name": "Lahanan"
- },
- "bcf": {
- "english_name": "Bamu"
- },
- "hia": {
- "english_name": "Lamang"
- },
- "dep": {
- "english_name": "Delaware, Pidgin"
- },
- "bsl": {
- "english_name": "Basa-Gumna"
- },
- "ltg": {
- "english_name": "Latgalian"
- },
- "mcw": {
- "english_name": "Mawa (Chad)"
- },
- "twq": {
- "english_name": "Tasawaq"
- },
- "co": {
- "english_name": "Corsican"
- },
- "lpn": {
- "english_name": "Naga, Long Phuri"
- },
- "zir": {
- "english_name": "Ziriya"
- },
- "bo": {
- "english_name": "Tibetan"
- },
- "xcn": {
- "english_name": "Cotoname"
- },
- "xkf": {
- "english_name": "Khengkha"
- },
- "sky": {
- "english_name": "Sikaiana"
- },
- "kyp": {
- "english_name": "Kang"
- },
- "xum": {
- "english_name": "Umbrian"
- },
- "asj": {
- "english_name": "Sari"
- },
- "btc": {
- "english_name": "Bati (Cameroon)"
- },
- "ggo": {
- "english_name": "Gondi, Southern"
- },
- "igg": {
- "english_name": "Igana"
- },
- "mue": {
- "english_name": "Media Lengua"
- },
- "gof": {
- "english_name": "Gofa"
- },
- "trr": {
- "english_name": "Taushiro"
- },
- "anq": {
- "english_name": "Jarawa (India)"
- },
- "tgj": {
- "english_name": "Tagin"
- },
- "bye": {
- "english_name": "Pouye"
- },
- "nwi": {
- "english_name": "Tanna, Southwest"
- },
- "zpn": {
- "english_name": "Zapotec, Santa Inés Yatzechi"
- },
- "asy": {
- "english_name": "Asmat, Yaosakor"
- },
- "wof": {
- "english_name": "Wolof, Gambian"
- },
- "kco": {
- "english_name": "Kinalakna"
- },
- "mct": {
- "english_name": "Mengisa"
- },
- "bhu": {
- "english_name": "Bhunjia"
- },
- "nnu": {
- "english_name": "Dwang"
- },
- "dhv": {
- "english_name": "Dehu"
- },
- "uan": {
- "english_name": "Kuan"
- },
- "xcg": {
- "english_name": "Gaulish, Cisalpine"
- },
- "xkp": {
- "english_name": "Kabatei"
- },
- "vkl": {
- "english_name": "Kulisusu"
- },
- "guo": {
- "english_name": "Guayabero"
- },
- "pmz": {
- "english_name": "Pame, Southern"
- },
- "byr": {
- "english_name": "Baruya"
- },
- "dih": {
- "english_name": "Kumiai"
- },
- "jud": {
- "english_name": "Worodougou"
- },
- "cpi": {
- "english_name": "Pidgin English, Chinese"
- },
- "dok": {
- "english_name": "Dondo"
- },
- "sas": {
- "english_name": "Sasak"
- },
- "osu": {
- "english_name": "One, Southern"
- },
- "ndv": {
- "english_name": "Ndut"
- },
- "msd": {
- "english_name": "Yucatec Maya Sign Language"
- },
- "aba": {
- "english_name": "Abé"
- },
- "vil": {
- "english_name": "Vilela"
- },
- "yab": {
- "english_name": "Yuhup"
- },
- "dru": {
- "english_name": "Rukai"
- },
- "yxg": {
- "english_name": "Yagara"
- },
- "wlr": {
- "english_name": "Wailapa"
- },
- "mwy": {
- "english_name": "Mosiro"
- },
- "qva": {
- "english_name": "Quechua, Ambo-Pasco"
- },
- "nbt": {
- "english_name": "Na"
- },
- "onn": {
- "english_name": "Onobasulu"
- },
- "ayi": {
- "english_name": "Leyigha"
- },
- "kqm": {
- "english_name": "Khisa"
- },
- "yms": {
- "english_name": "Mysian"
- },
- "nhk": {
- "english_name": "Nahuatl, Isthmus-Cosoleacaque"
- },
- "wng": {
- "english_name": "Wanggom"
- },
- "ccm": {
- "english_name": "Creole Malay, Malaccan"
- },
- "api": {
- "english_name": "Apiaká"
- },
- "mxq": {
- "english_name": "Mixe, Juquila"
- },
- "udj": {
- "english_name": "Ujir"
- },
- "nij": {
- "english_name": "Ngaju"
- },
- "vls": {
- "english_name": "Vlaams"
- },
- "mys": {
- "english_name": "Mesmes"
- },
- "npn": {
- "english_name": "Mondropolon"
- },
- "xta": {
- "english_name": "Mixtec, Alcozauca"
- },
- "kec": {
- "english_name": "Keiga"
- },
- "bex": {
- "english_name": "Jur Modo"
- },
- "kne": {
- "english_name": "Kankanaey"
- },
- "xwo": {
- "english_name": "Oirat, Written"
- },
- "pa": {
- "english_name": "Panjabi",
- "name": "ਪੰਜਾਬੀ"
- },
- "xsc": {
- "english_name": "Scythian"
- },
- "wlv": {
- "english_name": "Wichí Lhamtés Vejoz"
- },
- "tri": {
- "english_name": "Trió"
- },
- "iai": {
- "english_name": "Iaai"
- },
- "cah": {
- "english_name": "Cahuarano"
- },
- "naw": {
- "english_name": "Nawuri"
- },
- "ziw": {
- "english_name": "Zigula"
- },
- "iow": {
- "english_name": "Iowa-Oto"
- },
- "mbo": {
- "english_name": "Mbo (Cameroon)"
- },
- "nti": {
- "english_name": "Natioro"
- },
- "ntm": {
- "english_name": "Nateni"
- },
- "bkc": {
- "english_name": "Baka (Cameroon)"
- },
- "tsg": {
- "english_name": "Tausug"
- },
- "xwe": {
- "english_name": "Gbe, Xwela"
- },
- "aks": {
- "english_name": "Akaselem"
- },
- "woo": {
- "english_name": "Manombai"
- },
- "kml": {
- "english_name": "Kalinga, Tanudan"
- },
- "des": {
- "english_name": "Desano"
- },
- "txm": {
- "english_name": "Tomini"
- },
- "khf": {
- "english_name": "Khuen"
- },
- "grr": {
- "english_name": "Taznatit"
- },
- "esh": {
- "english_name": "Eshtehardi"
- },
- "mxa": {
- "english_name": "Mixtec, Northwest Oaxaca"
- },
- "ngi": {
- "english_name": "Ngizim"
- },
- "bqs": {
- "english_name": "Bosngun"
- },
- "dup": {
- "english_name": "Duano"
- },
- "dez": {
- "english_name": "Dengese"
- },
- "ota": {
- "english_name": "Turkish, Ottoman (1500-1928)"
- },
- "nmv": {
- "english_name": "Ngamini"
- },
- "siq": {
- "english_name": "Sonia"
- },
- "tzn": {
- "english_name": "Tugun"
- },
- "mtp": {
- "english_name": "Wichí Lhamtés Nocten"
- },
- "avo": {
- "english_name": "Agavotaguerra"
- },
- "cdg": {
- "english_name": "Chamari"
- },
- "zsr": {
- "english_name": "Zapotec, Southern Rincon"
- },
- "lro": {
- "english_name": "Laro"
- },
- "tbl": {
- "english_name": "Tboli"
- },
- "yde": {
- "english_name": "Yangum Dey"
- },
- "wmi": {
- "english_name": "Wamin"
- },
- "hrw": {
- "english_name": "Warwar Feni"
- },
- "amq": {
- "english_name": "Amahai"
- },
- "moj": {
- "english_name": "Monzombo"
- },
- "tmy": {
- "english_name": "Tami"
- },
- "pes": {
- "english_name": "Persian, Iranian"
- },
- "bgb": {
- "english_name": "Bobongko"
- },
- "buf": {
- "english_name": "Bushoong"
- },
- "moo": {
- "english_name": "Monom"
- },
- "dev": {
- "english_name": "Domung"
- },
- "tt": {
- "english_name": "Tatar",
- "name": "Татарча"
- },
- "xxk": {
- "english_name": "Ke'o"
- },
- "yot": {
- "english_name": "Yotti"
- },
- "maq": {
- "english_name": "Mazatec, Chiquihuitlán"
- },
- "csg": {
- "english_name": "Chilean Sign Language"
- },
- "mat": {
- "english_name": "Matlatzinca, San Francisco"
- },
- "yva": {
- "english_name": "Yawa"
- },
- "nnj": {
- "english_name": "Nyangatom"
- },
- "wea": {
- "english_name": "Wewaw"
- },
- "loy": {
- "english_name": "Loke"
- },
- "tna": {
- "english_name": "Tacana"
- },
- "ktf": {
- "english_name": "Kwami"
- },
- "hoe": {
- "english_name": "Horom"
- },
- "smu": {
- "english_name": "Somray"
- },
- "zph": {
- "english_name": "Zapotec, Totomachapan"
- },
- "mbl": {
- "english_name": "Maxakalí"
- },
- "rap": {
- "english_name": "Rapanui"
- },
- "hti": {
- "english_name": "Hoti"
- },
- "bkz": {
- "english_name": "Bungku"
- },
- "thk": {
- "english_name": "Tharaka"
- },
- "pjt": {
- "english_name": "Pitjantjatjara"
- },
- "mei": {
- "english_name": "Midob"
- },
- "zia": {
- "english_name": "Zia"
- },
- "llo": {
- "english_name": "Khlor"
- },
- "bxn": {
- "english_name": "Burduna"
- },
- "hmd": {
- "english_name": "Miao, Large Flowery"
- },
- "nsu": {
- "english_name": "Nahuatl, Sierra Negra"
- },
- "sdj": {
- "english_name": "Suundi"
- },
- "amb": {
- "english_name": "Ambo"
- },
- "ybi": {
- "english_name": "Yamphu"
- },
- "lak": {
- "english_name": "Laka (Nigeria)"
- },
- "amc": {
- "english_name": "Amahuaca"
- },
- "lbv": {
- "english_name": "Lavatbura-Lamusong"
- },
- "pug": {
- "english_name": "Phuie"
- },
- "tzj": {
- "english_name": "Tz'utujil"
- },
- "tlh": {
- "english_name": "Klingon"
- },
- "wal": {
- "english_name": "Wolaytta"
- },
- "raa": {
- "english_name": "Dungmali"
- },
- "xdc": {
- "english_name": "Dacian"
- },
- "aez": {
- "english_name": "Aeka"
- },
- "kol": {
- "english_name": "Kol (Papua New Guinea)"
- },
- "gdo": {
- "english_name": "Ghodoberi"
- },
- "mcf": {
- "english_name": "Matsés"
- },
- "tqu": {
- "english_name": "Touo"
- },
- "agn": {
- "english_name": "Agutaynen"
- },
- "xmh": {
- "english_name": "Kuku-Muminh"
- },
- "snx": {
- "english_name": "Sam"
- },
- "lyg": {
- "english_name": "Lyngngam"
- },
- "axe": {
- "english_name": "Ayerrerenge"
- },
- "sym": {
- "english_name": "Samo, Maya"
- },
- "cna": {
- "english_name": "Changthang"
- },
- "laa": {
- "english_name": "Subanen, Southern"
- },
- "mzi": {
- "english_name": "Mazatec, Ixcatlán"
- },
- "gby": {
- "english_name": "Gbari"
- },
- "glc": {
- "english_name": "Bon Gula"
- },
- "sef": {
- "english_name": "Senoufo, Cebaara"
- },
- "vmg": {
- "english_name": "Lungalunga"
- },
- "byf": {
- "english_name": "Bete"
- },
- "bdh": {
- "english_name": "Baka (Sudan)"
- },
- "cmn": {
- "english_name": "Chinese, Mandarin"
- },
- "nud": {
- "english_name": "Ngala"
- },
- "mvh": {
- "english_name": "Mulgi"
- },
- "tgz": {
- "english_name": "Tagalaka"
- },
- "aml": {
- "english_name": "War-Jaintia"
- },
- "kaa": {
- "english_name": "Kara-Kalpak"
- },
- "bef": {
- "english_name": "Benabena"
- },
- "kei": {
- "english_name": "Kei"
- },
- "byc": {
- "english_name": "Ubaghara"
- },
- "etu": {
- "english_name": "Ejagham"
- },
- "zmm": {
- "english_name": "Marimanindji"
- },
- "ziz": {
- "english_name": "Zizilivakan"
- },
- "ifa": {
- "english_name": "Ifugao, Amganad"
- },
- "dax": {
- "english_name": "Dayi"
- },
- "xna": {
- "english_name": "North Arabian, Ancient"
- },
- "nma": {
- "english_name": "Naga, Maram"
- },
- "ono": {
- "english_name": "Onondaga"
- },
- "dub": {
- "english_name": "Dubli"
- },
- "ayr": {
- "english_name": "Aymara, Central"
- },
- "xwk": {
- "english_name": "Wangkumara"
- },
- "kvt": {
- "english_name": "Karen, Lahta"
- },
- "meo": {
- "english_name": "Malay, Kedah"
- },
- "nhg": {
- "english_name": "Nahuatl, Tetelcingo"
- },
- "sgi": {
- "english_name": "Suga"
- },
- "www": {
- "english_name": "Wawa"
- },
- "bct": {
- "english_name": "Bendi"
- },
- "yng": {
- "english_name": "Yango"
- },
- "meh": {
- "english_name": "Mixtec, Southwestern Tlaxiaco"
- },
- "gma": {
- "english_name": "Gambera"
- },
- "niv": {
- "english_name": "Gilyak"
- },
- "lex": {
- "english_name": "Luang"
- },
- "yul": {
- "english_name": "Yulu"
- },
- "csa": {
- "english_name": "Chinantec, Chiltepec"
- },
- "nza": {
- "english_name": "Mbembe, Tigon"
- },
- "dni": {
- "english_name": "Dani, Lower Grand Valley"
- },
- "aso": {
- "english_name": "Dano"
- },
- "sn": {
- "english_name": "Shona"
- },
- "kjp": {
- "english_name": "Karen, Pwo Eastern"
- },
- "auk": {
- "english_name": "Heyo"
- },
- "atn": {
- "english_name": "Ashtiani"
- },
- "bae": {
- "english_name": "Baré"
- },
- "aid": {
- "english_name": "Alngith"
- },
- "kjg": {
- "english_name": "Khmu"
- },
- "sax": {
- "english_name": "Sa"
- },
- "bxh": {
- "english_name": "Buhutu"
- },
- "air": {
- "english_name": "Airoran"
- },
- "fo": {
- "english_name": "Faroese"
- },
- "mev": {
- "english_name": "Mano"
- },
- "zhi": {
- "english_name": "Zhire"
- },
- "acd": {
- "english_name": "Gikyode"
- },
- "leo": {
- "english_name": "Leti (Cameroon)"
- },
- "hei": {
- "english_name": "Heiltsuk"
- },
- "bvn": {
- "english_name": "Buna"
- },
- "mlp": {
- "english_name": "Bargam"
- },
- "ccj": {
- "english_name": "Kasanga"
- },
- "cnu": {
- "english_name": "Chenoua"
- },
- "zsl": {
- "english_name": "Zambian Sign Language"
- },
- "tcq": {
- "english_name": "Kaiy"
- },
- "hmz": {
- "english_name": "Hmong Shua"
- },
- "mnr": {
- "english_name": "Mono (USA)"
- },
- "ske": {
- "english_name": "Seke (Vanuatu)"
- },
- "khu": {
- "english_name": "Nkhumbi"
- },
- "nrr": {
- "english_name": "Norra"
- },
- "zmc": {
- "english_name": "Margany"
- },
- "gab": {
- "english_name": "Gabri"
- },
- "qvo": {
- "english_name": "Quechua, Napo Lowland"
- },
- "zza": {
- "english_name": "Zaza"
- },
- "gbs": {
- "english_name": "Gbe, Gbesi"
- },
- "yka": {
- "english_name": "Yakan"
- },
- "hoj": {
- "english_name": "Hadothi"
- },
- "sjb": {
- "english_name": "Sajau Basap"
- },
- "mhl": {
- "english_name": "Mauwake"
- },
- "ami": {
- "english_name": "Amis"
- },
- "mky": {
- "english_name": "Makian, East"
- },
- "byd": {
- "english_name": "Benyadu'"
- },
- "wrp": {
- "english_name": "Waropen"
- },
- "axk": {
- "english_name": "Yaka (Central African Republic)"
- },
- "bgv": {
- "english_name": "Warkay-Bipim"
- },
- "aom": {
- "english_name": "Ömie"
- },
- "pit": {
- "english_name": "Pitta Pitta"
- },
- "nyv": {
- "english_name": "Nyulnyul"
- },
- "shs": {
- "english_name": "Shuswap"
- },
- "spc": {
- "english_name": "Sapé"
- },
- "chr": {
- "english_name": "Cherokee"
- },
- "xcv": {
- "english_name": "Chuvantsy"
- },
- "psr": {
- "english_name": "Portuguese Sign Language"
- },
- "jie": {
- "english_name": "Jilbe"
- },
- "dhr": {
- "english_name": "Dhargari"
- },
- "az": {
- "english_name": "Azerbaijani",
- "name": "Azerbaijani"
- },
- "bax": {
- "english_name": "Bamun"
- },
- "ppq": {
- "english_name": "Pei"
- },
- "lbt": {
- "english_name": "Lachi"
- },
- "mti": {
- "english_name": "Maiwa (Papua New Guinea)"
- },
- "mpw": {
- "english_name": "Mapidian"
- },
- "hhi": {
- "english_name": "Hoia Hoia"
- },
- "nkj": {
- "english_name": "Nakai"
- },
- "bbl": {
- "english_name": "Bats"
- },
- "pcd": {
- "english_name": "Picard"
- },
- "tiy": {
- "english_name": "Tiruray"
- },
- "zpm": {
- "english_name": "Zapotec, Mixtepec"
- },
- "lsg": {
- "english_name": "Lyons Sign Language"
- },
- "hmg": {
- "english_name": "Hmong, Southwestern Guiyang"
- },
- "kmx": {
- "english_name": "Waboda"
- },
- "vae": {
- "english_name": "Vale"
- },
- "deq": {
- "english_name": "Dendi (Central African Republic)"
- },
- "mcl": {
- "english_name": "Macaguaje"
- },
- "bin": {
- "english_name": "Bini"
- },
- "spi": {
- "english_name": "Saponi"
- },
- "yog": {
- "english_name": "Yogad"
- },
- "eri": {
- "english_name": "Ogea"
- },
- "plv": {
- "english_name": "Palawano, Southwest"
- },
- "ysg": {
- "english_name": "Sonaga"
- },
- "dzl": {
- "english_name": "Dzalakha"
- },
- "bfy": {
- "english_name": "Bagheli"
- },
- "gu": {
- "english_name": "Gujarati",
- "name": "ગુજરાતી"
- },
- "tos": {
- "english_name": "Totonac, Highland"
- },
- "iu": {
- "english_name": "Inuktitut"
- },
- "gmz": {
- "english_name": "Mgbolizhia"
- },
- "bnd": {
- "english_name": "Banda (Indonesia)"
- },
- "muq": {
- "english_name": "Miao, Eastern Xiangxi"
- },
- "ncj": {
- "english_name": "Nahuatl, Northern Puebla"
- },
- "aat": {
- "english_name": "Albanian, Arvanitika"
- },
- "hus": {
- "english_name": "Huastec"
- },
- "zib": {
- "english_name": "Zimbabwe Sign Language"
- },
- "kyz": {
- "english_name": "Kayabí"
- },
- "tcc": {
- "english_name": "Datooga"
- },
- "zar": {
- "english_name": "Zapotec, Rincón"
- },
- "xae": {
- "english_name": "Aequian"
- },
- "zpb": {
- "english_name": "Zapotec, Yautepec"
- },
- "hos": {
- "english_name": "Ho Chi Minh City Sign Language"
- },
- "rax": {
- "english_name": "Rang"
- },
- "zh": {
- "english_name": "Chinese",
- "name": "中文"
- },
- "max": {
- "english_name": "Malay, North Moluccan"
- },
- "agv": {
- "english_name": "Dumagat, Remontado"
- },
- "nrt": {
- "english_name": "Kalapuya, Northern"
- },
- "ckt": {
- "english_name": "Chukot"
- },
- "jas": {
- "english_name": "Javanese, New Caledonian"
- },
- "ssh": {
- "english_name": "Arabic, Shihhi"
- },
- "phd": {
- "english_name": "Phudagi"
- },
- "xle": {
- "english_name": "Lemnian"
- },
- "adf": {
- "english_name": "Arabic, Dhofari"
- },
- "tuj": {
- "english_name": "Tugutil"
- },
- "nvh": {
- "english_name": "Nasarian"
- },
- "djr": {
- "english_name": "Djambarrpuyngu"
- },
- "gsp": {
- "english_name": "Wasembo"
- },
- "kiw": {
- "english_name": "Kiwai, Northeast"
- },
- "ism": {
- "english_name": "Masimasi"
- },
- "mox": {
- "english_name": "Molima"
- },
- "nxi": {
- "english_name": "Nindi"
- },
- "rjs": {
- "english_name": "Rajbanshi"
- },
- "cuj": {
- "english_name": "Mashco Piro"
- },
- "kvk": {
- "english_name": "Korean Sign Language"
- },
- "bxo": {
- "english_name": "Barikanchi"
- },
- "ged": {
- "english_name": "Gade"
- },
- "nih": {
- "english_name": "Nyiha (Tanzania)"
- },
- "hru": {
- "english_name": "Hruso"
- },
- "mlx": {
- "english_name": "Malfaxal"
- },
- "mpj": {
- "english_name": "Martu Wangka"
- },
- "mdp": {
- "english_name": "Mbala"
- },
- "yhl": {
- "english_name": "Phowa, Hlepho"
- },
- "bgi": {
- "english_name": "Giangan"
- },
- "ldl": {
- "english_name": "Kaan"
- },
- "nrx": {
- "english_name": "Ngurmbur"
- },
- "noq": {
- "english_name": "Ngongo"
- },
- "mrc": {
- "english_name": "Maricopa"
- },
- "aig": {
- "english_name": "Creole English, Antigua and Barbuda"
- },
- "fos": {
- "english_name": "Siraya"
- },
- "pok": {
- "english_name": "Pokangá"
- },
- "pif": {
- "english_name": "Pingelapese"
- },
- "buz": {
- "english_name": "Bukwen"
- },
- "kos": {
- "english_name": "Kosraean"
- },
- "isd": {
- "english_name": "Isnag"
- },
- "juk": {
- "english_name": "Wapan"
- },
- "bwm": {
- "english_name": "Biwat"
- },
- "muk": {
- "english_name": "Mugom"
- },
- "btj": {
- "english_name": "Malay, Bacanese"
- },
- "ldq": {
- "english_name": "Lufu"
- },
- "kfz": {
- "english_name": "Koromfé"
- },
- "xwa": {
- "english_name": "Kwaza"
- },
- "nxl": {
- "english_name": "Nuaulu, South"
- },
- "acw": {
- "english_name": "Arabic, Hijazi"
- },
- "xkk": {
- "english_name": "Kaco'"
- },
- "vap": {
- "english_name": "Vaiphei"
- },
- "tbn": {
- "english_name": "Tunebo, Barro Negro"
- },
- "gmv": {
- "english_name": "Gamo"
- },
- "otr": {
- "english_name": "Otoro"
- },
- "yap": {
- "english_name": "Yapese"
- },
- "giy": {
- "english_name": "Giyug"
- },
- "roe": {
- "english_name": "Ronji"
- },
- "ams": {
- "english_name": "Amami-Oshima, Southern"
- },
- "fss": {
- "english_name": "Finland-Swedish Sign Language"
- },
- "etc": {
- "english_name": "Etchemin"
- },
- "gyf": {
- "english_name": "Gungabula"
- },
- "gut": {
- "english_name": "Maléku Jaíka"
- },
- "kdh": {
- "english_name": "Tem"
- },
- "wyr": {
- "english_name": "Wayoró"
- },
- "enw": {
- "english_name": "Enwan (Akwa Ibom State)"
- },
- "bfk": {
- "english_name": "Ban Khor Sign Language"
- },
- "mfc": {
- "english_name": "Mba"
- },
- "sbh": {
- "english_name": "Sori-Harengan"
- },
- "mk": {
- "english_name": "Macedonian",
- "name": "Македонски"
- },
- "mdi": {
- "english_name": "Mamvu"
- },
- "qxq": {
- "english_name": "Qashqa'i"
- },
- "ayn": {
- "english_name": "Arabic, Sanaani"
- },
- "ple": {
- "english_name": "Palu'e"
- },
- "bom": {
- "english_name": "Berom"
- },
- "lsr": {
- "english_name": "Aruop"
- },
- "now": {
- "english_name": "Nyambo"
- },
- "kbt": {
- "english_name": "Abadi"
- },
- "zmr": {
- "english_name": "Maranunggu"
- },
- "nbi": {
- "english_name": "Naga, Mao"
- },
- "ssu": {
- "english_name": "Susuami"
- },
- "byn": {
- "english_name": "Bilin",
- "name": "Bilin"
- },
- "paz": {
- "english_name": "Pankararú"
- },
- "ymm": {
- "english_name": "Maay"
- },
- "ktv": {
- "english_name": "Katu, Eastern"
- },
- "nuz": {
- "english_name": "Nahuatl, Tlamacazapa"
- },
- "afb": {
- "english_name": "Arabic, Gulf"
- },
- "knj": {
- "english_name": "Kanjobal, Western"
- },
- "kk": {
- "english_name": "Kazakh"
- },
- "kyq": {
- "english_name": "Kenga"
- },
- "yak": {
- "english_name": "Yakama"
- },
- "cmm": {
- "english_name": "Michigamea"
- },
- "bzt": {
- "english_name": "Brithenig"
- },
- "suq": {
- "english_name": "Suri"
- },
- "pda": {
- "english_name": "Anam"
- },
- "mtn": {
- "english_name": "Matagalpa"
- },
- "kmo": {
- "english_name": "Kwoma"
- },
- "nwo": {
- "english_name": "Nauo"
- },
- "nzm": {
- "english_name": "Naga, Zeme"
- },
- "yyr": {
- "english_name": "Yir Yoront"
- },
- "nib": {
- "english_name": "Nakame"
- },
- "nkm": {
- "english_name": "Namat"
- },
- "wji": {
- "english_name": "Warji"
- },
- "tch": {
- "english_name": "Creole English, Turks And Caicos"
- },
- "cce": {
- "english_name": "Chopi"
- },
- "yki": {
- "english_name": "Yoke"
- },
- "ugb": {
- "english_name": "Kuku-Ugbanh"
- },
- "avn": {
- "english_name": "Avatime"
- },
- "kmy": {
- "english_name": "Koma"
- },
- "ayc": {
- "english_name": "Aymara, Southern"
- },
- "mqf": {
- "english_name": "Momuna"
- },
- "sbb": {
- "english_name": "Simbo"
- },
- "bzb": {
- "english_name": "Andio"
- },
- "nqm": {
- "english_name": "Ndom"
- },
- "bzc": {
- "english_name": "Malagasy, Southern Betsimisaraka"
- },
- "pcg": {
- "english_name": "Paniya"
- },
- "am": {
- "english_name": "Amharic",
- "name": "አማርኛ"
- },
- "bea": {
- "english_name": "Beaver"
- },
- "tdk": {
- "english_name": "Tambas"
- },
- "gga": {
- "english_name": "Gao"
- },
- "kfe": {
- "english_name": "Kota (India)"
- },
- "nqo": {
- "english_name": "N'Ko"
- },
- "kfx": {
- "english_name": "Pahari, Kullu"
- },
- "tbk": {
- "english_name": "Tagbanwa, Calamian"
- },
- "kjn": {
- "english_name": "Kunjen"
- },
- "axb": {
- "english_name": "Abipon"
- },
- "ywn": {
- "english_name": "Yawanawa"
- },
- "sqh": {
- "english_name": "Shau"
- },
- "xbj": {
- "english_name": "Birrpayi"
- },
- "azn": {
- "english_name": "Nahuatl, Western Durango"
- },
- "bte": {
- "english_name": "Gamo-Ningi"
- },
- "abf": {
- "english_name": "Abai Sungai"
- },
- "nkt": {
- "english_name": "Nyika (Tanzania)"
- },
- "xty": {
- "english_name": "Mixtec, Yoloxochitl"
- },
- "hmr": {
- "english_name": "Hmar"
- },
- "ipo": {
- "english_name": "Ipiko"
- },
- "ydg": {
- "english_name": "Yidgha"
- },
- "ihi": {
- "english_name": "Ihievbe"
- },
- "arx": {
- "english_name": "Aruá (Rodonia State)"
- },
- "dmm": {
- "english_name": "Dama"
- },
- "ka": {
- "english_name": "Georgian"
- },
- "sbg": {
- "english_name": "Seget"
- },
- "agc": {
- "english_name": "Agatu"
- },
- "goa": {
- "english_name": "Guro"
- },
- "dz": {
- "english_name": "Dzongkha"
- },
- "aul": {
- "english_name": "Aulua"
- },
- "trh": {
- "english_name": "Turaka"
- },
- "bor": {
- "english_name": "Borôro"
- },
- "asc": {
- "english_name": "Asmat, Casuarina Coast"
- },
- "kej": {
- "english_name": "Kadar"
- },
- "had": {
- "english_name": "Hatam"
- },
- "nmp": {
- "english_name": "Nimanbur"
- },
- "srf": {
- "english_name": "Nafi"
- },
- "tly": {
- "english_name": "Talysh"
- },
- "mvt": {
- "english_name": "Mpotovoro"
- },
- "pt": {
- "english_name": "Portuguese",
- "name": "Português"
- },
- "mxu": {
- "english_name": "Mada (Cameroon)"
- },
- "sq": {
- "english_name": "Albanian"
- },
- "nn": {
- "english_name": "Norwegian Nynorsk",
- "name": "Norwegian Nynorsk"
- },
- "gcl": {
- "english_name": "Creole English, Grenadian"
- },
- "bfe": {
- "english_name": "Betaf"
- },
- "val": {
- "english_name": "Vehes"
- },
- "aru": {
- "english_name": "Aruá (Amazonas State)"
- },
- "ght": {
- "english_name": "Kuke"
- },
- "mpo": {
- "english_name": "Miu"
- },
- "hnn": {
- "english_name": "Hanunoo"
- },
- "xni": {
- "english_name": "Ngarigu"
- },
- "vid": {
- "english_name": "Vidunda"
- },
- "kgy": {
- "english_name": "Kyerung"
- },
- "tas": {
- "english_name": "Tay Boi"
- },
- "xay": {
- "english_name": "Kayan Mahakam"
- },
- "pak": {
- "english_name": "Parakanã"
- },
- "no": {
- "english_name": "Norwegian"
- },
- "jye": {
- "english_name": "Arabic, Judeo-Yemeni"
- },
- "bhf": {
- "english_name": "Odiai"
- },
- "biu": {
- "english_name": "Biete"
- },
- "hna": {
- "english_name": "Mina (Cameroon)"
- },
- "seo": {
- "english_name": "Suarmin"
- },
- "moa": {
- "english_name": "Mwan"
- },
- "ufi": {
- "english_name": "Ufim"
- },
- "bsk": {
- "english_name": "Burushaski"
- },
- "azm": {
- "english_name": "Amuzgo, Ipalapa"
- },
- "qxt": {
- "english_name": "Quechua, Santa Ana de Tusi Pasco"
- },
- "tqo": {
- "english_name": "Toaripi"
- },
- "qxu": {
- "english_name": "Quechua, Arequipa-La Unión"
- },
- "ark": {
- "english_name": "Arikapú"
- },
- "xno": {
- "english_name": "Anglo-Norman"
- },
- "nmw": {
- "english_name": "Nimoa"
- },
- "luz": {
- "english_name": "Luri, Southern"
- },
- "os": {
- "english_name": "Ossetian"
- },
- "bem": {
- "english_name": "Bemba (Zambia)"
- },
- "tcy": {
- "english_name": "Tulu"
- },
- "crq": {
- "english_name": "Chorote, Iyo'wujwa"
- },
- "dor": {
- "english_name": "Dori'o"
- },
- "stj": {
- "english_name": "Samo, Matya"
- },
- "cho": {
- "english_name": "Choctaw"
- },
- "kr": {
- "english_name": "Kanuri"
- },
- "hrm": {
- "english_name": "Miao, Horned"
- },
- "klp": {
- "english_name": "Kamasa"
- },
- "duw": {
- "english_name": "Dusun Witu"
- },
- "yao": {
- "english_name": "Yao"
- },
- "trf": {
- "english_name": "Creole English, Trinidadian"
- },
- "tbe": {
- "english_name": "Tanimbili"
- },
- "tnm": {
- "english_name": "Tabla"
- },
- "zty": {
- "english_name": "Zapotec, Yatee"
- },
- "ccl": {
- "english_name": "Cutchi-Swahili"
- },
- "ost": {
- "english_name": "Osatu"
- },
- "gbo": {
- "english_name": "Grebo, Northern"
- },
- "bnr": {
- "english_name": "Butmas-Tur"
- },
- "bmv": {
- "english_name": "Bum"
- },
- "njb": {
- "english_name": "Naga, Nocte"
- },
- "kii": {
- "english_name": "Kitsai"
- },
- "msp": {
- "english_name": "Maritsauá"
- },
- "sdc": {
- "english_name": "Sardinian, Sassarese"
- },
- "wib": {
- "english_name": "Toussian, Southern"
- },
- "xxr": {
- "english_name": "Koropó"
- },
- "kbw": {
- "english_name": "Kaiep"
- },
- "ikp": {
- "english_name": "Ikpeshi"
- },
- "gpa": {
- "english_name": "Gupa-Abawa"
- },
- "dme": {
- "english_name": "Dugwor"
- },
- "xcw": {
- "english_name": "Coahuilteco"
- },
- "qwh": {
- "english_name": "Quechua, Huaylas Ancash"
- },
- "kfk": {
- "english_name": "Kinnauri"
- },
- "sdl": {
- "english_name": "Saudi Arabian Sign Language"
- },
- "drs": {
- "english_name": "Gedeo"
- },
- "aif": {
- "english_name": "Agi"
- },
- "sjo": {
- "english_name": "Xibe"
- },
- "aia": {
- "english_name": "Arosi"
- },
- "mpr": {
- "english_name": "Vangunu"
- },
- "rbp": {
- "english_name": "Barababaraba"
- },
- "zag": {
- "english_name": "Zaghawa"
- },
- "mta": {
- "english_name": "Manobo, Cotabato"
- },
- "boj": {
- "english_name": "Anjam"
- },
- "cdm": {
- "english_name": "Chepang"
- },
- "kqd": {
- "english_name": "Koy Sanjaq Surat"
- },
- "inb": {
- "english_name": "Inga"
- },
- "xpn": {
- "english_name": "Kapinawá"
- },
- "kuz": {
- "english_name": "Kunza"
- },
- "xmb": {
- "english_name": "Mbonga"
- },
- "caz": {
- "english_name": "Canichana"
- },
- "ibg": {
- "english_name": "Ibanag"
- },
- "pea": {
- "english_name": "Indonesian, Peranakan"
- },
- "wdd": {
- "english_name": "Wandji"
- },
- "bmj": {
- "english_name": "Bote-Majhi"
- },
- "nca": {
- "english_name": "Iyo"
- },
- "sxe": {
- "english_name": "Sighu"
- },
- "zns": {
- "english_name": "Mangas"
- },
- "tkx": {
- "english_name": "Tangko"
- },
- "anj": {
- "english_name": "Anor"
- },
- "gvc": {
- "english_name": "Guanano"
- },
- "zmk": {
- "english_name": "Mandandanyi"
- },
- "cwd": {
- "english_name": "Cree, Woods"
- },
- "fgr": {
- "english_name": "Fongoro"
- },
- "raw": {
- "english_name": "Rawang"
- },
- "lgu": {
- "english_name": "Longgu"
- },
- "cax": {
- "english_name": "Chiquitano"
- },
- "mub": {
- "english_name": "Mubi"
- },
- "phg": {
- "english_name": "Phuong"
- },
- "rer": {
- "english_name": "Rer Bare"
- },
- "wuy": {
- "english_name": "Wauyai"
- },
- "wdy": {
- "english_name": "Wadjabangayi"
- },
- "isn": {
- "english_name": "Isanzu"
- },
- "sxs": {
- "english_name": "Sasaru"
- },
- "pbg": {
- "english_name": "Paraujano"
- },
- "xac": {
- "english_name": "Kachari"
- },
- "nnk": {
- "english_name": "Nankina"
- },
- "tka": {
- "english_name": "Truká"
- },
- "alx": {
- "english_name": "Amol"
- },
- "abp": {
- "english_name": "Ayta, Abellen"
- },
- "uge": {
- "english_name": "Ughele"
- },
- "ijc": {
- "english_name": "Izon"
- },
- "szw": {
- "english_name": "Sawai"
- },
- "pms": {
- "english_name": "Piemontese"
- },
- "wun": {
- "english_name": "Bungu"
- },
- "bbo": {
- "english_name": "Bobo Madaré, Northern"
- },
- "syn": {
- "english_name": "Senaya"
- },
- "wic": {
- "english_name": "Wichita"
- },
- "kkl": {
- "english_name": "Yale, Kosarek"
- },
- "wur": {
- "english_name": "Wurrugu"
- },
- "ter": {
- "english_name": "Tereno"
- },
- "xwd": {
- "english_name": "Wadi Wadi"
- },
- "zln": {
- "english_name": "Zhuang, Lianshan"
- },
- "kbb": {
- "english_name": "Kaxuiâna"
- },
- "orz": {
- "english_name": "Ormu"
- },
- "tsp": {
- "english_name": "Toussian, Northern"
- },
- "kfy": {
- "english_name": "Kumaoni"
- },
- "ss": {
- "english_name": "Swati"
- },
- "dik": {
- "english_name": "Dinka, Southwestern"
- },
- "zte": {
- "english_name": "Zapotec, Elotepec"
- },
- "bri": {
- "english_name": "Mokpwe"
- },
- "tlj": {
- "english_name": "Talinga-Bwisi"
- },
- "wbr": {
- "english_name": "Wagdi"
- },
- "ldo": {
- "english_name": "Loo"
- },
- "kgc": {
- "english_name": "Kasseng"
- },
- "kes": {
- "english_name": "Kugbo"
- },
- "fng": {
- "english_name": "Fanagalo"
- },
- "btl": {
- "english_name": "Bhatola"
- },
- "cuh": {
- "english_name": "Chuka"
- },
- "pam": {
- "english_name": "Pampanga"
- },
- "bix": {
- "english_name": "Bijori"
- },
- "vmm": {
- "english_name": "Mixtec, Mitlatongo"
- },
- "kap": {
- "english_name": "Bezhta"
- },
- "or": {
- "english_name": "Oriya (macrolanguage)",
- "name": "Oriya (macrolanguage)"
- },
- "gwu": {
- "english_name": "Guwamu"
- },
- "bkq": {
- "english_name": "Bakairí"
- },
- "mtv": {
- "english_name": "Asaro'o"
- },
- "mgm": {
- "english_name": "Mambae"
- },
- "kvh": {
- "english_name": "Komodo"
- },
- "ymh": {
- "english_name": "Mili"
- },
- "nzi": {
- "english_name": "Nzima"
- },
- "ldp": {
- "english_name": "Tso"
- },
- "yne": {
- "english_name": "Lang'e"
- },
- "hto": {
- "english_name": "Huitoto, Minica"
- },
- "lsd": {
- "english_name": "Lishana Deni"
- },
- "kqu": {
- "english_name": "Seroa"
- },
- "bog": {
- "english_name": "Bamako Sign Language"
- },
- "arh": {
- "english_name": "Arhuaco"
- },
- "ksn": {
- "english_name": "Kasiguranin"
- },
- "mzv": {
- "english_name": "Manza"
- },
- "jku": {
- "english_name": "Labir"
- },
- "jek": {
- "english_name": "Jeri Kuo"
- },
- "nmz": {
- "english_name": "Nawdm"
- },
- "kpk": {
- "english_name": "Kpan"
- },
- "bzi": {
- "english_name": "Bisu"
- },
- "tif": {
- "english_name": "Tifal"
- },
- "zmv": {
- "english_name": "Mbariman-Gudhinma"
- },
- "ggb": {
- "english_name": "Gbii"
- },
- "bjm": {
- "english_name": "Bajelani"
- },
- "jio": {
- "english_name": "Jiamao"
- },
- "otd": {
- "english_name": "Ot Danum"
- },
- "nna": {
- "english_name": "Nyangumarta"
- },
- "fal": {
- "english_name": "Fali, South"
- },
- "mth": {
- "english_name": "Munggui"
- },
- "mhw": {
- "english_name": "Mbukushu"
- },
- "mvu": {
- "english_name": "Marfa"
- },
- "quh": {
- "english_name": "Quechua, South Bolivian"
- },
- "nkx": {
- "english_name": "Nkoroo"
- },
- "huz": {
- "english_name": "Hunzib"
- },
- "src": {
- "english_name": "Sardinian, Logudorese"
- },
- "amy": {
- "english_name": "Ami"
- },
- "caa": {
- "english_name": "Chortí"
- },
- "wbe": {
- "english_name": "Waritai"
- },
- "gbv": {
- "english_name": "Gbanu"
- },
- "fod": {
- "english_name": "Foodo"
- },
- "och": {
- "english_name": "Chinese, Old"
- },
- "kgq": {
- "english_name": "Kamoro"
- },
- "lgk": {
- "english_name": "Lingarak"
- },
- "kyd": {
- "english_name": "Karey"
- },
- "laz": {
- "english_name": "Aribwatsa"
- },
- "xtu": {
- "english_name": "Mixtec, Cuyamecalco"
- },
- "bjg": {
- "english_name": "Bidyogo"
- },
- "rea": {
- "english_name": "Rerau"
- },
- "ltu": {
- "english_name": "Latu"
- },
- "noc": {
- "english_name": "Nuk"
- },
- "npa": {
- "english_name": "Nar Phu"
- },
- "lhs": {
- "english_name": "Mlahsö"
- },
- "ydd": {
- "english_name": "Yiddish, Eastern"
- },
- "bfm": {
- "english_name": "Mmen"
- },
- "bpn": {
- "english_name": "Dzao Min"
- },
- "beu": {
- "english_name": "Blagar"
- },
- "adr": {
- "english_name": "Adonara"
- },
- "ajn": {
- "english_name": "Andajin"
- },
- "cov": {
- "english_name": "Cao Miao"
- },
- "spb": {
- "english_name": "Sepa (Indonesia)"
- },
- "smr": {
- "english_name": "Simeulue"
- },
- "aad": {
- "english_name": "Amal"
- },
- "kkp": {
- "english_name": "Gugubera"
- },
- "xsq": {
- "english_name": "Makhuwa-Saka"
- },
- "prh": {
- "english_name": "Porohanon"
- },
- "ky": {
- "english_name": "Kirghiz"
- },
- "pio": {
- "english_name": "Piapoco"
- },
- "rnn": {
- "english_name": "Roon"
- },
- "skk": {
- "english_name": "Sok"
- },
- "wwo": {
- "english_name": "Wetamut"
- },
- "brm": {
- "english_name": "Barambu"
- },
- "kfl": {
- "english_name": "Kung"
- },
- "nys": {
- "english_name": "Nyunga"
- },
- "bdo": {
- "english_name": "Morom"
- },
- "bui": {
- "english_name": "Bongili"
- },
- "nrc": {
- "english_name": "Noric"
- },
- "mlo": {
- "english_name": "Mlomp"
- },
- "mpp": {
- "english_name": "Migabac"
- },
- "pcj": {
- "english_name": "Parenga"
- },
- "abe": {
- "english_name": "Abnaki, Western"
- },
- "cml": {
- "english_name": "Campalagian"
- },
- "mww": {
- "english_name": "Hmong Daw"
- },
- "aai": {
- "english_name": "Arifama-Miniafia"
- },
- "nol": {
- "english_name": "Nomlaki"
- },
- "nzb": {
- "english_name": "Njebi"
- },
- "kmi": {
- "english_name": "Kami (Nigeria)"
- },
- "nsw": {
- "english_name": "Navut"
- },
- "xlg": {
- "english_name": "Ligurian (Ancient)"
- },
- "cnx": {
- "english_name": "Cornish, Middle"
- },
- "fuv": {
- "english_name": "Fulfulde, Nigerian"
- },
- "deg": {
- "english_name": "Degema"
- },
- "knr": {
- "english_name": "Kaningra"
- },
- "elu": {
- "english_name": "Elu"
- },
- "mod": {
- "english_name": "Mobilian"
- },
- "ich": {
- "english_name": "Etkywan"
- },
- "pld": {
- "english_name": "Polari"
- },
- "ncs": {
- "english_name": "Nicaraguan Sign Language"
- },
- "zbt": {
- "english_name": "Batui"
- },
- "mdc": {
- "english_name": "Male (Papua New Guinea)"
- },
- "tck": {
- "english_name": "Tchitchege"
- },
- "mrb": {
- "english_name": "Marino"
- },
- "kya": {
- "english_name": "Kwaya"
- },
- "ytw": {
- "english_name": "Yout Wam"
- },
- "hig": {
- "english_name": "Kamwe"
- },
- "bxu": {
- "english_name": "Buriat, China"
- },
- "shy": {
- "english_name": "Tachawit"
- },
- "see": {
- "english_name": "Seneca"
- },
- "und": {
- "english_name": "Undetermined"
- },
- "kix": {
- "english_name": "Naga, Khiamniungan"
- },
- "bbt": {
- "english_name": "Mburku"
- },
- "knx": {
- "english_name": "Kendayan"
- },
- "ctl": {
- "english_name": "Chinantec, Tlacoatzintepec"
- },
- "wwb": {
- "english_name": "Wakabunga"
- },
- "fat": {
- "english_name": "Fanti"
- },
- "ml": {
- "english_name": "Malayalam"
- },
- "jml": {
- "english_name": "Jumli"
- },
- "trt": {
- "english_name": "Tunggare"
- },
- "nhq": {
- "english_name": "Nahuatl, Huaxcaleca"
- },
- "sru": {
- "english_name": "Suruí"
- },
- "tdu": {
- "english_name": "Dusun, Tempasuk"
- },
- "nxg": {
- "english_name": "Ngad'a"
- },
- "plk": {
- "english_name": "Shina, Kohistani"
- },
- "mhi": {
- "english_name": "Ma'di"
- },
- "sqk": {
- "english_name": "Albanian Sign Language"
- },
- "sfw": {
- "english_name": "Sehwi"
- },
- "avv": {
- "english_name": "Avá-Canoeiro"
- },
- "hrx": {
- "english_name": "Hunsrik"
- },
- "mec": {
- "english_name": "Mara"
- },
- "pgk": {
- "english_name": "Rerep"
- },
- "kiv": {
- "english_name": "Kimbu"
- },
- "omx": {
- "english_name": "Mon, Old"
- },
- "apf": {
- "english_name": "Agta, Pahanan"
- },
- "cug": {
- "english_name": "Cung"
- },
- "gay": {
- "english_name": "Gayo"
- },
- "naa": {
- "english_name": "Namla"
- },
- "mma": {
- "english_name": "Mama"
- },
- "tsm": {
- "english_name": "Turkish Sign Language"
- },
- "moc": {
- "english_name": "Mocoví"
- },
- "ian": {
- "english_name": "Iatmul"
- },
- "mjn": {
- "english_name": "Ma (Papua New Guinea)"
- },
- "has": {
- "english_name": "Haisla"
- },
- "bxg": {
- "english_name": "Bangala"
- },
- "tjw": {
- "english_name": "Djabwurrung"
- },
- "xld": {
- "english_name": "Lydian"
- },
- "kgt": {
- "english_name": "Somyev"
- },
- "twt": {
- "english_name": "Turiwára"
- },
- "drn": {
- "english_name": "Damar, West"
- },
- "akl": {
- "english_name": "Aklanon"
- },
- "brf": {
- "english_name": "Bera"
- },
- "ads": {
- "english_name": "Adamorobe Sign Language"
- },
- "xqt": {
- "english_name": "Qatabanian"
- },
- "kyr": {
- "english_name": "Kuruáya"
- },
- "nhx": {
- "english_name": "Nahuatl, Isthmus-Mecayapan"
- },
- "hnu": {
- "english_name": "Hung"
- },
- "zga": {
- "english_name": "Kinga"
- },
- "vro": {
- "english_name": "Võro"
- },
- "ing": {
- "english_name": "Degexit'an"
- },
- "oym": {
- "english_name": "Wayampi"
- },
- "kzz": {
- "english_name": "Kalabra"
- },
- "mwc": {
- "english_name": "Are"
- },
- "lee": {
- "english_name": "Lyélé"
- },
- "ygi": {
- "english_name": "Yiningayi"
- },
- "puw": {
- "english_name": "Puluwatese"
- },
- "juh": {
- "english_name": "Hõne"
- },
- "koi": {
- "english_name": "Komi-Permyak"
- },
- "noa": {
- "english_name": "Woun Meu"
- },
- "hoz": {
- "english_name": "Hozo"
- },
- "xmw": {
- "english_name": "Malagasy, Tsimihety"
- },
- "ckz": {
- "english_name": "Cakchiquel-Quiché Mixed Language"
- },
- "gai": {
- "english_name": "Borei"
- },
- "tlr": {
- "english_name": "Talise"
- },
- "pho": {
- "english_name": "Phunoi"
- },
- "rri": {
- "english_name": "Ririo"
- },
- "dza": {
- "english_name": "Tunzu"
- },
- "grw": {
- "english_name": "Gweda"
- },
- "bjx": {
- "english_name": "Itneg, Banao"
- },
- "sig": {
- "english_name": "Paasaal"
- },
- "lso": {
- "english_name": "Laos Sign Language"
- },
- "mcu": {
- "english_name": "Mambila, Cameroon"
- },
- "bnj": {
- "english_name": "Tawbuid, Eastern"
- },
- "mpa": {
- "english_name": "Mpoto"
- },
- "ywt": {
- "english_name": "Lalo, Xishanba"
- },
- "zps": {
- "english_name": "Zapotec, Coatlán"
- },
- "prq": {
- "english_name": "Ashéninka Perené"
- },
- "kgu": {
- "english_name": "Kobol"
- },
- "gaw": {
- "english_name": "Nobonob"
- },
- "kxw": {
- "english_name": "Konai"
- },
- "cum": {
- "english_name": "Cumeral"
- },
- "mra": {
- "english_name": "Mlabri"
- },
- "tjg": {
- "english_name": "Tunjung"
- },
- "dig": {
- "english_name": "Digo"
- },
- "nhu": {
- "english_name": "Noone"
- },
- "yln": {
- "english_name": "Buyang, Langnian"
- },
- "uvh": {
- "english_name": "Uri"
- },
- "dar": {
- "english_name": "Dargwa"
- },
- "psa": {
- "english_name": "Awyu, Asue"
- },
- "btz": {
- "english_name": "Batak Alas-Kluet"
- },
- "yax": {
- "english_name": "Yauma"
- },
- "ret": {
- "english_name": "Retta"
- },
- "goi": {
- "english_name": "Gobasi"
- },
- "zsa": {
- "english_name": "Sarasira"
- },
- "pkh": {
- "english_name": "Pankhu"
- },
- "mng": {
- "english_name": "Mnong, Eastern"
- },
- "hoa": {
- "english_name": "Hoava"
- },
- "csk": {
- "english_name": "Jola-Kasa"
- },
- "ped": {
- "english_name": "Mala (Papua New Guinea)"
- },
- "yal": {
- "english_name": "Yalunka"
- },
- "bif": {
- "english_name": "Biafada"
- },
- "mpv": {
- "english_name": "Mungkip"
- },
- "rms": {
- "english_name": "Romanian Sign Language"
- },
- "wnu": {
- "english_name": "Usan"
- },
- "xab": {
- "english_name": "Sambe"
- },
- "pmi": {
- "english_name": "Pumi, Northern"
- },
- "cut": {
- "english_name": "Cuicatec, Teutila"
- },
- "nmr": {
- "english_name": "Nimbari"
- },
- "srx": {
- "english_name": "Sirmauri"
- },
- "alz": {
- "english_name": "Alur"
- },
- "xtg": {
- "english_name": "Gaulish, Transalpine"
- },
- "kcx": {
- "english_name": "Kachama-Ganjule"
- },
- "skd": {
- "english_name": "Miwok, Southern Sierra"
- },
- "wux": {
- "english_name": "Wulna"
- },
- "dnn": {
- "english_name": "Dzùùngoo"
- },
- "jbo": {
- "english_name": "Lojban"
- },
- "irr": {
- "english_name": "Ir"
- },
- "tix": {
- "english_name": "Tiwa, Southern"
- },
- "tun": {
- "english_name": "Tunica"
- },
- "doe": {
- "english_name": "Doe"
- },
- "crv": {
- "english_name": "Chaura"
- },
- "apb": {
- "english_name": "Sa'a"
- },
- "bmk": {
- "english_name": "Ghayavi"
- },
- "mdx": {
- "english_name": "Dizin"
- },
- "bcl": {
- "english_name": "Bikol, Central"
- },
- "kbk": {
- "english_name": "Koiari, Grass"
- },
- "aap": {
- "english_name": "Arára, Pará"
- },
- "bob": {
- "english_name": "Aweer"
- },
- "kqh": {
- "english_name": "Kisankasa"
- },
- "wa": {
- "english_name": "Walloon",
- "name": "Walon"
- },
- "mwu": {
- "english_name": "Mittu"
- },
- "vgt": {
- "english_name": "Vlaamse Gebarentaal"
- },
- "lcs": {
- "english_name": "Lisabata-Nuniali"
- },
- "ngk": {
- "english_name": "Dalabon"
- },
- "kel": {
- "english_name": "Kela (Democratic Republic of Congo)"
- },
- "cpa": {
- "english_name": "Chinantec, Palantla"
- },
- "sfm": {
- "english_name": "Miao, Small Flowery"
- },
- "zmw": {
- "english_name": "Mbo (Democratic Republic of Congo)"
- },
- "sxn": {
- "english_name": "Sangir"
- },
- "pup": {
- "english_name": "Pulabu"
- },
- "ify": {
- "english_name": "Kallahan, Keley-I"
- },
- "bdy": {
- "english_name": "Bandjalang"
- },
- "ynn": {
- "english_name": "Yana"
- },
- "ubi": {
- "english_name": "Ubi"
- },
- "hem": {
- "english_name": "Hemba"
- },
- "pdi": {
- "english_name": "Pa Di"
- },
- "nvm": {
- "english_name": "Namiae"
- },
- "kxb": {
- "english_name": "Krobu"
- },
- "meq": {
- "english_name": "Merey"
- },
- "mim": {
- "english_name": "Mixtec, Alacatlatzala"
- },
- "ae": {
- "english_name": "Avestan"
- },
- "zpq": {
- "english_name": "Zapotec, Zoogocho"
- },
- "mge": {
- "english_name": "Mango"
- },
- "xaa": {
- "english_name": "Arabic, Andalusian"
- },
- "zku": {
- "english_name": "Kaurna"
- },
- "ore": {
- "english_name": "Orejón"
- },
- "ytp": {
- "english_name": "Thopho"
- },
- "kbl": {
- "english_name": "Kanembu"
- },
- "cet": {
- "english_name": "Centúúm"
- },
- "et": {
- "english_name": "Estonian",
- "name": "Eesti"
- },
- "tkg": {
- "english_name": "Malagasy, Tesaka"
- },
- "kry": {
- "english_name": "Kryts"
- },
- "ddw": {
- "english_name": "Dawera-Daweloor"
- },
- "jae": {
- "english_name": "Yabem"
- },
- "hmy": {
- "english_name": "Hmong, Southern Guiyang"
- },
- "bsg": {
- "english_name": "Bashkardi"
- },
- "geh": {
- "english_name": "German, Hutterite"
- },
- "tij": {
- "english_name": "Tilung"
- },
- "tic": {
- "english_name": "Tira"
- },
- "iwm": {
- "english_name": "Iwam"
- },
- "swq": {
- "english_name": "Sharwa"
- },
- "auj": {
- "english_name": "Awjilah"
- },
- "la": {
- "english_name": "Latin"
- },
- "njy": {
- "english_name": "Njyem"
- },
- "abh": {
- "english_name": "Arabic, Tajiki"
- },
- "lan": {
- "english_name": "Laru"
- },
- "aya": {
- "english_name": "Awar"
- },
- "paq": {
- "english_name": "Parya"
- },
- "yae": {
- "english_name": "Pumé"
- },
- "pur": {
- "english_name": "Puruborá"
- },
- "yml": {
- "english_name": "Iamalele"
- },
- "alm": {
- "english_name": "Amblong"
- },
- "gyi": {
- "english_name": "Gyele"
- },
- "zbc": {
- "english_name": "Berawan, Central"
- },
- "itx": {
- "english_name": "Itik"
- },
- "wxw": {
- "english_name": "Wardandi"
- },
- "cs": {
- "english_name": "Czech",
- "name": "čeština"
- },
- "nkq": {
- "english_name": "Nkami"
- },
- "unn": {
- "english_name": "Kurnai"
- },
- "tql": {
- "english_name": "Lehali"
- },
- "baa": {
- "english_name": "Babatana"
- },
- "bwo": {
- "english_name": "Boro (Ethiopia)"
- },
- "mks": {
- "english_name": "Mixtec, Silacayoapan"
- },
- "cwg": {
- "english_name": "Chewong"
- },
- "ukq": {
- "english_name": "Ukwa"
- },
- "shh": {
- "english_name": "Shoshoni"
- },
- "tca": {
- "english_name": "Ticuna"
- },
- "mbq": {
- "english_name": "Maisin"
- },
- "xth": {
- "english_name": "Yitha Yitha"
- },
- "dln": {
- "english_name": "Darlong"
- },
- "srh": {
- "english_name": "Sarikoli"
- },
- "bol": {
- "english_name": "Bole"
- },
- "dzn": {
- "english_name": "Dzando"
- },
- "nr": {
- "english_name": "Ndebele, South"
- },
- "hmm": {
- "english_name": "Hmong, Central Mashan"
- },
- "enn": {
- "english_name": "Engenni"
- },
- "hsn": {
- "english_name": "Chinese, Xiang"
- },
- "aps": {
- "english_name": "Arop-Sissano"
- },
- "kcn": {
- "english_name": "Nubi"
- },
- "tww": {
- "english_name": "Tuwari"
- },
- "prf": {
- "english_name": "Paranan"
- },
- "anm": {
- "english_name": "Anal"
- },
- "yey": {
- "english_name": "Yeyi"
- },
- "suk": {
- "english_name": "Sukuma"
- },
- "adl": {
- "english_name": "Galo"
- },
- "dsn": {
- "english_name": "Dusner"
- },
- "oc": {
- "english_name": "Occitan (post 1500)",
- "name": "Occitan (aprèp 1500)"
- },
- "cpg": {
- "english_name": "Greek, Cappadocian"
- },
- "gez": {
- "english_name": "Geez",
- "name": "ግዕዝኛ"
- },
- "aal": {
- "english_name": "Afade"
- },
- "mll": {
- "english_name": "Malua Bay"
- },
- "tne": {
- "english_name": "Kallahan, Tinoc"
- },
- "ses": {
- "english_name": "Songhai, Koyraboro Senni"
- },
- "kvn": {
- "english_name": "Kuna, Border"
- },
- "bdf": {
- "english_name": "Biage"
- },
- "ckq": {
- "english_name": "Kajakse"
- },
- "bnv": {
- "english_name": "Bonerif"
- },
- "qur": {
- "english_name": "Quechua, Yanahuanca Pasco"
- },
- "mzp": {
- "english_name": "Movima"
- },
- "kiz": {
- "english_name": "Kisi"
- },
- "hkk": {
- "english_name": "Hunjara-Kaina Ke"
- },
- "urw": {
- "english_name": "Sop"
- },
- "kis": {
- "english_name": "Kis"
- },
- "lel": {
- "english_name": "Lele (Democratic Republic of Congo)"
- },
- "xxb": {
- "english_name": "Boro (Ghana)"
- },
- "nua": {
- "english_name": "Yuanga"
- },
- "tuy": {
- "english_name": "Tugen"
- },
- "boo": {
- "english_name": "Bozo, Tiemacèwè"
- },
- "shx": {
- "english_name": "She"
- },
- "dmo": {
- "english_name": "Kemedzung"
- },
- "vmh": {
- "english_name": "Maraghei"
- },
- "xal": {
- "english_name": "Kalmyk"
- },
- "sle": {
- "english_name": "Sholaga"
- },
- "xny": {
- "english_name": "Nyiyaparli"
- },
- "coj": {
- "english_name": "Cochimi"
- },
- "lva": {
- "english_name": "Maku'a"
- },
- "ant": {
- "english_name": "Antakarinya"
- },
- "kti": {
- "english_name": "Muyu, North"
- },
- "ude": {
- "english_name": "Udihe"
- },
- "dww": {
- "english_name": "Dawawa"
- },
- "aob": {
- "english_name": "Abom"
- },
- "gdu": {
- "english_name": "Gudu"
- },
- "ceg": {
- "english_name": "Chamacoco"
- },
- "mrk": {
- "english_name": "Hmwaveke"
- },
- "nle": {
- "english_name": "Nyala, East"
- },
- "kil": {
- "english_name": "Kariya"
- },
- "sdn": {
- "english_name": "Sardinian, Gallurese"
- },
- "cin": {
- "english_name": "Cinta Larga"
- },
- "cop": {
- "english_name": "Coptic"
- },
- "soc": {
- "english_name": "So (Democratic Republic of Congo)"
- },
- "ayk": {
- "english_name": "Akuku"
- },
- "mfb": {
- "english_name": "Bangka"
- },
- "nqy": {
- "english_name": "Naga, Akyaung Ari"
- },
- "cux": {
- "english_name": "Cuicatec, Tepeuxila"
- },
- "zkb": {
- "english_name": "Koibal"
- },
- "vo": {
- "english_name": "Volapük"
- },
- "das": {
- "english_name": "Daho-Doo"
- },
- "wlk": {
- "english_name": "Wailaki"
- },
- "reg": {
- "english_name": "Kara (Tanzania)"
- },
- "mlq": {
- "english_name": "Maninkakan, Western"
- },
- "loi": {
- "english_name": "Loma (Côte d'Ivoire)"
- },
- "bna": {
- "english_name": "Bonerate"
- },
- "tht": {
- "english_name": "Tahltan"
- },
- "szv": {
- "english_name": "Isu (Fako Division)"
- },
- "pyn": {
- "english_name": "Poyanáwa"
- },
- "phm": {
- "english_name": "Phimbi"
- },
- "lbm": {
- "english_name": "Lodhi"
- },
- "cks": {
- "english_name": "Tayo"
- },
- "zkv": {
- "english_name": "Krevinian"
- },
- "nlv": {
- "english_name": "Nahuatl, Orizaba"
- },
- "isr": {
- "english_name": "Israeli Sign Language"
- },
- "fbl": {
- "english_name": "Bikol, West Albay"
- },
- "mmc": {
- "english_name": "Mazahua, Michoacán"
- },
- "umi": {
- "english_name": "Ukit"
- },
- "nha": {
- "english_name": "Nhanda"
- },
- "ypa": {
- "english_name": "Phala"
- },
- "cbg": {
- "english_name": "Chimila"
- },
- "xda": {
- "english_name": "Darkinyung"
- },
- "pdo": {
- "english_name": "Padoe"
- },
- "ipi": {
- "english_name": "Ipili"
- },
- "rit": {
- "english_name": "Ritarungo"
- },
- "ekc": {
- "english_name": "Karnic, Eastern"
- },
- "kav": {
- "english_name": "Katukína"
- },
- "tep": {
- "english_name": "Tepecano"
- },
- "yox": {
- "english_name": "Yoron"
- },
- "yat": {
- "english_name": "Yambeta"
- },
- "sgp": {
- "english_name": "Singpho"
- },
- "tnw": {
- "english_name": "Tonsawang"
- },
- "nuo": {
- "english_name": "Nguôn"
- },
- "kig": {
- "english_name": "Kimaama"
- },
- "cpu": {
- "english_name": "Ashéninka, Pichis"
- },
- "klu": {
- "english_name": "Klao"
- },
- "mhu": {
- "english_name": "Digaro-Mishmi"
- },
- "mns": {
- "english_name": "Mansi"
- },
- "sxb": {
- "english_name": "Suba"
- },
- "krz": {
- "english_name": "Kanum, Sota"
- },
- "nlx": {
- "english_name": "Nahali"
- },
- "xsr": {
- "english_name": "Sherpa"
- },
- "mpz": {
- "english_name": "Mpi"
- },
- "tdy": {
- "english_name": "Tadyawan"
- },
- "sqo": {
- "english_name": "Sorkhei"
- },
- "gia": {
- "english_name": "Kitja"
- },
- "gnq": {
- "english_name": "Gana"
- },
- "nwm": {
- "english_name": "Nyamusa-Molo"
- },
- "cbo": {
- "english_name": "Izora"
- },
- "csh": {
- "english_name": "Chin, Asho"
- },
- "txy": {
- "english_name": "Malagasy, Tanosy"
- },
- "vut": {
- "english_name": "Vute"
- },
- "yih": {
- "english_name": "Yiddish, Western"
- },
- "ynu": {
- "english_name": "Yahuna"
- },
- "dum": {
- "english_name": "Dutch, Middle (ca. 1050-1350)"
- },
- "fmp": {
- "english_name": "Fe'fe'"
- },
- "nup": {
- "english_name": "Nupe-Nupe-Tako"
- },
- "kqw": {
- "english_name": "Kandas"
- },
- "xup": {
- "english_name": "Umpqua, Upper"
- },
- "nsc": {
- "english_name": "Nshi"
- },
- "wnb": {
- "english_name": "Wanambre"
- },
- "pez": {
- "english_name": "Penan, Eastern"
- },
- "bdn": {
- "english_name": "Baldemu"
- },
- "ssr": {
- "english_name": "Swiss-French Sign Language"
- },
- "wir": {
- "english_name": "Wiraféd"
- },
- "tzo": {
- "english_name": "Tzotzil"
- },
- "lrr": {
- "english_name": "Yamphu, Southern"
- },
- "umu": {
- "english_name": "Munsee"
- },
- "bvo": {
- "english_name": "Bolgo"
- },
- "kep": {
- "english_name": "Kaikadi"
- },
- "qxs": {
- "english_name": "Qiang, Southern"
- },
- "kbs": {
- "english_name": "Kande"
- },
- "amv": {
- "english_name": "Ambelau"
- },
- "zca": {
- "english_name": "Zapotec, Coatecas Altas"
- },
- "bun": {
- "english_name": "Sherbro"
- },
- "koy": {
- "english_name": "Koyukon"
- },
- "kaj": {
- "english_name": "Jju"
- },
- "aky": {
- "english_name": "Aka-Kol"
- },
- "une": {
- "english_name": "Uneme"
- },
- "bgx": {
- "english_name": "Turkish, Balkan Gagauz"
- },
- "apr": {
- "english_name": "Arop-Lokep"
- },
- "bir": {
- "english_name": "Bisorio"
- },
- "aes": {
- "english_name": "Alsea"
- },
- "pko": {
- "english_name": "Pökoot"
- },
- "lkn": {
- "english_name": "Lakon"
- },
- "mdu": {
- "english_name": "Mboko"
- },
- "sa": {
- "english_name": "Sanskrit"
- },
- "vmq": {
- "english_name": "Mixtec, Soyaltepec"
- },
- "nei": {
- "english_name": "Hittite, Neo-"
- },
- "moe": {
- "english_name": "Montagnais"
- },
- "huv": {
- "english_name": "Huave, San Mateo Del Mar"
- },
- "mgl": {
- "english_name": "Maleu-Kilenge"
- },
- "ssi": {
- "english_name": "Sansi"
- },
- "gvj": {
- "english_name": "Guajá"
- },
- "jil": {
- "english_name": "Jilim"
- },
- "dil": {
- "english_name": "Dilling"
- },
- "csw": {
- "english_name": "Cree, Swampy"
- },
- "aud": {
- "english_name": "Anuta"
- },
- "rkb": {
- "english_name": "Rikbaktsa"
- },
- "ggd": {
- "english_name": "Gugadj"
- },
- "awk": {
- "english_name": "Awabakal"
- },
- "bvz": {
- "english_name": "Bauzi"
- },
- "eko": {
- "english_name": "Koti"
- },
- "dyu": {
- "english_name": "Dyula"
- },
- "snb": {
- "english_name": "Sebuyau"
- },
- "ruu": {
- "english_name": "Lobu, Lanas"
- },
- "har": {
- "english_name": "Harari"
- },
- "twn": {
- "english_name": "Twendi"
- },
- "hne": {
- "english_name": "Chhattisgarhi"
- },
- "rav": {
- "english_name": "Sampang"
- },
- "dec": {
- "english_name": "Dagik"
- },
- "mqv": {
- "english_name": "Mosimo"
- },
- "hps": {
- "english_name": "Hawai'i Pidgin Sign Language"
- },
- "avk": {
- "english_name": "Kotava"
- },
- "tjl": {
- "english_name": "Tai Laing"
- },
- "pmc": {
- "english_name": "Palumata"
- },
- "xyy": {
- "english_name": "Yorta Yorta"
- },
- "snl": {
- "english_name": "Sangil"
- },
- "cae": {
- "english_name": "Lehar"
- },
- "pll": {
- "english_name": "Palaung, Shwe"
- },
- "bxp": {
- "english_name": "Bebil"
- },
- "mzn": {
- "english_name": "Mazanderani"
- },
- "kqv": {
- "english_name": "Okolod"
- },
- "nyg": {
- "english_name": "Nyindu"
- },
- "pmj": {
- "english_name": "Pumi, Southern"
- },
- "axl": {
- "english_name": "Aranda, Lower Southern"
- },
- "enh": {
- "english_name": "Enets, Tundra"
- },
- "swb": {
- "english_name": "Comorian, Maore"
- },
- "tju": {
- "english_name": "Tjurruru"
- },
- "fwa": {
- "english_name": "Fwâi"
- },
- "tgc": {
- "english_name": "Tigak"
- },
- "aan": {
- "english_name": "Anambé"
- },
- "krb": {
- "english_name": "Karkin"
- },
- "kww": {
- "english_name": "Kwinti"
- },
- "gwb": {
- "english_name": "Gwa"
- },
- "bql": {
- "english_name": "Bilakura"
- },
- "igw": {
- "english_name": "Igwe"
- },
- "ukl": {
- "english_name": "Ukrainian Sign Language"
- },
- "kha": {
- "english_name": "Khasi"
- },
- "lec": {
- "english_name": "Leco"
- },
- "cac": {
- "english_name": "Chuj"
- },
- "sce": {
- "english_name": "Dongxiang"
- },
- "dgw": {
- "english_name": "Daungwurrung"
- },
- "ana": {
- "english_name": "Andaqui"
- },
- "xyj": {
- "english_name": "Mayi-Yapi"
- },
- "cco": {
- "english_name": "Chinantec, Comaltepec"
- },
- "kcz": {
- "english_name": "Konongo"
- },
- "adx": {
- "english_name": "Tibetan, Amdo"
- },
- "keg": {
- "english_name": "Tese"
- },
- "sbr": {
- "english_name": "Sembakung Murut"
- },
- "hks": {
- "english_name": "Hong Kong Sign Language"
- },
- "xkc": {
- "english_name": "Kho'ini"
- },
- "mew": {
- "english_name": "Maaka"
- },
- "kxq": {
- "english_name": "Kanum, Smärky"
- },
- "cfm": {
- "english_name": "Chin, Falam"
- },
- "mud": {
- "english_name": "Aleut, Mednyj"
- },
- "mhk": {
- "english_name": "Mungaka"
- },
- "pci": {
- "english_name": "Duruwa"
- },
- "gao": {
- "english_name": "Gants"
- },
- "lib": {
- "english_name": "Likum"
- },
- "mym": {
- "english_name": "Me'en"
- },
- "vif": {
- "english_name": "Vili"
- },
- "bqv": {
- "english_name": "Koro Wachi"
- },
- "sog": {
- "english_name": "Sogdian"
- },
- "atg": {
- "english_name": "Ivbie North-Okpela-Arhe"
- },
- "gyb": {
- "english_name": "Garus"
- },
- "ghr": {
- "english_name": "Ghera"
- },
- "nlj": {
- "english_name": "Nyali"
- },
- "sno": {
- "english_name": "Snohomish"
- },
- "gwm": {
- "english_name": "Awngthim"
- },
- "nbr": {
- "english_name": "Numana-Nunku-Gbantu-Numbu"
- },
- "duj": {
- "english_name": "Dhuwal"
- },
- "btw": {
- "english_name": "Butuanon"
- },
- "nfl": {
- "english_name": "Ayiwo"
- },
- "pbi": {
- "english_name": "Parkwa"
- },
- "mvi": {
- "english_name": "Miyako"
- },
- "sbm": {
- "english_name": "Sagala"
- },
- "onk": {
- "english_name": "One, Kabore"
- },
- "cib": {
- "english_name": "Gbe, Ci"
- },
- "kxo": {
- "english_name": "Kanoé"
- },
- "uur": {
- "english_name": "Ura (Vanuatu)"
- },
- "ysr": {
- "english_name": "Yupik, Sirenik"
- },
- "sbs": {
- "english_name": "Subiya"
- },
- "skf": {
- "english_name": "Sakirabiá"
- },
- "how": {
- "english_name": "Honi"
- },
- "slt": {
- "english_name": "Sila"
- },
- "kjz": {
- "english_name": "Bumthangkha"
- },
- "gge": {
- "english_name": "Guragone"
- },
- "twg": {
- "english_name": "Tereweng"
- },
- "rmf": {
- "english_name": "Romani, Kalo Finnish"
- },
- "yer": {
- "english_name": "Tarok"
- },
- "jut": {
- "english_name": "Jutish"
- },
- "tfr": {
- "english_name": "Teribe"
- },
- "bfq": {
- "english_name": "Badaga"
- },
- "mca": {
- "english_name": "Maca"
- },
- "hae": {
- "english_name": "Oromo, Eastern"
- },
- "bce": {
- "english_name": "Bamenyam"
- },
- "itl": {
- "english_name": "Itelmen"
- },
- "ylm": {
- "english_name": "Limi"
- },
- "oso": {
- "english_name": "Ososo"
- },
- "mzl": {
- "english_name": "Mixe, Mazatlán"
- },
- "xiv": {
- "english_name": "Indus Valley Language"
- },
- "kwe": {
- "english_name": "Kwerba"
- },
- "utr": {
- "english_name": "Etulo"
- },
- "moi": {
- "english_name": "Mboi"
- },
- "kug": {
- "english_name": "Kupa"
- },
- "ano": {
- "english_name": "Andoque"
- },
- "kpl": {
- "english_name": "Kpala"
- },
- "ndh": {
- "english_name": "Ndali"
- },
- "tve": {
- "english_name": "Te'un"
- },
- "pow": {
- "english_name": "Popoloca, San Felipe Otlaltepec"
- },
- "vlp": {
- "english_name": "Valpei"
- },
- "bms": {
- "english_name": "Kanuri, Bilma"
- },
- "was": {
- "english_name": "Washo"
- },
- "lmg": {
- "english_name": "Lamogai"
- },
- "ssm": {
- "english_name": "Semnam"
- },
- "mbk": {
- "english_name": "Malol"
- },
- "lht": {
- "english_name": "Lo-Toga"
- },
- "jwi": {
- "english_name": "Jwira-Pepesa"
- },
- "idi": {
- "english_name": "Idi"
- },
- "nxa": {
- "english_name": "Nauete"
- },
- "bdc": {
- "english_name": "Emberá-Baudó"
- },
- "rji": {
- "english_name": "Raji"
- },
- "gua": {
- "english_name": "Shiki"
- },
- "bli": {
- "english_name": "Bolia"
- },
- "rw": {
- "english_name": "Kinyarwanda",
- "name": "Ikinyarwanda"
- },
- "niz": {
- "english_name": "Ningil"
- },
- "glw": {
- "english_name": "Glavda"
- },
- "kjf": {
- "english_name": "Khalaj"
- },
- "taf": {
- "english_name": "Tapirapé"
- },
- "kvx": {
- "english_name": "Koli, Parkari"
- },
- "lgt": {
- "english_name": "Pahi"
- },
- "mtw": {
- "english_name": "Binukidnon, Southern"
- },
- "dah": {
- "english_name": "Gwahatike"
- },
- "eya": {
- "english_name": "Eyak"
- },
- "okl": {
- "english_name": "Kentish Sign Language, Old"
- },
- "olo": {
- "english_name": "Livvi"
- },
- "urt": {
- "english_name": "Urat"
- },
- "apw": {
- "english_name": "Apache, Western"
- },
- "cqd": {
- "english_name": "Miao, Chuanqiandian Cluster"
- },
- "arl": {
- "english_name": "Arabela"
- },
- "mku": {
- "english_name": "Maninka, Konyanka"
- },
- "omu": {
- "english_name": "Omurano"
- },
- "lle": {
- "english_name": "Lele (Papua New Guinea)"
- },
- "hum": {
- "english_name": "Hungana"
- },
- "coe": {
- "english_name": "Koreguaje"
- },
- "lpx": {
- "english_name": "Lopit"
- },
- "ayz": {
- "english_name": "Mai Brat"
- },
- "xep": {
- "english_name": "Epi-Olmec"
- },
- "fuy": {
- "english_name": "Fuyug"
- },
- "klg": {
- "english_name": "Tagakaulo"
- },
- "qud": {
- "english_name": "Quichua, Calderón Highland"
- },
- "nye": {
- "english_name": "Nyengo"
- },
- "mro": {
- "english_name": "Mru"
- },
- "nsg": {
- "english_name": "Ngasa"
- },
- "niy": {
- "english_name": "Ngiti"
- },
- "dri": {
- "english_name": "C'lela"
- },
- "bnf": {
- "english_name": "Masiwang"
- },
- "kou": {
- "english_name": "Koke"
- },
- "rwk": {
- "english_name": "Rwa"
- },
- "csm": {
- "english_name": "Miwok, Central Sierra"
- },
- "qvm": {
- "english_name": "Quechua, Margos-Yarowilca-Lauricocha"
- },
- "tvo": {
- "english_name": "Tidore"
- },
- "nof": {
- "english_name": "Nomane"
- },
- "kle": {
- "english_name": "Kulung (Nepal)"
- },
- "rro": {
- "english_name": "Waima"
- },
- "xkl": {
- "english_name": "Mainstream Kenyah"
- },
- "mlb": {
- "english_name": "Mbule"
- },
- "pnm": {
- "english_name": "Punan Batu 1"
- },
- "ims": {
- "english_name": "Marsian"
- },
- "avs": {
- "english_name": "Aushiri"
- },
- "muy": {
- "english_name": "Muyang"
- },
- "adu": {
- "english_name": "Aduge"
- },
- "mto": {
- "english_name": "Mixe, Totontepec"
- },
- "pav": {
- "english_name": "Pakaásnovos"
- },
- "luc": {
- "english_name": "Aringa"
- },
- "yaf": {
- "english_name": "Yaka (Democratic Republic of Congo)"
- },
- "wru": {
- "english_name": "Waru"
- },
- "kht": {
- "english_name": "Khamti"
- },
- "mdf": {
- "english_name": "Moksha"
- },
- "zaw": {
- "english_name": "Zapotec, Mitla"
- },
- "zoc": {
- "english_name": "Zoque, Copainalá"
- },
- "nji": {
- "english_name": "Gudanji"
- },
- "lal": {
- "english_name": "Lalia"
- },
- "dyo": {
- "english_name": "Jola-Fonyi"
- },
- "tkw": {
- "english_name": "Teanu"
- },
- "bdb": {
- "english_name": "Basap"
- },
- "gwf": {
- "english_name": "Gowro"
- },
- "sxw": {
- "english_name": "Gbe, Saxwe"
- },
- "dbp": {
- "english_name": "Duwai"
- },
- "muu": {
- "english_name": "Yaaku"
- },
- "bbq": {
- "english_name": "Bamali"
- },
- "gdc": {
- "english_name": "Gugu Badhun"
- },
- "kwx": {
- "english_name": "Khirwar"
- },
- "bdz": {
- "english_name": "Badeshi"
- },
- "duh": {
- "english_name": "Dungra Bhil"
- },
- "agz": {
- "english_name": "Agta, Mt. Iriga"
- },
- "klv": {
- "english_name": "Maskelynes"
- },
- "czh": {
- "english_name": "Chinese, Huizhou"
- },
- "pnx": {
- "english_name": "Phong-Kniang"
- },
- "hal": {
- "english_name": "Halang"
- },
- "gir": {
- "english_name": "Gelao, Red"
- },
- "buy": {
- "english_name": "Bullom So"
- },
- "adj": {
- "english_name": "Adioukrou"
- },
- "ils": {
- "english_name": "International Sign"
- },
- "man": {
- "english_name": "Mandingo"
- },
- "mkp": {
- "english_name": "Moikodi"
- },
- "ndi": {
- "english_name": "Samba Leko"
- },
- "mga": {
- "english_name": "Irish, Middle (900-1200)"
- },
- "aaa": {
- "english_name": "Ghotuo"
- },
- "bdq": {
- "english_name": "Bahnar"
- },
- "xar": {
- "english_name": "Karami"
- },
- "bvy": {
- "english_name": "Baybayanon"
- },
- "kgd": {
- "english_name": "Kataang"
- },
- "rng": {
- "english_name": "Ronga"
- },
- "mhj": {
- "english_name": "Mogholi"
- },
- "xrw": {
- "english_name": "Karawa"
- },
- "npu": {
- "english_name": "Naga, Puimei"
- },
- "kri": {
- "english_name": "Krio"
- },
- "beo": {
- "english_name": "Beami"
- },
- "xct": {
- "english_name": "Tibetan, Classical"
- },
- "twx": {
- "english_name": "Tewe"
- },
- "cnt": {
- "english_name": "Chinantec, Tepetotutla"
- },
- "nsa": {
- "english_name": "Naga, Sangtam"
- },
- "pub": {
- "english_name": "Purum"
- },
- "cbe": {
- "english_name": "Chipiajes"
- },
- "zgb": {
- "english_name": "Zhuang, Guibei"
- },
- "ogo": {
- "english_name": "Khana"
- },
- "bbd": {
- "english_name": "Bau"
- },
- "tmr": {
- "english_name": "Aramaic, Jewish Babylonian (ca. 200-1200 CE)"
- },
- "ghl": {
- "english_name": "Ghulfan"
- },
- "tit": {
- "english_name": "Tinigua"
- },
- "eme": {
- "english_name": "Emerillon"
- },
- "pha": {
- "english_name": "Pa-Hng"
- },
- "nxr": {
- "english_name": "Ninggerum"
- },
- "zas": {
- "english_name": "Zapotec, Santo Domingo Albarradas"
- },
- "kwy": {
- "english_name": "Kongo, San Salvador"
- },
- "mbd": {
- "english_name": "Manobo, Dibabawon"
- },
- "bil": {
- "english_name": "Bile"
- },
- "kcd": {
- "english_name": "Kanum, Ngkâlmpw"
- },
- "snr": {
- "english_name": "Sihan"
- },
- "tce": {
- "english_name": "Tutchone, Southern"
- },
- "bco": {
- "english_name": "Kaluli"
- },
- "kjx": {
- "english_name": "Ramopa"
- },
- "dmc": {
- "english_name": "Gavak"
- },
- "mez": {
- "english_name": "Menominee"
- },
- "kyf": {
- "english_name": "Kouya"
- },
- "zkz": {
- "english_name": "Khazar"
- },
- "koz": {
- "english_name": "Korak"
- },
- "gac": {
- "english_name": "Great Andamanese, Mixed"
- },
- "fak": {
- "english_name": "Fang (Cameroon)"
- },
- "pwn": {
- "english_name": "Paiwan"
- },
- "qxo": {
- "english_name": "Quechua, Southern Conchucos Ancash"
- },
- "nio": {
- "english_name": "Nganasan"
- },
- "igs": {
- "english_name": "Interglossa"
- },
- "bzl": {
- "english_name": "Boano (Sulawesi)"
- },
- "tis": {
- "english_name": "Itneg, Masadiit"
- },
- "itt": {
- "english_name": "Itneg, Maeng"
- },
- "lka": {
- "english_name": "Lakalei"
- },
- "snc": {
- "english_name": "Sinaugoro"
- },
- "jbu": {
- "english_name": "Jukun Takum"
- },
- "hoy": {
- "english_name": "Holiya"
- },
- "aox": {
- "english_name": "Atorada"
- },
- "tsx": {
- "english_name": "Mubami"
- },
- "fab": {
- "english_name": "Fa d'Ambu"
- },
- "csi": {
- "english_name": "Miwok, Coast"
- },
- "ccd": {
- "english_name": "Creole, Cafundo"
- },
- "mzs": {
- "english_name": "Macanese"
- },
- "gib": {
- "english_name": "Gibanawa"
- },
- "bbf": {
- "english_name": "Baibai"
- },
- "mju": {
- "english_name": "Manna-Dora"
- },
- "xh": {
- "english_name": "Xhosa",
- "name": "Xhosa"
- },
- "bsm": {
- "english_name": "Busami"
- },
- "mrq": {
- "english_name": "Marquesan, North"
- },
- "btu": {
- "english_name": "Batu"
- },
- "kxj": {
- "english_name": "Kulfa"
- },
- "mrw": {
- "english_name": "Maranao"
- },
- "brt": {
- "english_name": "Bitare"
- },
- "blz": {
- "english_name": "Balantak"
- },
- "ttc": {
- "english_name": "Tektiteko"
- },
- "lls": {
- "english_name": "Lithuanian Sign Language"
- },
- "yrm": {
- "english_name": "Yirrk-Mel"
- },
- "tni": {
- "english_name": "Tandia"
- },
- "knn": {
- "english_name": "Konkani (individual language)"
- },
- "frr": {
- "english_name": "Frisian, Northern"
- },
- "tmq": {
- "english_name": "Tumleo"
- },
- "hdy": {
- "english_name": "Hadiyya"
- },
- "sox": {
- "english_name": "Swo"
- },
- "dva": {
- "english_name": "Duau"
- },
- "chf": {
- "english_name": "Chontal, Tabasco"
- },
- "bsr": {
- "english_name": "Bassa-Kontagora"
- },
- "ce": {
- "english_name": "Chechen"
- },
- "pnq": {
- "english_name": "Pana (Burkina Faso)"
- },
- "wrg": {
- "english_name": "Warungu"
- },
- "bkn": {
- "english_name": "Bukitan"
- },
- "chd": {
- "english_name": "Chontal, Highland Oaxaca"
- },
- "scb": {
- "english_name": "Chut"
- },
- "nyo": {
- "english_name": "Nyoro"
- },
- "ti": {
- "english_name": "Tigrinya",
- "name": "ትግርኛ"
- },
- "tbf": {
- "english_name": "Mandara"
- },
- "nnt": {
- "english_name": "Nanticoke"
- },
- "spt": {
- "english_name": "Bhoti, Spiti"
- },
- "kbx": {
- "english_name": "Ap Ma"
- },
- "cao": {
- "english_name": "Chácobo"
- },
- "bbb": {
- "english_name": "Barai"
- },
- "pwa": {
- "english_name": "Pawaia"
- },
- "ngq": {
- "english_name": "Ngurimi"
- },
- "woy": {
- "english_name": "Weyto"
- },
- "txh": {
- "english_name": "Thracian"
- },
- "lem": {
- "english_name": "Nomaande"
- },
- "bbv": {
- "english_name": "Karnai"
- },
- "bqr": {
- "english_name": "Burusu"
- },
- "spg": {
- "english_name": "Sian"
- },
- "bwl": {
- "english_name": "Bwela"
- },
- "guu": {
- "english_name": "Yanomamö"
- },
- "skc": {
- "english_name": "Ma Manda"
- },
- "mmh": {
- "english_name": "Mehináku"
- },
- "mdj": {
- "english_name": "Mangbetu"
- },
- "pog": {
- "english_name": "Potiguára"
- },
- "dzg": {
- "english_name": "Dazaga"
- },
- "apt": {
- "english_name": "Apatani"
- },
- "skx": {
- "english_name": "Seko Padang"
- },
- "anh": {
- "english_name": "Nend"
- },
- "dot": {
- "english_name": "Dass"
- },
- "kuq": {
- "english_name": "Karipuna"
- },
- "vav": {
- "english_name": "Varli"
- },
- "cua": {
- "english_name": "Cua"
- },
- "xtm": {
- "english_name": "Mixtec, Magdalena Peñasco"
- },
- "ldg": {
- "english_name": "Lenyima"
- },
- "teh": {
- "english_name": "Tehuelche"
- },
- "tlp": {
- "english_name": "Totonac, Filomena Mata-Coahuitlán"
- },
- "tiz": {
- "english_name": "Tai Hongjin"
- },
- "abi": {
- "english_name": "Abidji"
- },
- "hmc": {
- "english_name": "Hmong, Central Huishui"
- },
- "pga": {
- "english_name": "Creole Arabic, Sudanese"
- },
- "ayt": {
- "english_name": "Ayta, Magbukun"
- },
- "peh": {
- "english_name": "Bonan"
- },
- "xuj": {
- "english_name": "Kurumba, Jennu"
- },
- "dua": {
- "english_name": "Duala"
- },
- "ch": {
- "english_name": "Chamorro"
- },
- "bwt": {
- "english_name": "Bafaw-Balong"
- },
- "cld": {
- "english_name": "Neo-Aramaic, Chaldean"
- },
- "ilu": {
- "english_name": "Ili'uun"
- },
- "min": {
- "english_name": "Minangkabau"
- },
- "oaa": {
- "english_name": "Orok"
- },
- "nyl": {
- "english_name": "Nyeu"
- },
- "wgy": {
- "english_name": "Warrgamay"
- },
- "wai": {
- "english_name": "Wares"
- },
- "bdk": {
- "english_name": "Budukh"
- },
- "jee": {
- "english_name": "Jerung"
- },
- "gdj": {
- "english_name": "Gurdjar"
- },
- "plh": {
- "english_name": "Paulohi"
- },
- "byh": {
- "english_name": "Bhujel"
- },
- "rka": {
- "english_name": "Kraol"
- },
- "bkd": {
- "english_name": "Binukid"
- },
- "mmz": {
- "english_name": "Mabaale"
- },
- "ljp": {
- "english_name": "Lampung Api"
- },
- "whg": {
- "english_name": "Wahgi, North"
- },
- "vaj": {
- "english_name": "Vasekela Bushman"
- },
- "hit": {
- "english_name": "Hittite"
- },
- "aht": {
- "english_name": "Ahtena"
- },
- "cli": {
- "english_name": "Chakali"
- },
- "nuk": {
- "english_name": "Nuu-chah-nulth"
- },
- "fuf": {
- "english_name": "Pular"
- },
- "drb": {
- "english_name": "Dair"
- },
- "bbj": {
- "english_name": "Ghomálá'"
- },
- "pov": {
- "english_name": "Crioulo, Upper Guinea"
- },
- "eli": {
- "english_name": "Nding"
- },
- "pqa": {
- "english_name": "Pa'a"
- },
- "njz": {
- "english_name": "Nyishi"
- },
- "lij": {
- "english_name": "Ligurian"
- },
- "sok": {
- "english_name": "Sokoro"
- },
- "bfn": {
- "english_name": "Bunak"
- },
- "zim": {
- "english_name": "Mesme"
- },
- "phw": {
- "english_name": "Phangduwali"
- },
- "amk": {
- "english_name": "Ambai"
- },
- "xya": {
- "english_name": "Yaygir"
- },
- "kjt": {
- "english_name": "Karen, Phrae Pwo"
- },
- "ubl": {
- "english_name": "Bikol, Buhi'non"
- },
- "yis": {
- "english_name": "Yis"
- },
- "aux": {
- "english_name": "Aurá"
- },
- "bbp": {
- "english_name": "Banda, West Central"
- },
- "kbq": {
- "english_name": "Kamano"
- },
- "krc": {
- "english_name": "Karachay-Balkar"
- },
- "mej": {
- "english_name": "Meyah"
- },
- "dii": {
- "english_name": "Dimbong"
- },
- "okm": {
- "english_name": "Korean, Middle (10th-16th cent.)"
- },
- "agw": {
- "english_name": "Kahua"
- },
- "lar": {
- "english_name": "Larteh"
- },
- "wkw": {
- "english_name": "Wakawaka"
- },
- "mii": {
- "english_name": "Mixtec, Chigmecatitlán"
- },
- "ztg": {
- "english_name": "Zapotec, Xanaguía"
- },
- "atx": {
- "english_name": "Arutani"
- },
- "nam": {
- "english_name": "Ngan'gityemerri"
- },
- "pna": {
- "english_name": "Punan Bah-Biau"
- },
- "kdx": {
- "english_name": "Kam"
- },
- "ggu": {
- "english_name": "Gagu"
- },
- "jbt": {
- "english_name": "Jabutí"
- },
- "rgn": {
- "english_name": "Romagnol"
- },
- "nue": {
- "english_name": "Ngundu"
- },
- "xvn": {
- "english_name": "Vandalic"
- },
- "ksb": {
- "english_name": "Shambala"
- },
- "pey": {
- "english_name": "Petjo"
- },
- "srk": {
- "english_name": "Serudung Murut"
- },
- "psd": {
- "english_name": "Plains Indian Sign Language"
- },
- "tgd": {
- "english_name": "Ciwogai"
- },
- "pse": {
- "english_name": "Malay, Central"
- },
- "bmo": {
- "english_name": "Bambalang"
- },
- "grj": {
- "english_name": "Grebo, Southern"
- },
- "vmv": {
- "english_name": "Maidu, Valley"
- },
- "xnr": {
- "english_name": "Kangri"
- },
- "lob": {
- "english_name": "Lobi"
- },
- "mws": {
- "english_name": "Mwimbi-Muthambi"
- },
- "nhz": {
- "english_name": "Nahuatl, Santa María La Alta"
- },
- "klw": {
- "english_name": "Lindu"
- },
- "nbw": {
- "english_name": "Ngbandi, Southern"
- },
- "waz": {
- "english_name": "Wampur"
- },
- "tmf": {
- "english_name": "Toba-Maskoy"
- },
- "its": {
- "english_name": "Isekiri"
- },
- "dim": {
- "english_name": "Dime"
- },
- "opt": {
- "english_name": "Opata"
- },
- "tvw": {
- "english_name": "Sedoa"
- },
- "npy": {
- "english_name": "Napu"
- },
- "evn": {
- "english_name": "Evenki"
- },
- "lkl": {
- "english_name": "Laeko-Libuat"
- },
- "nuh": {
- "english_name": "Ndunda"
- },
- "nsi": {
- "english_name": "Nigerian Sign Language"
- },
- "osa": {
- "english_name": "Osage"
- },
- "tty": {
- "english_name": "Sikaritai"
- },
- "pii": {
- "english_name": "Pini"
- },
- "kqg": {
- "english_name": "Khe"
- },
- "mul": {
- "english_name": "Multiple languages"
- },
- "mbx": {
- "english_name": "Mari (East Sepik Province)"
- },
- "kff": {
- "english_name": "Koya"
- },
- "nmk": {
- "english_name": "Namakura"
- },
- "spu": {
- "english_name": "Sapuan"
- },
- "pwr": {
- "english_name": "Powari"
- },
- "bhn": {
- "english_name": "Neo-Aramaic, Bohtan"
- },
- "bxi": {
- "english_name": "Pirlatapa"
- },
- "mhf": {
- "english_name": "Mamaa"
- },
- "grm": {
- "english_name": "Kota Marudu Talantang"
- },
- "mil": {
- "english_name": "Mixtec, Peñoles"
- },
- "mnj": {
- "english_name": "Munji"
- },
- "crd": {
- "english_name": "Coeur d'Alene"
- },
- "chz": {
- "english_name": "Chinantec, Ozumacín"
- },
- "sab": {
- "english_name": "Buglere"
- },
- "kgf": {
- "english_name": "Kube"
- },
- "mnv": {
- "english_name": "Rennell-Bellona"
- },
- "kqk": {
- "english_name": "Gbe, Kotafon"
- },
- "kdz": {
- "english_name": "Kwaja"
- },
- "mnx": {
- "english_name": "Manikion"
- },
- "lzz": {
- "english_name": "Laz"
- },
- "tti": {
- "english_name": "Tobati"
- },
- "nlq": {
- "english_name": "Naga, Lao"
- },
- "wrh": {
- "english_name": "Wiradhuri"
- },
- "xky": {
- "english_name": "Uma' Lasan"
- },
- "tdg": {
- "english_name": "Tamang, Western"
- },
- "nex": {
- "english_name": "Neme"
- },
- "gwe": {
- "english_name": "Gweno"
- },
- "rut": {
- "english_name": "Rutul"
- },
- "eki": {
- "english_name": "Eki"
- },
- "tik": {
- "english_name": "Tikar"
- },
- "dmb": {
- "english_name": "Dogon, Mombo"
- },
- "rab": {
- "english_name": "Camling"
- },
- "izh": {
- "english_name": "Ingrian"
- },
- "ckh": {
- "english_name": "Chak"
- },
- "bgc": {
- "english_name": "Haryanvi"
- },
- "set": {
- "english_name": "Sentani"
- },
- "gdn": {
- "english_name": "Umanakaina"
- },
- "ext": {
- "english_name": "Extremaduran"
- },
- "aew": {
- "english_name": "Ambakich"
- },
- "sgm": {
- "english_name": "Singa"
- },
- "dif": {
- "english_name": "Dieri"
- },
- "tct": {
- "english_name": "T'en"
- },
- "tgi": {
- "english_name": "Lawunuia"
- },
- "pei": {
- "english_name": "Chichimeca-Jonaz"
- },
- "sge": {
- "english_name": "Segai"
- },
- "mql": {
- "english_name": "Mbelime"
- },
- "sei": {
- "english_name": "Seri"
- },
- "kcs": {
- "english_name": "Koenoem"
- },
- "ade": {
- "english_name": "Adele"
- },
- "ijj": {
- "english_name": "Ede Ije"
- },
- "zyn": {
- "english_name": "Zhuang, Yongnan"
- },
- "te": {
- "english_name": "Telugu"
- },
- "xun": {
- "english_name": "Unggaranggu"
- },
- "sva": {
- "english_name": "Svan"
- },
- "itr": {
- "english_name": "Iteri"
- },
- "lup": {
- "english_name": "Lumbu"
- },
- "phr": {
- "english_name": "Pahari-Potwari"
- },
- "kex": {
- "english_name": "Kukna"
- },
- "pbr": {
- "english_name": "Pangwa"
- },
- "ras": {
- "english_name": "Tegali"
- },
- "mgp": {
- "english_name": "Magar, Eastern"
- },
- "mia": {
- "english_name": "Miami"
- },
- "brn": {
- "english_name": "Boruca"
- },
- "sim": {
- "english_name": "Mende (Papua New Guinea)"
- },
- "lsy": {
- "english_name": "Mauritian Sign Language"
- },
- "tmb": {
- "english_name": "Katbol"
- },
- "xco": {
- "english_name": "Chorasmian"
- },
- "ape": {
- "english_name": "Bukiyip"
- },
- "dee": {
- "english_name": "Dewoin"
- },
- "non": {
- "english_name": "Norse, Old"
- },
- "ids": {
- "english_name": "Idesa"
- },
- "khx": {
- "english_name": "Kanu"
- },
- "let": {
- "english_name": "Lesing-Gelimi"
- },
- "nig": {
- "english_name": "Ngalakan"
- },
- "aey": {
- "english_name": "Amele"
- },
- "ojc": {
- "english_name": "Ojibwa, Central"
- },
- "geg": {
- "english_name": "Gengle"
- },
- "rxd": {
- "english_name": "Ngardi"
- },
- "cie": {
- "english_name": "Cineni"
- },
- "zhw": {
- "english_name": "Zhoa"
- },
- "wuv": {
- "english_name": "Wuvulu-Aua"
- },
- "lku": {
- "english_name": "Kungkari"
- },
- "biv": {
- "english_name": "Birifor, Southern"
- },
- "uks": {
- "english_name": "Urubú-Kaapor Sign Language"
- },
- "xpo": {
- "english_name": "Pochutec"
- },
- "icl": {
- "english_name": "Icelandic Sign Language"
- },
- "nbm": {
- "english_name": "Ngbaka Ma'bo"
- },
- "gnc": {
- "english_name": "Guanche"
- },
- "gri": {
- "english_name": "Ghari"
- },
- "sju": {
- "english_name": "Sami, Ume"
- },
- "auw": {
- "english_name": "Awyi"
- },
- "pnt": {
- "english_name": "Pontic"
- },
- "bbx": {
- "english_name": "Bubia"
- },
- "szc": {
- "english_name": "Semaq Beri"
- },
- "lkc": {
- "english_name": "Kucong"
- },
- "yle": {
- "english_name": "Yele"
- },
- "ay": {
- "english_name": "Aymara"
- },
- "tta": {
- "english_name": "Tutelo"
- },
- "cul": {
- "english_name": "Culina"
- },
- "byo": {
- "english_name": "Biyo"
- },
- "pex": {
- "english_name": "Petats"
- },
- "fom": {
- "english_name": "Foma"
- },
- "xtb": {
- "english_name": "Mixtec, Chazumba"
- },
- "sga": {
- "english_name": "Irish, Old (to 900)"
- },
- "mmm": {
- "english_name": "Maii"
- },
- "twp": {
- "english_name": "Ere"
- },
- "kga": {
- "english_name": "Koyaga"
- },
- "men": {
- "english_name": "Mende (Sierra Leone)"
- },
- "dal": {
- "english_name": "Dahalo"
- },
- "psi": {
- "english_name": "Pashayi, Southeast"
- },
- "rmd": {
- "english_name": "Danish, Traveller"
- },
- "svs": {
- "english_name": "Savosavo"
- },
- "snk": {
- "english_name": "Soninke"
- },
- "amp": {
- "english_name": "Alamblak"
- },
- "xce": {
- "english_name": "Celtiberian"
- },
- "wmo": {
- "english_name": "Wom (Papua New Guinea)"
- },
- "zpo": {
- "english_name": "Zapotec, Amatlán"
- },
- "heh": {
- "english_name": "Hehe"
- },
- "dem": {
- "english_name": "Dem"
- },
- "vko": {
- "english_name": "Kodeoha"
- },
- "mvx": {
- "english_name": "Meoswar"
- },
- "bne": {
- "english_name": "Bintauna"
- },
- "ckv": {
- "english_name": "Kavalan"
- },
- "ikv": {
- "english_name": "Iku-Gora-Ankwa"
- },
- "mbm": {
- "english_name": "Ombamba"
- },
- "lum": {
- "english_name": "Luimbi"
- },
- "ins": {
- "english_name": "Indian Sign Language"
- },
- "err": {
- "english_name": "Erre"
- },
- "peb": {
- "english_name": "Pomo, Eastern"
- },
- "bhw": {
- "english_name": "Biak"
- },
- "bjt": {
- "english_name": "Balanta-Ganja"
- },
- "dmw": {
- "english_name": "Mudburra"
- },
- "kkd": {
- "english_name": "Kinuku"
- },
- "stu": {
- "english_name": "Samtao"
- },
- "leh": {
- "english_name": "Lenje"
- },
- "scf": {
- "english_name": "Creole French, San Miguel"
- },
- "xsl": {
- "english_name": "Slavey, South"
- },
- "khl": {
- "english_name": "Lusi"
- },
- "bff": {
- "english_name": "Bofi"
- },
- "zom": {
- "english_name": "Zou"
- },
- "agr": {
- "english_name": "Aguaruna"
- },
- "suy": {
- "english_name": "Suyá"
- },
- "ndc": {
- "english_name": "Ndau"
- },
- "hme": {
- "english_name": "Hmong, Eastern Huishui"
- },
- "mkm": {
- "english_name": "Moklen"
- },
- "kyy": {
- "english_name": "Kambaira"
- },
- "mck": {
- "english_name": "Mbunda"
- },
- "tvs": {
- "english_name": "Taveta"
- },
- "avi": {
- "english_name": "Avikam"
- },
- "pcf": {
- "english_name": "Paliyan"
- },
- "urz": {
- "english_name": "Uru-Eu-Wau-Wau"
- },
- "npb": {
- "english_name": "Nupbikha"
- },
- "etx": {
- "english_name": "Eten"
- },
- "djf": {
- "english_name": "Djangun"
- },
- "cns": {
- "english_name": "Asmat, Central"
- },
- "wkd": {
- "english_name": "Wakde"
- },
- "wyi": {
- "english_name": "Woiwurrung"
- },
- "yiu": {
- "english_name": "Awu"
- },
- "omp": {
- "english_name": "Manipuri, Old"
- },
- "prl": {
- "english_name": "Peruvian Sign Language"
- },
- "dgn": {
- "english_name": "Dagoman"
- },
- "xve": {
- "english_name": "Venetic"
- },
- "vku": {
- "english_name": "Kurrama"
- },
- "qum": {
- "english_name": "Sipacapense"
- },
- "lio": {
- "english_name": "Liki"
- },
- "soq": {
- "english_name": "Kanasi"
- },
- "abn": {
- "english_name": "Abua"
- },
- "mnq": {
- "english_name": "Minriq"
- },
- "kns": {
- "english_name": "Kensiu"
- },
- "ssk": {
- "english_name": "Sunam"
- },
- "ln": {
- "english_name": "Lingala"
- },
- "be": {
- "english_name": "Belarusian"
- },
- "cpb": {
- "english_name": "Ashéninka, Ucayali-Yurúa"
- },
- "kmm": {
- "english_name": "Kom (India)"
- },
- "soi": {
- "english_name": "Sonha"
- },
- "nmy": {
- "english_name": "Namuyi"
- },
- "nrk": {
- "english_name": "Ngarla"
- },
- "bik": {
- "english_name": "Bikol"
- },
- "zsk": {
- "english_name": "Kaskean"
- },
- "bqh": {
- "english_name": "Baima"
- },
- "ymb": {
- "english_name": "Yambes"
- },
- "nis": {
- "english_name": "Nimi"
- },
- "hom": {
- "english_name": "Homa"
- },
- "vmc": {
- "english_name": "Mixtec, Juxtlahuaca"
- },
- "arp": {
- "english_name": "Arapaho"
- },
- "kgj": {
- "english_name": "Kham, Gamale"
- },
- "rmz": {
- "english_name": "Marma"
- },
- "kcl": {
- "english_name": "Kela (Papua New Guinea)"
- },
- "sdm": {
- "english_name": "Semandang"
- },
- "mnm": {
- "english_name": "Mapena"
- },
- "pdt": {
- "english_name": "Plautdietsch"
- },
- "nwy": {
- "english_name": "Nottoway-Meherrin"
- },
- "ewo": {
- "english_name": "Ewondo"
- },
- "rah": {
- "english_name": "Rabha"
- },
- "lmd": {
- "english_name": "Lumun"
- },
- "kto": {
- "english_name": "Kuot"
- },
- "hmt": {
- "english_name": "Hamtai"
- },
- "kpb": {
- "english_name": "Kurumba, Mullu"
- },
- "mvr": {
- "english_name": "Marau"
- },
- "iar": {
- "english_name": "Purari"
- },
- "cdj": {
- "english_name": "Churahi"
- },
- "nsl": {
- "english_name": "Norwegian Sign Language"
- },
- "wrb": {
- "english_name": "Warluwara"
- },
- "wuu": {
- "english_name": "Chinese, Wu"
- },
- "piv": {
- "english_name": "Pileni"
- },
- "maz": {
- "english_name": "Mazahua, Central"
- },
- "rmy": {
- "english_name": "Romani, Vlax"
- },
- "mke": {
- "english_name": "Mawchi"
- },
- "wig": {
- "english_name": "Wik-Ngathana"
- },
- "tkz": {
- "english_name": "Takua"
- },
- "pgn": {
- "english_name": "Paelignian"
- },
- "zaa": {
- "english_name": "Zapotec, Sierra de Juárez"
- },
- "gra": {
- "english_name": "Garasia, Rajput"
- },
- "pys": {
- "english_name": "Paraguayan Sign Language"
- },
- "fip": {
- "english_name": "Fipa"
- },
- "aph": {
- "english_name": "Athpariya"
- },
- "lmi": {
- "english_name": "Lombi"
- },
- "two": {
- "english_name": "Tswapong"
- },
- "mov": {
- "english_name": "Mohave"
- },
- "dmk": {
- "english_name": "Domaaki"
- },
- "hya": {
- "english_name": "Hya"
- },
- "kgg": {
- "english_name": "Kusunda"
- },
- "pic": {
- "english_name": "Pinji"
- },
- "igo": {
- "english_name": "Isebe"
- },
- "nzk": {
- "english_name": "Nzakara"
- },
- "kdc": {
- "english_name": "Kutu"
- },
- "mba": {
- "english_name": "Higaonon"
- },
- "zmx": {
- "english_name": "Bomitaba"
- },
- "wif": {
- "english_name": "Wik-Keyangan"
- },
- "psm": {
- "english_name": "Pauserna"
- },
- "uli": {
- "english_name": "Ulithian"
- },
- "hux": {
- "english_name": "Huitoto, Nüpode"
- },
- "sli": {
- "english_name": "Silesian, Lower"
- },
- "ess": {
- "english_name": "Yupik, Central Siberian"
- },
- "ytl": {
- "english_name": "Tanglang"
- },
- "xki": {
- "english_name": "Kenyan Sign Language"
- },
- "nrp": {
- "english_name": "Picene, North"
- },
- "pas": {
- "english_name": "Papasena"
- },
- "hup": {
- "english_name": "Hupa"
- },
- "mny": {
- "english_name": "Manyawa"
- },
- "srz": {
- "english_name": "Shahmirzadi"
- },
- "bwr": {
- "english_name": "Bura-Pabir"
- },
- "xug": {
- "english_name": "Kunigami"
- },
- "ty": {
- "english_name": "Tahitian"
- },
- "knp": {
- "english_name": "Kwanja"
- },
- "xhe": {
- "english_name": "Khetrani"
- },
- "plb": {
- "english_name": "Polonombauk"
- },
- "pae": {
- "english_name": "Pagibete"
- },
- "pst": {
- "english_name": "Pashto, Central"
- },
- "dbu": {
- "english_name": "Dogon, Bondum Dom"
- },
- "pnu": {
- "english_name": "Bunu, Jiongnai"
- },
- "don": {
- "english_name": "Toura (Papua New Guinea)"
- },
- "ppp": {
- "english_name": "Pelende"
- },
- "obr": {
- "english_name": "Burmese, Old"
- },
- "msg": {
- "english_name": "Moraid"
- },
- "ley": {
- "english_name": "Lemolang"
- },
- "nsm": {
- "english_name": "Naga, Sumi"
- },
- "cih": {
- "english_name": "Chinali"
- },
- "vis": {
- "english_name": "Vishavan"
- },
- "grs": {
- "english_name": "Gresi"
- },
- "zin": {
- "english_name": "Zinza"
- },
- "bzu": {
- "english_name": "Burmeso"
- },
- "zmi": {
- "english_name": "Negeri Sembilan Malay"
- },
- "yiv": {
- "english_name": "Nisu, Northern"
- },
- "bqz": {
- "english_name": "Bakaka"
- },
- "llg": {
- "english_name": "Lole"
- },
- "mus": {
- "english_name": "Creek"
- },
- "ttw": {
- "english_name": "Long Wat"
- },
- "ura": {
- "english_name": "Urarina"
- },
- "pnp": {
- "english_name": "Pancana"
- },
- "efe": {
- "english_name": "Efe"
- },
- "scq": {
- "english_name": "Sa'och"
- },
- "mhx": {
- "english_name": "Maru"
- },
- "mfv": {
- "english_name": "Mandjak"
- },
- "she": {
- "english_name": "Sheko"
- },
- "opo": {
- "english_name": "Opao"
- },
- "ken": {
- "english_name": "Kenyang"
- },
- "ryn": {
- "english_name": "Amami-Oshima, Northern"
- },
- "krp": {
- "english_name": "Korop"
- },
- "tts": {
- "english_name": "Thai, Northeastern"
- },
- "bks": {
- "english_name": "Sorsoganon, Northern"
- },
- "ahi": {
- "english_name": "Aizi, Tiagbamrin"
- },
- "bip": {
- "english_name": "Bila"
- },
- "wmx": {
- "english_name": "Womo"
- },
- "pmb": {
- "english_name": "Pambia"
- },
- "ksl": {
- "english_name": "Kumalu"
- },
- "sby": {
- "english_name": "Soli"
- },
- "pri": {
- "english_name": "Paicî"
- },
- "tuq": {
- "english_name": "Tedaga"
- },
- "avt": {
- "english_name": "Au"
- },
- "hao": {
- "english_name": "Hakö"
- },
- "asx": {
- "english_name": "Muratayak"
- },
- "mbt": {
- "english_name": "Manobo, Matigsalug"
- },
- "pl": {
- "english_name": "Polish",
- "name": "polski"
- },
- "kct": {
- "english_name": "Kaian"
- },
- "bws": {
- "english_name": "Bomboma"
- },
- "ntg": {
- "english_name": "Ngantangarra"
- },
- "bqu": {
- "english_name": "Boguru"
- },
- "xmo": {
- "english_name": "Morerebi"
- },
- "ybn": {
- "english_name": "Yabaâna"
- },
- "liw": {
- "english_name": "Col"
- },
- "pue": {
- "english_name": "Puelche"
- },
- "dya": {
- "english_name": "Dyan"
- },
- "gkp": {
- "english_name": "Kpelle, Guinea"
- },
- "ssb": {
- "english_name": "Sama, Southern"
- },
- "nuv": {
- "english_name": "Nuni, Northern"
- },
- "lnm": {
- "english_name": "Langam"
- },
- "aju": {
- "english_name": "Arabic, Judeo-Moroccan"
- },
- "lmu": {
- "english_name": "Lamenu"
- },
- "tyn": {
- "english_name": "Kombai"
- },
- "foi": {
- "english_name": "Foi"
- },
- "pah": {
- "english_name": "Tenharim"
- },
- "bby": {
- "english_name": "Befang"
- },
- "kev": {
- "english_name": "Kanikkaran"
- },
- "bus": {
- "english_name": "Bokobaru"
- },
- "gad": {
- "english_name": "Gaddang"
- },
- "jmi": {
- "english_name": "Jimi (Nigeria)"
- },
- "din": {
- "english_name": "Dinka"
- },
- "ego": {
- "english_name": "Eggon"
- },
- "tbw": {
- "english_name": "Tagbanwa"
- },
- "kvm": {
- "english_name": "Kendem"
- },
- "twh": {
- "english_name": "Tai Dón"
- },
- "mmy": {
- "english_name": "Migaama"
- },
- "opk": {
- "english_name": "Kopkaka"
- },
- "cro": {
- "english_name": "Crow"
- },
- "wpc": {
- "english_name": "Maco"
- },
- "xsd": {
- "english_name": "Sidetic"
- },
- "cbw": {
- "english_name": "Kinabalian"
- },
- "ta": {
- "english_name": "Tamil",
- "name": "தமிழ்"
- },
- "mjx": {
- "english_name": "Mahali"
- },
- "xib": {
- "english_name": "Iberian"
- },
- "xxm": {
- "english_name": "Minkin"
- },
- "jos": {
- "english_name": "Jordanian Sign Language"
- },
- "mg": {
- "english_name": "Malagasy"
- },
- "gbz": {
- "english_name": "Dari, Zoroastrian"
- },
- "sds": {
- "english_name": "Sened"
- },
- "ldb": {
- "english_name": "Dũya"
- },
- "kfg": {
- "english_name": "Kudiya"
- },
- "slp": {
- "english_name": "Lamaholot"
- },
- "aiy": {
- "english_name": "Ali"
- },
- "mfs": {
- "english_name": "Mexican Sign Language"
- },
- "kcj": {
- "english_name": "Kobiana"
- },
- "ykk": {
- "english_name": "Yakaikeke"
- },
- "kof": {
- "english_name": "Kubi"
- },
- "rhp": {
- "english_name": "Yahang"
- },
- "klf": {
- "english_name": "Kendeje"
- },
- "lif": {
- "english_name": "Limbu"
- },
- "fla": {
- "english_name": "Kalispel-Pend d'Oreille"
- },
- "ues": {
- "english_name": "Kioko"
- },
- "dnj": {
- "english_name": "Dan"
- },
- "nxu": {
- "english_name": "Narau"
- },
- "tkd": {
- "english_name": "Tukudede"
- },
- "aao": {
- "english_name": "Arabic, Algerian Saharan"
- },
- "piw": {
- "english_name": "Pimbwe"
- },
- "knw": {
- "english_name": "Kung-Ekoka"
- },
- "myv": {
- "english_name": "Erzya"
- },
- "rxw": {
- "english_name": "Karuwali"
- },
- "ccc": {
- "english_name": "Chamicuro"
- },
- "xtq": {
- "english_name": "Tumshuqese"
- },
- "nku": {
- "english_name": "Kulango, Bouna"
- },
- "wme": {
- "english_name": "Wambule"
- },
- "gnz": {
- "english_name": "Ganzi"
- },
- "rao": {
- "english_name": "Rao"
- },
- "aix": {
- "english_name": "Aighon"
- },
- "rkt": {
- "english_name": "Rangpuri"
- },
- "ory": {
- "english_name": "Oriya (individual language)"
- },
- "rmm": {
- "english_name": "Roma"
- },
- "tnv": {
- "english_name": "Tangchangya"
- },
- "kmw": {
- "english_name": "Komo (Democratic Republic of Congo)"
- },
- "nzu": {
- "english_name": "Teke-Nzikou"
- },
- "xin": {
- "english_name": "Xinca"
- },
- "kss": {
- "english_name": "Kisi, Southern"
- },
- "cwa": {
- "english_name": "Kabwa"
- },
- "kjq": {
- "english_name": "Keres, Western"
- },
- "smb": {
- "english_name": "Simbari"
- },
- "cdf": {
- "english_name": "Chiru"
- },
- "lns": {
- "english_name": "Lamnso'"
- },
- "bjw": {
- "english_name": "Bakwé"
- },
- "tcm": {
- "english_name": "Tanahmerah"
- },
- "ssp": {
- "english_name": "Spanish Sign Language"
- },
- "lmh": {
- "english_name": "Lambichhong"
- },
- "idr": {
- "english_name": "Indri"
- },
- "qwt": {
- "english_name": "Kwalhioqua-Tlatskanai"
- },
- "bfz": {
- "english_name": "Pahari, Mahasu"
- },
- "uar": {
- "english_name": "Tairuma"
- },
- "kvj": {
- "english_name": "Psikye"
- },
- "tny": {
- "english_name": "Tongwe"
- },
- "aum": {
- "english_name": "Asu (Nigeria)"
- },
- "asi": {
- "english_name": "Buruwai"
- },
- "glu": {
- "english_name": "Gula (Chad)"
- },
- "zkt": {
- "english_name": "Kitan"
- },
- "giq": {
- "english_name": "Gelao, Green"
- },
- "naz": {
- "english_name": "Nahuatl, Coatepec"
- },
- "ybb": {
- "english_name": "Yemba"
- },
- "gim": {
- "english_name": "Gimi (Eastern Highlands)"
- },
- "unk": {
- "english_name": "Enawené-Nawé"
- },
- "giz": {
- "english_name": "Giziga, South"
- },
- "fuc": {
- "english_name": "Pulaar"
- },
- "mup": {
- "english_name": "Malvi"
- },
- "yuy": {
- "english_name": "Yugur, East"
- },
- "wii": {
- "english_name": "Minidien"
- },
- "buu": {
- "english_name": "Budu"
- },
- "omn": {
- "english_name": "Minoan"
- },
- "kcu": {
- "english_name": "Kami (Tanzania)"
- },
- "xpj": {
- "english_name": "Mpalitjanh"
- },
- "mrg": {
- "english_name": "Mising"
- },
- "gct": {
- "english_name": "German, Colonia Tovar"
- },
- "kzr": {
- "english_name": "Karang"
- },
- "ruo": {
- "english_name": "Romanian, Istro"
- },
- "swu": {
- "english_name": "Suwawa"
- },
- "kj": {
- "english_name": "Kuanyama"
- },
- "cdh": {
- "english_name": "Chambeali"
- },
- "mzk": {
- "english_name": "Mambila, Nigeria"
- },
- "mre": {
- "english_name": "Martha's Vineyard Sign Language"
- },
- "gdf": {
- "english_name": "Guduf-Gava"
- },
- "pil": {
- "english_name": "Yom"
- },
- "nhp": {
- "english_name": "Nahuatl, Isthmus-Pajapan"
- },
- "miq": {
- "english_name": "Mískito"
- },
- "kjl": {
- "english_name": "Kham, Western Parbate"
- },
- "kbr": {
- "english_name": "Kafa"
- },
- "bfp": {
- "english_name": "Beba"
- },
- "duy": {
- "english_name": "Agta, Dicamay"
- },
- "vaf": {
- "english_name": "Vafsi"
- },
- "jer": {
- "english_name": "Jere"
- },
- "tsv": {
- "english_name": "Tsogo"
- },
- "txg": {
- "english_name": "Tangut"
- },
- "osi": {
- "english_name": "Osing"
- },
- "tue": {
- "english_name": "Tuyuca"
- },
- "pmm": {
- "english_name": "Pomo"
- },
- "sid": {
- "english_name": "Sidamo"
- },
- "cap": {
- "english_name": "Chipaya"
- },
- "htu": {
- "english_name": "Hitu"
- },
- "mzg": {
- "english_name": "Monastic Sign Language"
- },
- "kqc": {
- "english_name": "Doromu-Koki"
- },
- "yif": {
- "english_name": "Ache"
- },
- "cbj": {
- "english_name": "Ede Cabe"
- },
- "nzy": {
- "english_name": "Nzakambay"
- },
- "trm": {
- "english_name": "Tregami"
- },
- "ncp": {
- "english_name": "Ndaktup"
- },
- "loo": {
- "english_name": "Lombo"
- },
- "khe": {
- "english_name": "Korowai"
- },
- "mqc": {
- "english_name": "Mangole"
- },
- "xko": {
- "english_name": "Kiorr"
- },
- "brh": {
- "english_name": "Brahui"
- },
- "bbi": {
- "english_name": "Barombi"
- },
- "wom": {
- "english_name": "Wom (Nigeria)"
- },
- "sxm": {
- "english_name": "Samre"
- },
- "gor": {
- "english_name": "Gorontalo"
- },
- "lmn": {
- "english_name": "Lambadi"
- },
- "nay": {
- "english_name": "Narrinyeri"
- },
- "wls": {
- "english_name": "Wallisian"
- },
- "stq": {
- "english_name": "Saterfriesisch"
- },
- "bxf": {
- "english_name": "Bilur"
- },
- "mbc": {
- "english_name": "Macushi"
- },
- "usa": {
- "english_name": "Usarufa"
- },
- "sg": {
- "english_name": "Sango"
- },
- "zpx": {
- "english_name": "Zapotec, San Baltazar Loxicha"
- },
- "nsy": {
- "english_name": "Nasal"
- },
- "kvs": {
- "english_name": "Kunggara"
- },
- "atv": {
- "english_name": "Altai, Northern"
- },
- "xzp": {
- "english_name": "Zapotec, Ancient"
- },
- "mmo": {
- "english_name": "Buang, Mangga"
- },
- "gdi": {
- "english_name": "Gundi"
- },
- "urm": {
- "english_name": "Urapmin"
- },
- "wrs": {
- "english_name": "Waris"
- },
- "adn": {
- "english_name": "Adang"
- },
- "net": {
- "english_name": "Nete"
- },
- "ito": {
- "english_name": "Itonama"
- },
- "bgl": {
- "english_name": "Bo (Laos)"
- },
- "nax": {
- "english_name": "Nakwi"
- },
- "nbe": {
- "english_name": "Naga, Konyak"
- },
- "liz": {
- "english_name": "Libinza"
- },
- "kwz": {
- "english_name": "Kwadi"
- },
- "tey": {
- "english_name": "Tulishi"
- },
- "sbu": {
- "english_name": "Bhoti, Stod"
- },
- "yll": {
- "english_name": "Yil"
- },
- "bxz": {
- "english_name": "Binahari"
- },
- "nyt": {
- "english_name": "Nyawaygi"
- },
- "rem": {
- "english_name": "Remo"
- },
- "lti": {
- "english_name": "Leti (Indonesia)"
- },
- "ntr": {
- "english_name": "Delo"
- },
- "wbt": {
- "english_name": "Wanman"
- },
- "aoh": {
- "english_name": "Arma"
- },
- "ndg": {
- "english_name": "Ndengereko"
- },
- "nem": {
- "english_name": "Nemi"
- },
- "lwo": {
- "english_name": "Luwo"
- },
- "zaq": {
- "english_name": "Zapotec, Aloápam"
- },
- "kdk": {
- "english_name": "Numèè"
- },
- "bpm": {
- "english_name": "Biyom"
- },
- "ble": {
- "english_name": "Balanta-Kentohe"
- },
- "nnl": {
- "english_name": "Naga, Northern Rengma"
- },
- "qvh": {
- "english_name": "Quechua, Huamalíes-Dos de Mayo Huánuco"
- },
- "vmp": {
- "english_name": "Mazatec, Soyaltepec"
- },
- "jeb": {
- "english_name": "Jebero"
- },
- "hay": {
- "english_name": "Haya"
- },
- "shg": {
- "english_name": "Shua"
- },
- "ybm": {
- "english_name": "Yaben"
- },
- "mih": {
- "english_name": "Mixtec, Chayuco"
- },
- "pkt": {
- "english_name": "Maleng"
- },
- "ndu": {
- "english_name": "Dugun"
- },
- "toe": {
- "english_name": "Tomedes"
- },
- "mbr": {
- "english_name": "Nukak Makú"
- },
- "hov": {
- "english_name": "Hovongan"
- },
- "spp": {
- "english_name": "Senoufo, Supyire"
- },
- "bfr": {
- "english_name": "Bazigar"
- },
- "kqe": {
- "english_name": "Kalagan"
- },
- "coc": {
- "english_name": "Cocopa"
- },
- "yta": {
- "english_name": "Talu"
- },
- "mgr": {
- "english_name": "Mambwe-Lungu"
- },
- "kmu": {
- "english_name": "Kanite"
- },
- "nmb": {
- "english_name": "Nambas, Big"
- },
- "hgw": {
- "english_name": "Haigwai"
- },
- "sgw": {
- "english_name": "Sebat Bet Gurage"
- },
- "gyl": {
- "english_name": "Gayil"
- },
- "lss": {
- "english_name": "Lasi"
- },
- "sdg": {
- "english_name": "Savi"
- },
- "thu": {
- "english_name": "Thuri"
- },
- "sls": {
- "english_name": "Singapore Sign Language"
- },
- "gpn": {
- "english_name": "Taiap"
- },
- "nyb": {
- "english_name": "Nyangbo"
- },
- "opy": {
- "english_name": "Ofayé"
- },
- "lau": {
- "english_name": "Laba"
- },
- "mrn": {
- "english_name": "Cheke Holo"
- },
- "tpq": {
- "english_name": "Tukpa"
- },
- "zml": {
- "english_name": "Madngele"
- },
- "mnk": {
- "english_name": "Mandinka"
- },
- "poe": {
- "english_name": "Popoloca, San Juan Atzingo"
- },
- "mnn": {
- "english_name": "Mnong, Southern"
- },
- "gdk": {
- "english_name": "Gadang"
- },
- "mtl": {
- "english_name": "Montol"
- },
- "mgb": {
- "english_name": "Mararit"
- },
- "iti": {
- "english_name": "Itneg, Inlaod"
- },
- "bxb": {
- "english_name": "Bor, Belanda"
- },
- "nl": {
- "english_name": "Dutch",
- "name": "Nederlands"
- },
- "gow": {
- "english_name": "Gorowa"
- },
- "zab": {
- "english_name": "Zapotec, San Juan Guelavía"
- },
- "bkh": {
- "english_name": "Bakoko"
- },
- "puo": {
- "english_name": "Puoc"
- },
- "lo": {
- "english_name": "Lao"
- },
- "bmb": {
- "english_name": "Bembe"
- },
- "kox": {
- "english_name": "Coxima"
- },
- "shl": {
- "english_name": "Shendu"
- },
- "kvv": {
- "english_name": "Kola"
- },
- "dgs": {
- "english_name": "Dogoso"
- },
- "aae": {
- "english_name": "Albanian, Arbëreshë"
- },
- "haj": {
- "english_name": "Hajong"
- },
- "siz": {
- "english_name": "Siwi"
- },
- "lcp": {
- "english_name": "Lawa, Western"
- },
- "orx": {
- "english_name": "Oro"
- },
- "gur": {
- "english_name": "Farefare"
- },
- "mkq": {
- "english_name": "Miwok, Bay"
- },
- "urk": {
- "english_name": "Urak Lawoi'"
- },
- "mcz": {
- "english_name": "Mawan"
- },
- "kut": {
- "english_name": "Kutenai"
- },
- "knk": {
- "english_name": "Kuranko"
- },
- "aim": {
- "english_name": "Aimol"
- },
- "ykg": {
- "english_name": "Yukaghir, Northern"
- },
- "tuu": {
- "english_name": "Tututni"
- },
- "cst": {
- "english_name": "Ohlone, Northern"
- },
- "tip": {
- "english_name": "Trimuris"
- },
- "hak": {
- "english_name": "Chinese, Hakka"
- },
- "tab": {
- "english_name": "Tabassaran"
- },
- "kyt": {
- "english_name": "Kayagar"
- },
- "pne": {
- "english_name": "Penan, Western"
- },
- "xme": {
- "english_name": "Median"
- },
- "swr": {
- "english_name": "Saweru"
- },
- "hoo": {
- "english_name": "Holoholo"
- },
- "fr": {
- "english_name": "French",
- "name": "français"
- },
- "skh": {
- "english_name": "Sikule"
- },
- "ca": {
- "english_name": "Catalan",
- "name": "Català"
- },
- "zpu": {
- "english_name": "Zapotec, Yalálag"
- },
- "tyt": {
- "english_name": "Tày Tac"
- },
- "bes": {
- "english_name": "Besme"
- },
- "hla": {
- "english_name": "Halia"
- },
- "dhd": {
- "english_name": "Dhundari"
- },
- "kfp": {
- "english_name": "Korwa"
- },
- "bup": {
- "english_name": "Busoa"
- },
- "kpm": {
- "english_name": "Koho"
- },
- "lbu": {
- "english_name": "Labu"
- },
- "frt": {
- "english_name": "Fortsenal"
- },
- "iff": {
- "english_name": "Ifo"
- },
- "mjr": {
- "english_name": "Malavedan"
- },
- "kxc": {
- "english_name": "Konso"
- },
- "ygm": {
- "english_name": "Yagomi"
- },
- "kxr": {
- "english_name": "Koro (Papua New Guinea)"
- },
- "mxi": {
- "english_name": "Mozarabic"
- },
- "mkz": {
- "english_name": "Makasae"
- },
- "dhl": {
- "english_name": "Dhalandji"
- },
- "mqn": {
- "english_name": "Moronene"
- },
- "dcc": {
- "english_name": "Deccan"
- },
- "pnk": {
- "english_name": "Paunaka"
- },
- "nqn": {
- "english_name": "Nen"
- },
- "bzk": {
- "english_name": "Creole English, Nicaragua"
- },
- "sqr": {
- "english_name": "Arabic, Siculo"
- },
- "ran": {
- "english_name": "Riantana"
- },
- "okj": {
- "english_name": "Oko-Juwoi"
- },
- "mam": {
- "english_name": "Mam"
- },
- "tgw": {
- "english_name": "Senoufo, Tagwana"
- },
- "mmq": {
- "english_name": "Musak"
- },
- "bni": {
- "english_name": "Bangi"
- },
- "hed": {
- "english_name": "Herdé"
- },
- "nbj": {
- "english_name": "Ngarinman"
- },
- "bcm": {
- "english_name": "Bannoni"
- },
- "bdp": {
- "english_name": "Bende"
- },
- "skv": {
- "english_name": "Skou"
- },
- "gyr": {
- "english_name": "Guarayu"
- },
- "kgn": {
- "english_name": "Karingani"
- },
- "mwq": {
- "english_name": "Chin, Mün"
- },
- "mix": {
- "english_name": "Mixtec, Mixtepec"
- },
- "smm": {
- "english_name": "Musasa"
- },
- "tld": {
- "english_name": "Talaud"
- },
- "kzt": {
- "english_name": "Dusun, Tambunan"
- },
- "rtc": {
- "english_name": "Chin, Rungtu"
- },
- "awu": {
- "english_name": "Awyu, Central"
- },
- "asf": {
- "english_name": "Australian Sign Language"
- },
- "sko": {
- "english_name": "Seko Tengah"
- },
- "ker": {
- "english_name": "Kera"
- },
- "lgr": {
- "english_name": "Lengo"
- },
- "dmd": {
- "english_name": "Madhi Madhi"
- },
- "tqt": {
- "english_name": "Totonac, Western"
- },
- "tgt": {
- "english_name": "Tagbanwa, Central"
- },
- "bqc": {
- "english_name": "Boko (Benin)"
- },
- "dai": {
- "english_name": "Day"
- },
- "qvn": {
- "english_name": "Quechua, North Junín"
- },
- "pai": {
- "english_name": "Pe"
- },
- "bab": {
- "english_name": "Bainouk-Gunyuño"
- },
- "amj": {
- "english_name": "Amdang"
- },
- "wik": {
- "english_name": "Wikalkan"
- },
- "nir": {
- "english_name": "Nimboran"
- },
- "siw": {
- "english_name": "Siwai"
- },
- "osp": {
- "english_name": "Spanish, Old"
- },
- "bag": {
- "english_name": "Tuki"
- },
- "xms": {
- "english_name": "Moroccan Sign Language"
- },
- "bfs": {
- "english_name": "Bai, Southern"
- },
- "wbj": {
- "english_name": "Alagwa"
- },
- "bwe": {
- "english_name": "Karen, Bwe"
- },
- "shj": {
- "english_name": "Shatt"
- },
- "pkg": {
- "english_name": "Pak-Tong"
- },
- "ssz": {
- "english_name": "Sengseng"
- },
- "ilo": {
- "english_name": "Iloko"
- },
- "nog": {
- "english_name": "Nogai"
- },
- "okd": {
- "english_name": "Okodia"
- },
- "mwr": {
- "english_name": "Marwari"
- },
- "yga": {
- "english_name": "Malyangapa"
- },
- "daa": {
- "english_name": "Dangaléat"
- },
- "wti": {
- "english_name": "Berta"
- },
- "vkk": {
- "english_name": "Kaur"
- },
- "cbk": {
- "english_name": "Chavacano"
- },
- "mpu": {
- "english_name": "Makuráp"
- },
- "xkz": {
- "english_name": "Kurtokha"
- },
- "xgm": {
- "english_name": "Guwinmal"
- },
- "cow": {
- "english_name": "Cowlitz"
- },
- "swv": {
- "english_name": "Shekhawati"
- },
- "slg": {
- "english_name": "Selungai Murut"
- },
- "mek": {
- "english_name": "Mekeo"
- },
- "dga": {
- "english_name": "Dagaare, Southern"
- },
- "uga": {
- "english_name": "Ugaritic"
- },
- "zos": {
- "english_name": "Zoque, Francisco León"
- },
- "xam": {
- "english_name": "/Xam"
- },
- "ych": {
- "english_name": "Chesu"
- },
- "ccp": {
- "english_name": "Chakma"
- },
- "mur": {
- "english_name": "Murle"
- },
- "bwf": {
- "english_name": "Boselewa"
- },
- "sho": {
- "english_name": "Shanga"
- },
- "pbt": {
- "english_name": "Pashto, Southern"
- },
- "ajg": {
- "english_name": "Aja (Benin)"
- },
- "elm": {
- "english_name": "Eleme"
- },
- "jhi": {
- "english_name": "Jehai"
- },
- "kqf": {
- "english_name": "Kakabai"
- },
- "num": {
- "english_name": "Niuafo'ou"
- },
- "xmf": {
- "english_name": "Mingrelian"
- },
- "nko": {
- "english_name": "Nkonya"
- },
- "mfm": {
- "english_name": "Marghi South"
- },
- "esm": {
- "english_name": "Esuma"
- },
- "plo": {
- "english_name": "Popoluca, Oluta"
- },
- "zbe": {
- "english_name": "Berawan, East"
- },
- "tbs": {
- "english_name": "Tanguat"
- },
- "khs": {
- "english_name": "Kasua"
- },
- "jct": {
- "english_name": "Krymchak"
- },
- "rkh": {
- "english_name": "Rakahanga-Manihiki"
- },
- "yug": {
- "english_name": "Yug"
- },
- "haz": {
- "english_name": "Hazaragi"
- },
- "qub": {
- "english_name": "Quechua, Huallaga Huánuco"
- },
- "ram": {
- "english_name": "Canela"
- },
- "wfg": {
- "english_name": "Yafi"
- },
- "ola": {
- "english_name": "Walungge"
- },
- "pss": {
- "english_name": "Kaulong"
- },
- "gbx": {
- "english_name": "Gbe, Eastern Xwla"
- },
- "bvt": {
- "english_name": "Bati (Indonesia)"
- },
- "mwo": {
- "english_name": "Maewo, Central"
- },
- "hlu": {
- "english_name": "Luwian, Hieroglyphic"
- },
- "wac": {
- "english_name": "Wasco-Wishram"
- },
- "goh": {
- "english_name": "German, Old High (ca. 750-1050)"
- },
- "ner": {
- "english_name": "Yahadian"
- },
- "bwk": {
- "english_name": "Bauwaki"
- },
- "ofu": {
- "english_name": "Efutop"
- },
- "mvd": {
- "english_name": "Mamboru"
- },
- "arj": {
- "english_name": "Arapaso"
- },
- "zme": {
- "english_name": "Mangerr"
- },
- "tux": {
- "english_name": "Tuxináwa"
- },
- "wiu": {
- "english_name": "Wiru"
- },
- "mgt": {
- "english_name": "Mongol"
- },
- "tlq": {
- "english_name": "Tai Loi"
- },
- "irn": {
- "english_name": "Irántxe"
- },
- "lsh": {
- "english_name": "Lish"
- },
- "yrl": {
- "english_name": "Nhengatu"
- },
- "syr": {
- "english_name": "Syriac"
- },
- "nbp": {
- "english_name": "Nnam"
- },
- "gso": {
- "english_name": "Gbaya, Southwest"
- },
- "uky": {
- "english_name": "Kuuk-Yak"
- },
- "ppt": {
- "english_name": "Pare"
- },
- "toy": {
- "english_name": "Topoiyo"
- },
- "wlx": {
- "english_name": "Wali (Ghana)"
- },
- "mfd": {
- "english_name": "Mendankwe-Nkwen"
- },
- "ikk": {
- "english_name": "Ika"
- },
- "pce": {
- "english_name": "Palaung, Ruching"
- },
- "vnk": {
- "english_name": "Vano"
- },
- "wrx": {
- "english_name": "Wae Rana"
- },
- "nlo": {
- "english_name": "Ngul"
- },
- "rui": {
- "english_name": "Rufiji"
- },
- "soy": {
- "english_name": "Miyobe"
- },
- "inj": {
- "english_name": "Inga, Jungle"
- },
- "dgo": {
- "english_name": "Dogri (individual language)"
- },
- "afu": {
- "english_name": "Awutu"
- },
- "kvd": {
- "english_name": "Kui (Indonesia)"
- },
- "nyd": {
- "english_name": "Nyore"
- },
- "mqx": {
- "english_name": "Mamuju"
- },
- "ngm": {
- "english_name": "Ngatik Men's Creole"
- },
- "cmi": {
- "english_name": "Emberá-Chamí"
- },
- "bve": {
- "english_name": "Malay, Berau"
- },
- "nia": {
- "english_name": "Nias"
- },
- "ige": {
- "english_name": "Igede"
- },
- "rgk": {
- "english_name": "Rangkas"
- },
- "urh": {
- "english_name": "Urhobo"
- },
- "dmr": {
- "english_name": "Damar, East"
- },
- "drl": {
- "english_name": "Paakantyi"
- },
- "dow": {
- "english_name": "Doyayo"
- },
- "kwu": {
- "english_name": "Kwakum"
- },
- "jub": {
- "english_name": "Wannu"
- },
- "wrr": {
- "english_name": "Wardaman"
- },
- "lvu": {
- "english_name": "Levuka"
- },
- "lom": {
- "english_name": "Loma (Liberia)"
- },
- "kgm": {
- "english_name": "Karipúna"
- },
- "kkj": {
- "english_name": "Kako"
- },
- "gyn": {
- "english_name": "Creole English, Guyanese"
- },
- "tde": {
- "english_name": "Dogon, Tiranige Diga"
- },
- "bvr": {
- "english_name": "Burarra"
- },
- "kqi": {
- "english_name": "Koitabu"
- },
- "dhs": {
- "english_name": "Dhaiso"
- },
- "mbe": {
- "english_name": "Molale"
- },
- "myc": {
- "english_name": "Mayeka"
- },
- "pof": {
- "english_name": "Poke"
- },
- "gnm": {
- "english_name": "Ginuman"
- },
- "mpx": {
- "english_name": "Misima-Panaeati"
- },
- "tod": {
- "english_name": "Toma"
- },
- "gan": {
- "english_name": "Chinese, Gan"
- },
- "cgc": {
- "english_name": "Kagayanen"
- },
- "udl": {
- "english_name": "Wuzlam"
- },
- "twm": {
- "english_name": "Monpa, Tawang"
- },
- "tke": {
- "english_name": "Takwane"
- },
- "mvq": {
- "english_name": "Moere"
- },
- "byj": {
- "english_name": "Bina (Nigeria)"
- },
- "qxw": {
- "english_name": "Quechua, Jauja Wanca"
- },
- "ocu": {
- "english_name": "Matlatzinca, Atzingo"
- },
- "bqf": {
- "english_name": "Baga Kaloum"
- },
- "gmb": {
- "english_name": "Gula'alaa"
- },
- "usk": {
- "english_name": "Usaghade"
- },
- "nwc": {
- "english_name": "Newari, Classical"
- },
- "thp": {
- "english_name": "Thompson"
- },
- "mch": {
- "english_name": "Maquiritari"
- },
- "hiw": {
- "english_name": "Hiw"
- },
- "nan": {
- "english_name": "Chinese, Min Nan"
- },
- "yuk": {
- "english_name": "Yuki"
- },
- "yad": {
- "english_name": "Yagua"
- },
- "wri": {
- "english_name": "Wariyangga"
- },
- "awi": {
- "english_name": "Aekyom"
- },
- "siy": {
- "english_name": "Sivandi"
- },
- "nhr": {
- "english_name": "Naro"
- },
- "pbe": {
- "english_name": "Popoloca, Mezontla"
- },
- "tkm": {
- "english_name": "Takelma"
- },
- "xpq": {
- "english_name": "Mohegan-Pequot"
- },
- "ybx": {
- "english_name": "Yawiyo"
- },
- "bcw": {
- "english_name": "Bana"
- },
- "mcj": {
- "english_name": "Mvanip"
- },
- "aih": {
- "english_name": "Ai-Cham"
- },
- "bqk": {
- "english_name": "Banda-Mbrès"
- },
- "abq": {
- "english_name": "Abaza"
- },
- "tnk": {
- "english_name": "Kwamera"
- },
- "asw": {
- "english_name": "Australian Aborigines Sign Language"
- },
- "fai": {
- "english_name": "Faiwol"
- },
- "grv": {
- "english_name": "Grebo, Central"
- },
- "egy": {
- "english_name": "Egyptian (Ancient)"
- },
- "zil": {
- "english_name": "Zialo"
- },
- "sro": {
- "english_name": "Sardinian, Campidanese"
- },
- "ese": {
- "english_name": "Ese Ejja"
- },
- "duq": {
- "english_name": "Dusun Malang"
- },
- "ekg": {
- "english_name": "Ekari"
- },
- "prk": {
- "english_name": "Parauk"
- },
- "tex": {
- "english_name": "Tennet"
- },
- "nja": {
- "english_name": "Nzanyi"
- },
- "nmm": {
- "english_name": "Manangba"
- },
- "kod": {
- "english_name": "Kodi"
- },
- "pab": {
- "english_name": "Parecís"
- },
- "wul": {
- "english_name": "Silimo"
- },
- "usp": {
- "english_name": "Uspanteco"
- },
- "vka": {
- "english_name": "Kariyarra"
- },
- "trn": {
- "english_name": "Trinitario"
- },
- "xel": {
- "english_name": "Kelo"
- },
- "tau": {
- "english_name": "Tanana, Upper"
- },
- "ubr": {
- "english_name": "Ubir"
- },
- "qxh": {
- "english_name": "Quechua, Panao Huánuco"
- },
- "bah": {
- "english_name": "Creole English, Bahamas"
- },
- "lea": {
- "english_name": "Lega-Shabunda"
- },
- "aof": {
- "english_name": "Bragat"
- },
- "xnn": {
- "english_name": "Kankanay, Northern"
- },
- "mhc": {
- "english_name": "Mocho"
- },
- "aek": {
- "english_name": "Haeke"
- },
- "rel": {
- "english_name": "Rendille"
- },
- "gnn": {
- "english_name": "Gumatj"
- },
- "okk": {
- "english_name": "One, Kwamtim"
- },
- "thq": {
- "english_name": "Tharu, Kochila"
- },
- "aqm": {
- "english_name": "Atohwaim"
- },
- "mqo": {
- "english_name": "Modole"
- },
- "toc": {
- "english_name": "Totonac, Coyutla"
- },
- "kqr": {
- "english_name": "Kimaragang"
- },
- "ado": {
- "english_name": "Abu"
- },
- "nbn": {
- "english_name": "Kuri"
- },
- "ksk": {
- "english_name": "Kansa"
- },
- "ztq": {
- "english_name": "Zapotec, Quioquitani-Quierí"
- },
- "vam": {
- "english_name": "Vanimo"
- },
- "bdi": {
- "english_name": "Burun"
- },
- "guw": {
- "english_name": "Gun"
- },
- "pej": {
- "english_name": "Pomo, Northern"
- },
- "jbe": {
- "english_name": "Judeo-Berber"
- },
- "ogc": {
- "english_name": "Ogbah"
- },
- "bvv": {
- "english_name": "Baniva"
- },
- "gah": {
- "english_name": "Alekano"
- },
- "adt": {
- "english_name": "Adnyamathanha"
- },
- "dud": {
- "english_name": "Hun-Saare"
- },
- "ckb": {
- "english_name": "Kurdish, Central"
- },
- "luw": {
- "english_name": "Luo (Cameroon)"
- },
- "mtc": {
- "english_name": "Munit"
- },
- "kzn": {
- "english_name": "Kokola"
- },
- "pmx": {
- "english_name": "Naga, Poumei"
- },
- "huq": {
- "english_name": "Tsat"
- },
- "cyo": {
- "english_name": "Cuyonon"
- },
- "srr": {
- "english_name": "Serer"
- },
- "ldm": {
- "english_name": "Landoma"
- },
- "gld": {
- "english_name": "Nanai"
- },
- "acz": {
- "english_name": "Acheron"
- },
- "ymk": {
- "english_name": "Makwe"
- },
- "mzy": {
- "english_name": "Mozambican Sign Language"
- },
- "ysd": {
- "english_name": "Samatao"
- },
- "jdg": {
- "english_name": "Jadgali"
- },
- "bgy": {
- "english_name": "Benggoi"
- },
- "bwh": {
- "english_name": "Bishuo"
- },
- "tgq": {
- "english_name": "Tring"
- },
- "afz": {
- "english_name": "Obokuitai"
- },
- "bln": {
- "english_name": "Bikol, Southern Catanduanes"
- },
- "tng": {
- "english_name": "Tobanga"
- },
- "nhe": {
- "english_name": "Nahuatl, Eastern Huasteca"
- },
- "ulk": {
- "english_name": "Meriam"
- },
- "it": {
- "english_name": "Italian",
- "name": "Italiano"
- },
- "lef": {
- "english_name": "Lelemi"
- },
- "uiv": {
- "english_name": "Iyive"
- },
- "nps": {
- "english_name": "Nipsan"
- },
- "mop": {
- "english_name": "Mopán Maya"
- },
- "njo": {
- "english_name": "Naga, Ao"
- },
- "lll": {
- "english_name": "Lilau"
- },
- "nec": {
- "english_name": "Nedebang"
- },
- "mmi": {
- "english_name": "Musar"
- },
- "vki": {
- "english_name": "Ija-Zuba"
- },
- "blp": {
- "english_name": "Blablanga"
- },
- "ga": {
- "english_name": "Irish",
- "name": "Gaeilge"
- },
- "tol": {
- "english_name": "Tolowa"
- },
- "bmr": {
- "english_name": "Muinane"
- },
- "yzg": {
- "english_name": "Buyang, E'ma"
- },
- "gog": {
- "english_name": "Gogo"
- },
- "bmx": {
- "english_name": "Baimak"
- },
- "lis": {
- "english_name": "Lisu"
- },
- "mwg": {
- "english_name": "Aiklep"
- },
- "acl": {
- "english_name": "Akar-Bale"
- },
- "gak": {
- "english_name": "Gamkonora"
- },
- "ilg": {
- "english_name": "Garig-Ilgar"
- },
- "mbh": {
- "english_name": "Mangseng"
- },
- "ykr": {
- "english_name": "Yekora"
- },
- "tdl": {
- "english_name": "Sur"
- },
- "wep": {
- "english_name": "Westphalien"
- },
- "ogb": {
- "english_name": "Ogbia"
- },
- "omt": {
- "english_name": "Omotik"
- },
- "pso": {
- "english_name": "Polish Sign Language"
- },
- "kcp": {
- "english_name": "Kanga"
- },
- "pnb": {
- "english_name": "Panjabi, Western"
- },
- "uln": {
- "english_name": "Unserdeutsch"
- },
- "nbb": {
- "english_name": "Ndoe"
- },
- "swy": {
- "english_name": "Sarua"
- },
- "wet": {
- "english_name": "Perai"
- },
- "mje": {
- "english_name": "Muskum"
- },
- "miw": {
- "english_name": "Akoye"
- },
- "dty": {
- "english_name": "Dotyali"
- },
- "cak": {
- "english_name": "Kaqchikel"
- },
- "bmm": {
- "english_name": "Malagasy, Northern Betsimisaraka"
- },
- "khz": {
- "english_name": "Keapara"
- },
- "bbz": {
- "english_name": "Creole Arabic, Babalia"
- },
- "lje": {
- "english_name": "Rampi"
- },
- "plr": {
- "english_name": "Senoufo, Palaka"
- },
- "gud": {
- "english_name": "Dida, Yocoboué"
- },
- "ksf": {
- "english_name": "Bafia"
- },
- "mnh": {
- "english_name": "Mono (Democratic Republic of Congo)"
- },
- "pgs": {
- "english_name": "Pangseng"
- },
- "yin": {
- "english_name": "Yinchia"
- },
- "kke": {
- "english_name": "Kakabe"
- },
- "yoi": {
- "english_name": "Yonaguni"
- },
- "zpy": {
- "english_name": "Zapotec, Mazaltepec"
- },
- "anp": {
- "english_name": "Angika"
- },
- "sub": {
- "english_name": "Suku"
- },
- "brq": {
- "english_name": "Breri"
- },
- "utp": {
- "english_name": "Amba (Solomon Islands)"
- },
- "nv": {
- "english_name": "Navajo"
- },
- "gmn": {
- "english_name": "Gimnime"
- },
- "nmn": {
- "english_name": "!Xóõ"
- },
- "ndr": {
- "english_name": "Ndoola"
- },
- "nae": {
- "english_name": "Naka'ela"
- },
- "ang": {
- "english_name": "English, Old (ca. 450-1100)"
- },
- "bzy": {
- "english_name": "Obanliku"
- },
- "azt": {
- "english_name": "Atta, Faire"
- },
- "atc": {
- "english_name": "Atsahuaca"
- },
- "ndm": {
- "english_name": "Ndam"
- },
- "bjv": {
- "english_name": "Bedjond"
- },
- "lb": {
- "english_name": "Luxembourgish"
- },
- "kzw": {
- "english_name": "Karirí-Xocó"
- },
- "rou": {
- "english_name": "Runga"
- },
- "gnu": {
- "english_name": "Gnau"
- },
- "sgd": {
- "english_name": "Surigaonon"
- },
- "mjv": {
- "english_name": "Mannan"
- },
- "dic": {
- "english_name": "Dida, Lakota"
- },
- "wry": {
- "english_name": "Merwari"
- },
- "lkr": {
- "english_name": "Päri"
- },
- "gdt": {
- "english_name": "Kungardutyi"
- },
- "lky": {
- "english_name": "Lokoya"
- },
- "gni": {
- "english_name": "Gooniyandi"
- },
- "ood": {
- "english_name": "Tohono O'odham"
- },
- "bbw": {
- "english_name": "Baba"
- },
- "dui": {
- "english_name": "Dumun"
- },
- "kzl": {
- "english_name": "Kayeli"
- },
- "ksh": {
- "english_name": "Kölsch"
- },
- "xiy": {
- "english_name": "Xipaya"
- },
- "yww": {
- "english_name": "Yawarawarga"
- },
- "spk": {
- "english_name": "Sengo"
- },
- "bnb": {
- "english_name": "Bookan"
- },
- "lui": {
- "english_name": "Luiseno"
- },
- "xpm": {
- "english_name": "Pumpokol"
- },
- "ngg": {
- "english_name": "Ngbaka Manza"
- },
- "ghn": {
- "english_name": "Ghanongga"
- },
- "swj": {
- "english_name": "Sira"
- },
- "mtg": {
- "english_name": "Una"
- },
- "ngu": {
- "english_name": "Nahuatl, Guerrero"
- },
- "nju": {
- "english_name": "Ngadjunmaya"
- },
- "vgr": {
- "english_name": "Vaghri"
- },
- "wlm": {
- "english_name": "Welsh, Middle"
- },
- "rag": {
- "english_name": "Logooli"
- },
- "pth": {
- "english_name": "Pataxó Hã-Ha-Hãe"
- },
- "sdz": {
- "english_name": "Sallands"
- },
- "tul": {
- "english_name": "Tula"
- },
- "xre": {
- "english_name": "Kreye"
- },
- "mxx": {
- "english_name": "Mahou"
- },
- "mdl": {
- "english_name": "Maltese Sign Language"
- },
- "dsb": {
- "english_name": "Sorbian, Lower"
- },
- "ake": {
- "english_name": "Akawaio"
- },
- "bxs": {
- "english_name": "Busam"
- },
- "sjn": {
- "english_name": "Sindarin"
- },
- "bpw": {
- "english_name": "Bo (Papua New Guinea)"
- },
- "cbd": {
- "english_name": "Carijona"
- },
- "gce": {
- "english_name": "Galice"
- },
- "nez": {
- "english_name": "Nez Perce"
- },
- "djm": {
- "english_name": "Dogon, Jamsay"
- },
- "aku": {
- "english_name": "Akum"
- },
- "vel": {
- "english_name": "Veluws"
- },
- "ndj": {
- "english_name": "Ndamba"
- },
- "vmz": {
- "english_name": "Mazatec, Mazatlán"
- },
- "gru": {
- "english_name": "Kistane"
- },
- "bey": {
- "english_name": "Beli (Papua New Guinea)"
- },
- "dyy": {
- "english_name": "Dyaabugay"
- },
- "piz": {
- "english_name": "Pije"
- },
- "bbs": {
- "english_name": "Bakpinka"
- },
- "ykl": {
- "english_name": "Khlula"
- },
- "plc": {
- "english_name": "Palawano, Central"
- },
- "met": {
- "english_name": "Mato"
- },
- "tus": {
- "english_name": "Tuscarora"
- },
- "xjt": {
- "english_name": "Jaitmatang"
- },
- "ktt": {
- "english_name": "Ketum"
- },
- "aqg": {
- "english_name": "Arigidi"
- },
- "mhp": {
- "english_name": "Malay, Balinese"
- },
- "neq": {
- "english_name": "Mixe, North Central"
- },
- "umb": {
- "english_name": "Umbundu"
- },
- "dnw": {
- "english_name": "Dani, Western"
- },
- "fly": {
- "english_name": "Tsotsitaal"
- },
- "zbl": {
- "english_name": "Blissymbols"
- },
- "tub": {
- "english_name": "Tübatulabal"
- },
- "oma": {
- "english_name": "Omaha-Ponca"
- },
- "gbn": {
- "english_name": "Mo'da"
- },
- "hch": {
- "english_name": "Huichol"
- },
- "bib": {
- "english_name": "Bissa"
- },
- "agt": {
- "english_name": "Agta, Central Cagayan"
- },
- "kvg": {
- "english_name": "Kuni-Boazi"
- },
- "crg": {
- "english_name": "Michif"
- },
- "cjn": {
- "english_name": "Chenapian"
- },
- "yrk": {
- "english_name": "Nenets"
- },
- "xse": {
- "english_name": "Sempan"
- },
- "gux": {
- "english_name": "Gourmanchéma"
- },
- "xvi": {
- "english_name": "Kamviri"
- },
- "kbo": {
- "english_name": "Keliko"
- },
- "gat": {
- "english_name": "Kenati"
- },
- "liv": {
- "english_name": "Liv"
- },
- "kqn": {
- "english_name": "Kaonde"
- },
- "cvn": {
- "english_name": "Chinantec, Valle Nacional"
- },
- "sdh": {
- "english_name": "Kurdish, Southern"
- },
- "xma": {
- "english_name": "Mushungulu"
- },
- "tmt": {
- "english_name": "Tasmate"
- },
- "tpk": {
- "english_name": "Tupinikin"
- },
- "pcl": {
- "english_name": "Pardhi"
- },
- "ztn": {
- "english_name": "Zapotec, Santa Catarina Albarradas"
- },
- "ttk": {
- "english_name": "Totoro"
- },
- "ydk": {
- "english_name": "Yoidik"
- },
- "xua": {
- "english_name": "Kurumba, Alu"
- },
- "keo": {
- "english_name": "Kakwa"
- },
- "otk": {
- "english_name": "Turkish, Old"
- },
- "njd": {
- "english_name": "Ndonde Hamba"
- },
- "nxx": {
- "english_name": "Nafri"
- },
- "xly": {
- "english_name": "Elymian"
- },
- "lbz": {
- "english_name": "Lardil"
- },
- "sie": {
- "english_name": "Simaa"
- },
- "yam": {
- "english_name": "Yamba"
- },
- "wba": {
- "english_name": "Warao"
- },
- "scp": {
- "english_name": "Helambu Sherpa"
- },
- "is": {
- "english_name": "Icelandic",
- "name": "Íslenska"
- },
- "daz": {
- "english_name": "Dao"
- },
- "bym": {
- "english_name": "Bidyara"
- },
- "tnc": {
- "english_name": "Tanimuca-Retuarã"
- },
- "oon": {
- "english_name": "Önge"
- },
- "biz": {
- "english_name": "Baloi"
- },
- "bia": {
- "english_name": "Badimaya"
- },
- "smf": {
- "english_name": "Auwe"
- },
- "wrz": {
- "english_name": "Waray (Australia)"
- },
- "emn": {
- "english_name": "Eman"
- },
- "tva": {
- "english_name": "Vaghua"
- },
- "tpm": {
- "english_name": "Tampulma"
- },
- "klo": {
- "english_name": "Kapya"
- },
- "kib": {
- "english_name": "Koalib"
- },
- "ibn": {
- "english_name": "Ibino"
- },
- "but": {
- "english_name": "Bungain"
- },
- "xtz": {
- "english_name": "Tasmanian"
- },
- "ttz": {
- "english_name": "Tsum"
- },
- "nrg": {
- "english_name": "Narango"
- },
- "ibu": {
- "english_name": "Ibu"
- },
- "sux": {
- "english_name": "Sumerian"
- },
- "snq": {
- "english_name": "Sangu (Gabon)"
- },
- "tkb": {
- "english_name": "Buksa"
- },
- "akr": {
- "english_name": "Araki"
- },
- "tdj": {
- "english_name": "Tajio"
- },
- "mle": {
- "english_name": "Manambu"
- },
- "bgk": {
- "english_name": "Bit"
- },
- "mwz": {
- "english_name": "Moingi"
- },
- "hmj": {
- "english_name": "Ge"
- },
- "kgs": {
- "english_name": "Kumbainggar"
- },
- "mjz": {
- "english_name": "Majhi"
- },
- "arz": {
- "english_name": "Arabic, Egyptian"
- },
- "tbv": {
- "english_name": "Tobo"
- },
- "wbf": {
- "english_name": "Wara"
- },
- "acx": {
- "english_name": "Arabic, Omani"
- },
- "bst": {
- "english_name": "Basketo"
- },
- "jad": {
- "english_name": "Jahanka"
- },
- "xgg": {
- "english_name": "Goreng"
- },
- "mgy": {
- "english_name": "Mbunga"
- },
- "tax": {
- "english_name": "Tamki"
- },
- "vag": {
- "english_name": "Vagla"
- },
- "trv": {
- "english_name": "Taroko"
- },
- "uba": {
- "english_name": "Ubang"
- },
- "jna": {
- "english_name": "Jangshung"
- },
- "quq": {
- "english_name": "Quinqui"
- },
- "jko": {
- "english_name": "Kubo"
- },
- "mfi": {
- "english_name": "Wandala"
- },
- "zpa": {
- "english_name": "Zapotec, Lachiguiri"
- },
- "mcv": {
- "english_name": "Minanibai"
- },
- "mwf": {
- "english_name": "Murrinh-Patha"
- },
- "kgi": {
- "english_name": "Selangor Sign Language"
- },
- "del": {
- "english_name": "Delaware"
- },
- "bhb": {
- "english_name": "Bhili"
- },
- "juy": {
- "english_name": "Juray"
- },
- "gng": {
- "english_name": "Ngangam"
- },
- "nlc": {
- "english_name": "Nalca"
- },
- "bsv": {
- "english_name": "Baga Sobané"
- },
- "lut": {
- "english_name": "Lushootseed"
- },
- "lng": {
- "english_name": "Langobardic"
- },
- "ahg": {
- "english_name": "Qimant"
- },
- "ngt": {
- "english_name": "Ngeq"
- },
- "nsz": {
- "english_name": "Nisenan"
- },
- "si": {
- "english_name": "Sinhala"
- },
- "seq": {
- "english_name": "Sénoufo, Senara"
- },
- "xmy": {
- "english_name": "Mayaguduna"
- },
- "tlt": {
- "english_name": "Teluti"
- },
- "arr": {
- "english_name": "Karo (Brazil)"
- },
- "bfi": {
- "english_name": "British Sign Language"
- },
- "fir": {
- "english_name": "Firan"
- },
- "jih": {
- "english_name": "sTodsde"
- },
- "pos": {
- "english_name": "Popoluca, Sayula"
- },
- "tnt": {
- "english_name": "Tontemboan"
- },
- "kqx": {
- "english_name": "Mser"
- },
- "myx": {
- "english_name": "Masaaba"
- },
- "gbw": {
- "english_name": "Gabi-Gabi"
- },
- "wsi": {
- "english_name": "Wusi"
- },
- "guz": {
- "english_name": "Gusii"
- },
- "rnr": {
- "english_name": "Nari Nari"
- },
- "azg": {
- "english_name": "Amuzgo, San Pedro Amuzgos"
- },
- "apq": {
- "english_name": "A-Pucikwar"
- },
- "lra": {
- "english_name": "Rara Bakati'"
- },
- "zzj": {
- "english_name": "Zhuang, Zuojiang"
- },
- "syo": {
- "english_name": "Suoy"
- },
- "lez": {
- "english_name": "Lezghian"
- },
- "ntz": {
- "english_name": "Natanzi"
- },
- "tto": {
- "english_name": "Ta'oih, Lower"
- },
- "nee": {
- "english_name": "Nêlêmwa-Nixumwak"
- },
- "fur": {
- "english_name": "Friulian"
- },
- "jiq": {
- "english_name": "Guanyinqiao"
- },
- "bgs": {
- "english_name": "Tagabawa"
- },
- "lnn": {
- "english_name": "Lorediakarkar"
- },
- "krw": {
- "english_name": "Krahn, Western"
- },
- "pnw": {
- "english_name": "Panytyima"
- },
- "zeh": {
- "english_name": "Zhuang, Eastern Hongshuihe"
- },
- "ptp": {
- "english_name": "Patep"
- },
- "wbi": {
- "english_name": "Vwanji"
- },
- "mee": {
- "english_name": "Mengen"
- },
- "viv": {
- "english_name": "Iduna"
- },
- "bua": {
- "english_name": "Buriat"
- },
- "sgx": {
- "english_name": "Sierra Leone Sign Language"
- },
- "fuq": {
- "english_name": "Fulfulde, Central-Eastern Niger"
- },
- "snp": {
- "english_name": "Siane"
- },
- "kjd": {
- "english_name": "Kiwai, Southern"
- },
- "rar": {
- "english_name": "Rarotongan"
- },
- "vao": {
- "english_name": "Vao"
- },
- "myd": {
- "english_name": "Maramba"
- },
- "mef": {
- "english_name": "Megam"
- },
- "yso": {
- "english_name": "Nisi (China)"
- },
- "kfa": {
- "english_name": "Kodava"
- },
- "qxr": {
- "english_name": "Quichua, Cañar Highland"
- },
- "nac": {
- "english_name": "Narak"
- },
- "jgo": {
- "english_name": "Ngomba"
- },
- "bha": {
- "english_name": "Bharia"
- },
- "obk": {
- "english_name": "Bontok, Southern"
- },
- "koh": {
- "english_name": "Koyo"
- },
- "cik": {
- "english_name": "Kinnauri, Chitkuli"
- },
- "prm": {
- "english_name": "Kibiri"
- },
- "ksp": {
- "english_name": "Kaba"
- },
- "wsv": {
- "english_name": "Wotapuri-Katarqalai"
- },
- "jkp": {
- "english_name": "Karen, Paku"
- },
- "dbo": {
- "english_name": "Dulbu"
- },
- "kg": {
- "english_name": "Kongo"
- },
- "mxy": {
- "english_name": "Mixtec, Southeastern Nochixtlán"
- },
- "hmb": {
- "english_name": "Songhay, Humburi Senni"
- },
- "yss": {
- "english_name": "Yessan-Mayo"
- },
- "bmh": {
- "english_name": "Kein"
- },
- "tak": {
- "english_name": "Tala"
- },
- "oos": {
- "english_name": "Ossetic, Old"
- },
- "geb": {
- "english_name": "Kire"
- },
- "xwg": {
- "english_name": "Kwegu"
- },
- "bvj": {
- "english_name": "Baan"
- },
- "sdu": {
- "english_name": "Sarudu"
- },
- "yns": {
- "english_name": "Yansi"
- },
- "pij": {
- "english_name": "Pijao"
- },
- "sxg": {
- "english_name": "Shixing"
- },
- "vmy": {
- "english_name": "Mazatec, Ayautla"
- },
- "lrv": {
- "english_name": "Larevat"
- },
- "llu": {
- "english_name": "Lau"
- },
- "wmw": {
- "english_name": "Mwani"
- },
- "wau": {
- "english_name": "Waurá"
- },
- "zrs": {
- "english_name": "Mairasi"
- },
- "stm": {
- "english_name": "Setaman"
- },
- "yee": {
- "english_name": "Yimas"
- },
- "bci": {
- "english_name": "Baoulé"
- },
- "lcc": {
- "english_name": "Legenyem"
- },
- "tth": {
- "english_name": "Ta'oih, Upper"
- },
- "lgh": {
- "english_name": "Laghuu"
- },
- "fum": {
- "english_name": "Fum"
- },
- "lhh": {
- "english_name": "Laha (Indonesia)"
- },
- "hmw": {
- "english_name": "Hmong, Western Mashan"
- },
- "mka": {
- "english_name": "Mbre"
- },
- "hnh": {
- "english_name": "//Ani"
- },
- "bpy": {
- "english_name": "Bishnupriya"
- },
- "cea": {
- "english_name": "Chehalis, Lower"
- },
- "yit": {
- "english_name": "Lalu, Eastern"
- },
- "rtm": {
- "english_name": "Rotuman"
- },
- "sjt": {
- "english_name": "Sami, Ter"
- },
- "atr": {
- "english_name": "Waimiri-Atroari"
- },
- "ote": {
- "english_name": "Otomi, Mezquital"
- },
- "yue": {
- "english_name": "Chinese, Yue"
- },
- "sbl": {
- "english_name": "Sambal, Botolan"
- },
- "muv": {
- "english_name": "Muthuvan"
- },
- "leu": {
- "english_name": "Kara (Papua New Guinea)"
- },
- "lgn": {
- "english_name": "Opuuo"
- },
- "uji": {
- "english_name": "Tanjijili"
- },
- "alk": {
- "english_name": "Alak"
- },
- "akf": {
- "english_name": "Akpa"
- },
- "lie": {
- "english_name": "Likila"
- },
- "vra": {
- "english_name": "Vera'a"
- },
- "mty": {
- "english_name": "Nabi"
- },
- "soo": {
- "english_name": "Songo"
- },
- "btx": {
- "english_name": "Batak Karo"
- },
- "yik": {
- "english_name": "Lalo, Dongshanba"
- },
- "alw": {
- "english_name": "Alaba-K’abeena"
- },
- "cry": {
- "english_name": "Cori"
- },
- "guv": {
- "english_name": "Gey"
- },
- "unx": {
- "english_name": "Munda"
- },
- "pcb": {
- "english_name": "Pear"
- },
- "bsh": {
- "english_name": "Kati"
- },
- "duv": {
- "english_name": "Duvle"
- },
- "okr": {
- "english_name": "Kirike"
- },
- "mdb": {
- "english_name": "Morigi"
- },
- "crw": {
- "english_name": "Chrau"
- },
- "owl": {
- "english_name": "Welsh, Old"
- },
- "tsk": {
- "english_name": "Tseku"
- },
- "ump": {
- "english_name": "Umpila"
- },
- "kcb": {
- "english_name": "Kawacha"
- },
- "rej": {
- "english_name": "Rejang"
- },
- "gos": {
- "english_name": "Gronings"
- },
- "kiu": {
- "english_name": "Kirmanjki (individual language)"
- },
- "mqz": {
- "english_name": "Pano"
- },
- "swi": {
- "english_name": "Sui"
- },
- "awe": {
- "english_name": "Awetí"
- },
- "shu": {
- "english_name": "Arabic, Chadian"
- },
- "hwo": {
- "english_name": "Hwana"
- },
- "xkg": {
- "english_name": "Kagoro"
- },
- "dbi": {
- "english_name": "Doka"
- },
- "bez": {
- "english_name": "Bena (Tanzania)"
- },
- "cuw": {
- "english_name": "Chukwa"
- },
- "ylb": {
- "english_name": "Yaleba"
- },
- "mmr": {
- "english_name": "Miao, Western Xiangxi"
- },
- "bro": {
- "english_name": "Brokkat"
- },
- "jle": {
- "english_name": "Ngile"
- },
- "lbl": {
- "english_name": "Bikol, Libon"
- },
- "kdd": {
- "english_name": "Yankunytjatjara"
- },
- "jaq": {
- "english_name": "Yaqay"
- },
- "ckr": {
- "english_name": "Kairak"
- },
- "acp": {
- "english_name": "Acipa, Eastern"
- },
- "bcz": {
- "english_name": "Bainouk-Gunyaamolo"
- },
- "sst": {
- "english_name": "Sinasina"
- },
- "tgx": {
- "english_name": "Tagish"
- },
- "jbi": {
- "english_name": "Badjiri"
- },
- "br": {
- "english_name": "Breton",
- "name": "Brezhoneg"
- },
- "bit": {
- "english_name": "Berinomo"
- },
- "nst": {
- "english_name": "Naga, Tase"
- },
- "ypp": {
- "english_name": "Phupa"
- },
- "rat": {
- "english_name": "Razajerdi"
- },
- "myo": {
- "english_name": "Anfillo"
- },
- "bka": {
- "english_name": "Kyak"
- },
- "yux": {
- "english_name": "Yukaghir, Southern"
- },
- "lud": {
- "english_name": "Ludian"
- },
- "cga": {
- "english_name": "Changriwa"
- },
- "tru": {
- "english_name": "Turoyo"
- },
- "wmc": {
- "english_name": "Wamas"
- },
- "coz": {
- "english_name": "Chochotec"
- },
- "elh": {
- "english_name": "El Hugeirat"
- },
- "ktr": {
- "english_name": "Kota Marudu Tinagas"
- },
- "iso": {
- "english_name": "Isoko"
- },
- "bpt": {
- "english_name": "Barrow Point"
- },
- "diu": {
- "english_name": "Diriku"
- },
- "prs": {
- "english_name": "Dari"
- },
- "wag": {
- "english_name": "Wa'ema"
- },
- "kbv": {
- "english_name": "Dera (Indonesia)"
- },
- "gwj": {
- "english_name": "/Gwi"
- },
- "nru": {
- "english_name": "Narua"
- },
- "hih": {
- "english_name": "Pamosu"
- },
- "dnu": {
- "english_name": "Danau"
- },
- "old": {
- "english_name": "Mochi"
- },
- "uvl": {
- "english_name": "Lote"
- },
- "lia": {
- "english_name": "Limba, West-Central"
- },
- "mkx": {
- "english_name": "Manobo, Kinamiging"
- },
- "fap": {
- "english_name": "Palor"
- },
- "fah": {
- "english_name": "Fali, Baissa"
- },
- "gnt": {
- "english_name": "Guntai"
- },
- "kze": {
- "english_name": "Kosena"
- },
- "pta": {
- "english_name": "Pai Tavytera"
- },
- "lbi": {
- "english_name": "La'bi"
- },
- "glo": {
- "english_name": "Galambu"
- },
- "biy": {
- "english_name": "Birhor"
- },
- "reb": {
- "english_name": "Rembong"
- },
- "pwi": {
- "english_name": "Patwin"
- },
- "tid": {
- "english_name": "Tidong"
- },
- "ppn": {
- "english_name": "Papapana"
- },
- "coy": {
- "english_name": "Coyaima"
- },
- "gon": {
- "english_name": "Gondi"
- },
- "kzj": {
- "english_name": "Kadazan, Coastal"
- },
- "xgu": {
- "english_name": "Unggumi"
- },
- "bll": {
- "english_name": "Biloxi"
- },
- "gam": {
- "english_name": "Kandawo"
- },
- "sik": {
- "english_name": "Sikiana"
- },
- "tug": {
- "english_name": "Tunia"
- },
- "rkm": {
- "english_name": "Marka"
- },
- "res": {
- "english_name": "Reshe"
- },
- "tbm": {
- "english_name": "Tagbu"
- },
- "sod": {
- "english_name": "Songoora"
- },
- "ukp": {
- "english_name": "Ukpe-Bayobiri"
- },
- "rbb": {
- "english_name": "Palaung, Rumai"
- },
- "lbe": {
- "english_name": "Lak"
- },
- "msy": {
- "english_name": "Aruamu"
- },
- "bqg": {
- "english_name": "Bago-Kusuntu"
- },
- "lja": {
- "english_name": "Golpa"
- },
- "nnh": {
- "english_name": "Ngiemboon"
- },
- "gdd": {
- "english_name": "Gedaged"
- },
- "rmg": {
- "english_name": "Norwegian, Traveller"
- },
- "jiy": {
- "english_name": "Jinuo, Buyuan"
- },
- "aln": {
- "english_name": "Albanian, Gheg"
- },
- "kow": {
- "english_name": "Kugama"
- },
- "bpp": {
- "english_name": "Kaure"
- },
- "ojv": {
- "english_name": "Ontong Java"
- },
- "thf": {
- "english_name": "Thangmi"
- },
- "khr": {
- "english_name": "Kharia"
- },
- "iml": {
- "english_name": "Miluk"
- },
- "lna": {
- "english_name": "Langbashe"
- },
- "lmr": {
- "english_name": "Lamalera"
- },
- "cda": {
- "english_name": "Choni"
- },
- "wew": {
- "english_name": "Wejewa"
- },
- "akc": {
- "english_name": "Mpur"
- },
- "aa": {
- "english_name": "Afar"
- },
- "siu": {
- "english_name": "Sinagen"
- },
- "yxa": {
- "english_name": "Mayawali"
- },
- "mcn": {
- "english_name": "Masana"
- },
- "imi": {
- "english_name": "Anamgura"
- },
- "lml": {
- "english_name": "Hano"
- },
- "kfi": {
- "english_name": "Kurumba, Kannada"
- },
- "mjo": {
- "english_name": "Malankuravan"
- },
- "kzm": {
- "english_name": "Kais"
- },
- "ymg": {
- "english_name": "Yamongeri"
- },
- "mie": {
- "english_name": "Mixtec, Ocotepec"
- },
- "naf": {
- "english_name": "Nabak"
- },
- "mzh": {
- "english_name": "Wichí Lhamtés Güisnay"
- },
- "bnl": {
- "english_name": "Boon"
- },
- "snu": {
- "english_name": "Senggi"
- },
- "xss": {
- "english_name": "Assan"
- },
- "kmt": {
- "english_name": "Kemtuik"
- },
- "qvy": {
- "english_name": "Queyu"
- },
- "xml": {
- "english_name": "Malaysian Sign Language"
- },
- "rsl": {
- "english_name": "Russian Sign Language"
- },
- "sjg": {
- "english_name": "Assangori"
- },
- "mcc": {
- "english_name": "Bitur"
- },
- "amg": {
- "english_name": "Amurdak"
- },
- "lof": {
- "english_name": "Logol"
- },
- "tek": {
- "english_name": "Teke, Ibali"
- },
- "ctd": {
- "english_name": "Chin, Tedim"
- },
- "bkl": {
- "english_name": "Berik"
- },
- "mnp": {
- "english_name": "Chinese, Min Bei"
- },
- "den": {
- "english_name": "Slave (Athapascan)"
- },
- "bji": {
- "english_name": "Burji"
- },
- "kzq": {
- "english_name": "Kaike"
- },
- "bso": {
- "english_name": "Buso"
- },
- "nmf": {
- "english_name": "Naga, Tangkhul (India)"
- },
- "brb": {
- "english_name": "Lave"
- },
- "cup": {
- "english_name": "Cupeño"
- },
- "sip": {
- "english_name": "Sikkimese"
- },
- "mjl": {
- "english_name": "Mandeali"
- },
- "nkr": {
- "english_name": "Nukuoro"
- },
- "yui": {
- "english_name": "Yurutí"
- },
- "hob": {
- "english_name": "Mari (Madang Province)"
- },
- "llf": {
- "english_name": "Hermit"
- },
- "maj": {
- "english_name": "Mazatec, Jalapa De Díaz"
- },
- "onx": {
- "english_name": "Onin Based Pidgin"
- },
- "ngn": {
- "english_name": "Ngwo"
- },
- "zpl": {
- "english_name": "Zapotec, Lachixío"
- },
- "aio": {
- "english_name": "Aiton"
- },
- "mpi": {
- "english_name": "Mpade"
- },
- "pef": {
- "english_name": "Pomo, Northeastern"
- },
- "nly": {
- "english_name": "Nyamal"
- },
- "dws": {
- "english_name": "Dutton World Speedwords"
- },
- "far": {
- "english_name": "Fataleka"
- },
- "kbi": {
- "english_name": "Kaptiau"
- },
- "snn": {
- "english_name": "Siona"
- },
- "kop": {
- "english_name": "Waube"
- },
- "plu": {
- "english_name": "Palikúr"
- },
- "poh": {
- "english_name": "Poqomchi'"
- },
- "atw": {
- "english_name": "Atsugewi"
- },
- "fub": {
- "english_name": "Fulfulde, Adamawa"
- },
- "ngj": {
- "english_name": "Ngie"
- },
- "ny": {
- "english_name": "Nyanja"
- },
- "mij": {
- "english_name": "Abar"
- },
- "pfl": {
- "english_name": "Pfaelzisch"
- },
- "eee": {
- "english_name": "E"
- },
- "fkk": {
- "english_name": "Kirya-Konzəl"
- },
- "mcg": {
- "english_name": "Mapoyo"
- },
- "njm": {
- "english_name": "Naga, Angami"
- },
- "gwi": {
- "english_name": "Gwichʼin"
- },
- "dse": {
- "english_name": "Dutch Sign Language"
- },
- "dlg": {
- "english_name": "Dolgan"
- },
- "tcz": {
- "english_name": "Chin, Thado"
- },
- "koa": {
- "english_name": "Konomala"
- },
- "dms": {
- "english_name": "Dampelas"
- },
- "smp": {
- "english_name": "Samaritan"
- },
- "jkr": {
- "english_name": "Koro (India)"
- },
- "maa": {
- "english_name": "Mazatec, San Jerónimo Tecóatl"
- },
- "ku": {
- "english_name": "Kurdish"
- },
- "tfn": {
- "english_name": "Tanaina"
- },
- "akg": {
- "english_name": "Anakalangu"
- },
- "bfa": {
- "english_name": "Bari"
- },
- "wnk": {
- "english_name": "Wanukaka"
- },
- "tse": {
- "english_name": "Tunisian Sign Language"
- },
- "pzn": {
- "english_name": "Naga, Para"
- },
- "kdi": {
- "english_name": "Kumam"
- },
- "duu": {
- "english_name": "Drung"
- },
- "kzv": {
- "english_name": "Komyandaret"
- },
- "gya": {
- "english_name": "Gbaya, Northwest"
- },
- "xir": {
- "english_name": "Xiriâna"
- },
- "scl": {
- "english_name": "Shina"
- },
- "mdz": {
- "english_name": "Suruí Do Pará"
- },
- "erw": {
- "english_name": "Erokwanas"
- },
- "sxl": {
- "english_name": "Selian"
- },
- "lbs": {
- "english_name": "Libyan Sign Language"
- },
- "wrn": {
- "english_name": "Warnang"
- },
- "sen": {
- "english_name": "Sénoufo, Nanerigé"
- },
- "mzw": {
- "english_name": "Deg"
- },
- "oca": {
- "english_name": "Ocaina"
- },
- "kud": {
- "english_name": "'Auhelawa"
- },
- "soh": {
- "english_name": "Aka"
- },
- "dek": {
- "english_name": "Dek"
- },
- "kms": {
- "english_name": "Kamasau"
- },
- "tji": {
- "english_name": "Tujia, Northern"
- },
- "nra": {
- "english_name": "Ngom"
- },
- "kkb": {
- "english_name": "Kwerisa"
- },
- "ybh": {
- "english_name": "Yakha"
- },
- "bpk": {
- "english_name": "Orowe"
- },
- "ule": {
- "english_name": "Lule"
- },
- "kwi": {
- "english_name": "Awa-Cuaiquer"
- },
- "piy": {
- "english_name": "Piya-Kwonci"
- },
- "thc": {
- "english_name": "Tai Hang Tong"
- },
- "zea": {
- "english_name": "Zeeuws"
- },
- "nux": {
- "english_name": "Mehek"
- },
- "ajz": {
- "english_name": "Karbi, Amri"
- },
- "fni": {
- "english_name": "Fania"
- },
- "sta": {
- "english_name": "Settla"
- },
- "xag": {
- "english_name": "Aghwan"
- },
- "nos": {
- "english_name": "Nisu, Eastern"
- },
- "not": {
- "english_name": "Nomatsiguenga"
- },
- "tqr": {
- "english_name": "Torona"
- },
- "opm": {
- "english_name": "Oksapmin"
- },
- "jod": {
- "english_name": "Wojenaka"
- },
- "roc": {
- "english_name": "Roglai, Cacgia"
- },
- "zpd": {
- "english_name": "Zapotec, Southeastern Ixtlán"
- },
- "gho": {
- "english_name": "Ghomara"
- },
- "wad": {
- "english_name": "Wandamen"
- },
- "twl": {
- "english_name": "Tawara"
- },
- "tsb": {
- "english_name": "Tsamai"
- },
- "kek": {
- "english_name": "Kekchí"
- },
- "sde": {
- "english_name": "Surubu"
- },
- "mjh": {
- "english_name": "Mwera (Nyasa)"
- },
- "lae": {
- "english_name": "Pattani"
- },
- "kso": {
- "english_name": "Kofa"
- },
- "iqu": {
- "english_name": "Iquito"
- },
- "hsl": {
- "english_name": "Hausa Sign Language"
- },
- "nnr": {
- "english_name": "Narungga"
- },
- "caw": {
- "english_name": "Callawalla"
- },
- "ayh": {
- "english_name": "Arabic, Hadrami"
- },
- "zad": {
- "english_name": "Zapotec, Cajonos"
- },
- "wne": {
- "english_name": "Waneci"
- },
- "nks": {
- "english_name": "Asmat, North"
- },
- "poc": {
- "english_name": "Poqomam"
- },
- "ale": {
- "english_name": "Aleut"
- },
- "tbb": {
- "english_name": "Tapeba"
- },
- "akb": {
- "english_name": "Batak Angkola"
- },
- "hid": {
- "english_name": "Hidatsa"
- },
- "bmc": {
- "english_name": "Biem"
- },
- "mrp": {
- "english_name": "Morouas"
- },
- "nrm": {
- "english_name": "Narom"
- },
- "skt": {
- "english_name": "Sakata"
- },
- "bpb": {
- "english_name": "Barbacoas"
- },
- "sze": {
- "english_name": "Seze"
- },
- "vor": {
- "english_name": "Voro"
- },
- "smh": {
- "english_name": "Samei"
- },
- "kja": {
- "english_name": "Mlap"
- },
- "njj": {
- "english_name": "Njen"
- },
- "ggt": {
- "english_name": "Gitua"
- },
- "prp": {
- "english_name": "Parsi"
- },
- "ded": {
- "english_name": "Dedua"
- },
- "akh": {
- "english_name": "Angal Heneng"
- },
- "gvr": {
- "english_name": "Gurung, Western"
- },
- "war": {
- "english_name": "Waray (Philippines)"
- },
- "lrl": {
- "english_name": "Lari"
- },
- "jmn": {
- "english_name": "Naga, Makuri"
- },
- "ciy": {
- "english_name": "Chaima"
- },
- "zpv": {
- "english_name": "Zapotec, Chichicapan"
- },
- "ste": {
- "english_name": "Liana-Seti"
- },
- "hvv": {
- "english_name": "Huave, Santa María Del Mar"
- },
- "mbs": {
- "english_name": "Manobo, Sarangani"
- },
- "yrn": {
- "english_name": "Yerong"
- },
- "bje": {
- "english_name": "Mien, Biao-Jiao"
- },
- "sdx": {
- "english_name": "Melanau, Sibu"
- },
- "ray": {
- "english_name": "Rapa"
- },
- "en": {
- "english_name": "English"
- },
- "cbv": {
- "english_name": "Cacua"
- },
- "tlc": {
- "english_name": "Totonac, Yecuatla"
- },
- "xbp": {
- "english_name": "Bibbulman"
- },
- "kfc": {
- "english_name": "Konda-Dora"
- },
- "gda": {
- "english_name": "Lohar, Gade"
- },
- "krs": {
- "english_name": "Gbaya (Sudan)"
- },
- "sea": {
- "english_name": "Semai"
- },
- "aak": {
- "english_name": "Ankave"
- },
- "ahs": {
- "english_name": "Ashe"
- },
- "sti": {
- "english_name": "Stieng, Bulo"
- },
- "kij": {
- "english_name": "Kilivila"
- },
- "mmv": {
- "english_name": "Miriti"
- },
- "blo": {
- "english_name": "Anii"
- },
- "bcc": {
- "english_name": "Balochi, Southern"
- },
- "agh": {
- "english_name": "Ngelima"
- },
- "fll": {
- "english_name": "Fali, North"
- },
- "ceb": {
- "english_name": "Cebuano"
- },
- "sir": {
- "english_name": "Siri"
- },
- "ab": {
- "english_name": "Abkhazian"
- },
- "hka": {
- "english_name": "Kahe"
- },
- "wno": {
- "english_name": "Wano"
- },
- "mli": {
- "english_name": "Malimpung"
- },
- "lac": {
- "english_name": "Lacandon"
- },
- "buj": {
- "english_name": "Basa-Gurmana"
- },
- "hot": {
- "english_name": "Hote"
- },
- "sr": {
- "english_name": "Serbian",
- "name": "српски"
- },
- "vmd": {
- "english_name": "Koraga, Mudu"
- },
- "dne": {
- "english_name": "Ndendeule"
- },
- "kfh": {
- "english_name": "Kurichiya"
- },
- "flh": {
- "english_name": "Foau"
- },
- "juo": {
- "english_name": "Jiba"
- },
- "tcs": {
- "english_name": "Creole, Torres Strait"
- },
- "duz": {
- "english_name": "Duli"
- },
- "rtw": {
- "english_name": "Rathawi"
- },
- "fon": {
- "english_name": "Fon"
- },
- "qvs": {
- "english_name": "Quechua, San Martín"
- },
- "zpz": {
- "english_name": "Zapotec, Texmelucan"
- },
- "bsn": {
- "english_name": "Barasana-Eduria"
- },
- "hap": {
- "english_name": "Hupla"
- },
- "nik": {
- "english_name": "Nicobarese, Southern"
- },
- "gbr": {
- "english_name": "Gbagyi"
- },
- "zoo": {
- "english_name": "Zapotec, Asunción Mixtepec"
- },
- "enb": {
- "english_name": "Markweeta"
- },
- "frd": {
- "english_name": "Fordata"
- },
- "dyd": {
- "english_name": "Dyugun"
- },
- "ttg": {
- "english_name": "Tutong"
- },
- "pbb": {
- "english_name": "Páez"
- },
- "yrs": {
- "english_name": "Yarsun"
- },
- "hji": {
- "english_name": "Haji"
- },
- "tpp": {
- "english_name": "Tepehua, Pisaflores"
- },
- "nit": {
- "english_name": "Kolami, Southeastern"
- },
- "one": {
- "english_name": "Oneida"
- },
- "gha": {
- "english_name": "Ghadamès"
- },
- "sbf": {
- "english_name": "Shabo"
- },
- "chn": {
- "english_name": "Chinook jargon"
- },
- "sqm": {
- "english_name": "Suma"
- },
- "ain": {
- "english_name": "Ainu (Japan)"
- },
- "sgh": {
- "english_name": "Shughni"
- },
- "atb": {
- "english_name": "Zaiwa"
- },
- "mcq": {
- "english_name": "Ese"
- },
- "fli": {
- "english_name": "Fali"
- },
- "jat": {
- "english_name": "Jakati"
- },
- "xpt": {
- "english_name": "Punthamara"
- },
- "mlr": {
- "english_name": "Vame"
- },
- "crr": {
- "english_name": "Algonquian, Carolina"
- },
- "squ": {
- "english_name": "Squamish"
- },
- "ktq": {
- "english_name": "Katabaga"
- },
- "guc": {
- "english_name": "Wayuu"
- },
- "gyd": {
- "english_name": "Kayardild"
- },
- "bhz": {
- "english_name": "Bada (Indonesia)"
- },
- "blv": {
- "english_name": "Bolo"
- },
- "lmq": {
- "english_name": "Lamatuka"
- },
- "cav": {
- "english_name": "Cavineña"
- },
- "tkn": {
- "english_name": "Toku-No-Shima"
- },
- "hrt": {
- "english_name": "Hértevin"
- },
- "rom": {
- "english_name": "Romany"
- },
- "wku": {
- "english_name": "Kunduvadi"
- },
- "kzs": {
- "english_name": "Dusun, Sugut"
- },
- "shp": {
- "english_name": "Shipibo-Conibo"
- },
- "nur": {
- "english_name": "Nukuria"
- },
- "kzp": {
- "english_name": "Kaidipang"
- },
- "bfb": {
- "english_name": "Bareli, Pauri"
- },
- "zmp": {
- "english_name": "Mpuono"
- },
- "jeh": {
- "english_name": "Jeh"
- },
- "guh": {
- "english_name": "Guahibo"
- },
- "tte": {
- "english_name": "Bwanabwana"
- },
- "zai": {
- "english_name": "Zapotec, Isthmus"
- },
- "giw": {
- "english_name": "Gelao, White"
- },
- "bub": {
- "english_name": "Bua"
- },
- "kki": {
- "english_name": "Kagulu"
- },
- "abc": {
- "english_name": "Ayta, Ambala"
- },
- "gvy": {
- "english_name": "Guyani"
- },
- "gdb": {
- "english_name": "Gadaba, Pottangi Ollar"
- },
- "kcf": {
- "english_name": "Ukaan"
- },
- "gih": {
- "english_name": "Githabul"
- },
- "nyp": {
- "english_name": "Nyang'i"
- },
- "kbp": {
- "english_name": "Kabiyè"
- },
- "bme": {
- "english_name": "Limassa"
- },
- "lks": {
- "english_name": "Kisa"
- },
- "nsq": {
- "english_name": "Miwok, Northern Sierra"
- },
- "emk": {
- "english_name": "Maninkakan, Eastern"
- },
- "kaf": {
- "english_name": "Katso"
- },
- "wbq": {
- "english_name": "Waddar"
- },
- "blr": {
- "english_name": "Blang"
- },
- "spe": {
- "english_name": "Sepa (Papua New Guinea)"
- },
- "dbl": {
- "english_name": "Dyirbal"
- },
- "ert": {
- "english_name": "Eritai"
- },
- "luf": {
- "english_name": "Laua"
- },
- "zmt": {
- "english_name": "Maringarr"
- },
- "psp": {
- "english_name": "Philippine Sign Language"
- },
- "aki": {
- "english_name": "Aiome"
- },
- "acr": {
- "english_name": "Achi"
- },
- "yme": {
- "english_name": "Yameo"
- },
- "ldk": {
- "english_name": "Leelau"
- },
- "uis": {
- "english_name": "Uisai"
- },
- "omg": {
- "english_name": "Omagua"
- },
- "hld": {
- "english_name": "Halang Doan"
- },
- "syc": {
- "english_name": "Syriac, Classical"
- },
- "bue": {
- "english_name": "Beothuk"
- },
- "gwa": {
- "english_name": "Mbato"
- },
- "bge": {
- "english_name": "Bauria"
- },
- "mfr": {
- "english_name": "Marithiel"
- },
- "wgi": {
- "english_name": "Wahgi"
- },
- "ash": {
- "english_name": "Abishira"
- },
- "xil": {
- "english_name": "Illyrian"
- },
- "ttq": {
- "english_name": "Tamajaq, Tawallammat"
- },
- "mjp": {
- "english_name": "Malapandaram"
- },
- "hrc": {
- "english_name": "Niwer Mil"
- },
- "pi": {
- "english_name": "Pali"
- },
- "bhl": {
- "english_name": "Bimin"
- },
- "ije": {
- "english_name": "Biseni"
- },
- "cfd": {
- "english_name": "Cara"
- },
- "yi": {
- "english_name": "Yiddish"
- },
- "chl": {
- "english_name": "Cahuilla"
- },
- "cy": {
- "english_name": "Welsh",
- "name": "Cymraeg"
- },
- "mfq": {
- "english_name": "Moba"
- },
- "ior": {
- "english_name": "Inor"
- },
- "kuy": {
- "english_name": "Kuuku-Ya'u"
- },
- "aqr": {
- "english_name": "Arhâ"
- },
- "ktk": {
- "english_name": "Kaniet"
- },
- "tpv": {
- "english_name": "Tanapag"
- },
- "tnn": {
- "english_name": "Tanna, North"
- },
- "lkt": {
- "english_name": "Lakota"
- },
- "ksm": {
- "english_name": "Kumba"
- },
- "dtm": {
- "english_name": "Dogon, Tomo Kan"
- },
- "sat": {
- "english_name": "Santali"
- },
- "cku": {
- "english_name": "Koasati"
- },
- "shz": {
- "english_name": "Senoufo, Syenara"
- },
- "cya": {
- "english_name": "Chatino, Nopala"
- },
- "tzl": {
- "english_name": "Talossan"
- },
- "aoc": {
- "english_name": "Pemon"
- },
- "myj": {
- "english_name": "Mangayat"
- },
- "rmb": {
- "english_name": "Rembarunga"
- },
- "kla": {
- "english_name": "Klamath-Modoc"
- },
- "gex": {
- "english_name": "Garre"
- },
- "kpj": {
- "english_name": "Karajá"
- },
- "gqn": {
- "english_name": "Guana (Brazil)"
- },
- "aax": {
- "english_name": "Mandobo Atas"
- },
- "ddo": {
- "english_name": "Dido"
- },
- "owi": {
- "english_name": "Owiniga"
- },
- "kpq": {
- "english_name": "Korupun-Sela"
- },
- "bnu": {
- "english_name": "Bentong"
- },
- "slm": {
- "english_name": "Sama, Pangutaran"
- },
- "led": {
- "english_name": "Lendu"
- },
- "dcr": {
- "english_name": "Negerhollands"
- },
- "teb": {
- "english_name": "Tetete"
- },
- "xom": {
- "english_name": "Komo (Sudan)"
- },
- "coh": {
- "english_name": "Chonyi-Dzihana-Kauma"
- },
- "bie": {
- "english_name": "Bepour"
- },
- "tiq": {
- "english_name": "Tiéfo"
- },
- "bvk": {
- "english_name": "Bukat"
- },
- "cid": {
- "english_name": "Chimariko"
- },
- "pal": {
- "english_name": "Pahlavi"
- },
- "jab": {
- "english_name": "Hyam"
- },
- "twc": {
- "english_name": "Teshenawa"
- },
- "twr": {
- "english_name": "Tarahumara, Southwestern"
- },
- "sv": {
- "english_name": "Swedish",
- "name": "Svenska"
- },
- "ljw": {
- "english_name": "Yirandali"
- },
- "tnu": {
- "english_name": "Tay Khang"
- },
- "uk": {
- "english_name": "Ukrainian",
- "name": "українська"
- },
- "dba": {
- "english_name": "Bangime"
- },
- "kpi": {
- "english_name": "Kofei"
- },
- "xet": {
- "english_name": "Xetá"
- },
- "pty": {
- "english_name": "Pathiya"
- },
- "zal": {
- "english_name": "Zauzou"
- },
- "djn": {
- "english_name": "Djauan"
- },
- "ulb": {
- "english_name": "Ulukwumi"
- },
- "mgz": {
- "english_name": "Mbugwe"
- },
- "kee": {
- "english_name": "Keres, Eastern"
- },
- "gaq": {
- "english_name": "Gata'"
- },
- "ctc": {
- "english_name": "Chetco"
- },
- "sdr": {
- "english_name": "Sadri, Oraon"
- },
- "byl": {
- "english_name": "Bayono"
- },
- "kai": {
- "english_name": "Karekare"
- },
- "mnw": {
- "english_name": "Mon"
- },
- "lsm": {
- "english_name": "Saamia"
- },
- "wdu": {
- "english_name": "Wadjigu"
- },
- "tst": {
- "english_name": "Songway Kiini, Tondi"
- },
- "lwa": {
- "english_name": "Lwalu"
- },
- "loj": {
- "english_name": "Lou"
- },
- "lgg": {
- "english_name": "Lugbara"
- },
- "msq": {
- "english_name": "Caac"
- },
- "jay": {
- "english_name": "Yan-nhangu"
- },
- "arq": {
- "english_name": "Arabic, Algerian"
- },
- "urp": {
- "english_name": "Uru-Pa-In"
- },
- "mnc": {
- "english_name": "Manchu"
- },
- "tiw": {
- "english_name": "Tiwi"
- },
- "wav": {
- "english_name": "Waka"
- },
- "umm": {
- "english_name": "Umon"
- },
- "srq": {
- "english_name": "Sirionó"
- },
- "kul": {
- "english_name": "Kulere"
- },
- "hca": {
- "english_name": "Creole Hindi, Andaman"
- },
- "xha": {
- "english_name": "Harami"
- },
- "drt": {
- "english_name": "Drents"
- },
- "glk": {
- "english_name": "Gilaki"
- },
- "gba": {
- "english_name": "Gbaya (Central African Republic)"
- },
- "kgv": {
- "english_name": "Karas"
- },
- "kft": {
- "english_name": "Kanjari"
- },
- "chy": {
- "english_name": "Cheyenne"
- },
- "aua": {
- "english_name": "Asumboa"
- },
- "buq": {
- "english_name": "Brem"
- },
- "esn": {
- "english_name": "Salvadoran Sign Language"
- },
- "rob": {
- "english_name": "Tae'"
- },
- "gbe": {
- "english_name": "Niksek"
- },
- "aen": {
- "english_name": "Armenian Sign Language"
- },
- "olm": {
- "english_name": "Oloma"
- },
- "sco": {
- "english_name": "Scots"
- },
- "bum": {
- "english_name": "Bulu (Cameroon)"
- },
- "kue": {
- "english_name": "Kuman"
- },
- "pag": {
- "english_name": "Pangasinan"
- },
- "tiv": {
- "english_name": "Tiv"
- },
- "als": {
- "english_name": "Albanian, Tosk"
- },
- "tmo": {
- "english_name": "Temoq"
- },
- "ndq": {
- "english_name": "Ndombe"
- },
- "bya": {
- "english_name": "Batak"
- },
- "thl": {
- "english_name": "Tharu, Dangaura"
- },
- "oge": {
- "english_name": "Georgian, Old"
- },
- "cch": {
- "english_name": "Atsam"
- },
- "tin": {
- "english_name": "Tindi"
- },
- "shi": {
- "english_name": "Tachelhit"
- },
- "dhw": {
- "english_name": "Dhanwar (Nepal)"
- },
- "su": {
- "english_name": "Sundanese"
- },
- "nmd": {
- "english_name": "Ndumu"
- },
- "snh": {
- "english_name": "Shinabo"
- },
- "nrb": {
- "english_name": "Nara"
- },
- "ymz": {
- "english_name": "Muzi"
- },
- "zne": {
- "english_name": "Zande (individual language)"
- },
- "omw": {
- "english_name": "Tairora, South"
- },
- "bvb": {
- "english_name": "Bube"
- },
- "cpn": {
- "english_name": "Cherepon"
- },
- "lop": {
- "english_name": "Lopa"
- },
- "vwa": {
- "english_name": "Awa (China)"
- },
- "cqu": {
- "english_name": "Quechua, Chilean"
- },
- "jmx": {
- "english_name": "Mixtec, Western Juxtlahuaca"
- },
- "xxt": {
- "english_name": "Tambora"
- },
- "nea": {
- "english_name": "Ngad'a, Eastern"
- },
- "lik": {
- "english_name": "Lika"
- },
- "trx": {
- "english_name": "Bidayuh, Tringgus-Sembaan"
- },
- "kzg": {
- "english_name": "Kikai"
- },
- "jii": {
- "english_name": "Jiiddu"
- },
- "uhn": {
- "english_name": "Damal"
- },
- "mot": {
- "english_name": "Barí"
- },
- "gin": {
- "english_name": "Hinukh"
- },
- "otx": {
- "english_name": "Otomi, Texcatepec"
- },
- "shm": {
- "english_name": "Shahrudi"
- },
- "ncz": {
- "english_name": "Natchez"
- },
- "pkp": {
- "english_name": "Pukapuka"
- },
- "mxl": {
- "english_name": "Gbe, Maxi"
- },
- "juw": {
- "english_name": "Wãpha"
- },
- "id": {
- "english_name": "Indonesian",
- "name": "Indonesian"
- },
- "skn": {
- "english_name": "Subanon, Kolibugan"
- },
- "wrk": {
- "english_name": "Garrwa"
- },
- "twd": {
- "english_name": "Twents"
- },
- "csv": {
- "english_name": "Chin, Sumtu"
- },
- "brs": {
- "english_name": "Baras"
- },
- "ptn": {
- "english_name": "Patani"
- },
- "tft": {
- "english_name": "Ternate"
- },
- "azj": {
- "english_name": "Azerbaijani, North"
- },
- "ekr": {
- "english_name": "Yace"
- },
- "nyy": {
- "english_name": "Nyakyusa-Ngonde"
- },
- "nes": {
- "english_name": "Kinnauri, Bhoti"
- },
- "wmt": {
- "english_name": "Walmajarri"
- },
- "hax": {
- "english_name": "Haida, Southern"
- },
- "sha": {
- "english_name": "Shall-Zwall"
- },
- "bij": {
- "english_name": "Vaghat-Ya-Bijim-Legeri"
- },
- "rif": {
- "english_name": "Tarifit"
- },
- "yaq": {
- "english_name": "Yaqui"
- },
- "sso": {
- "english_name": "Sissano"
- },
- "naq": {
- "english_name": "Nama (Namibia)"
- },
- "wbm": {
- "english_name": "Wa"
- },
- "srm": {
- "english_name": "Saramaccan"
- },
- "yha": {
- "english_name": "Buyang, Baha"
- },
- "mbi": {
- "english_name": "Manobo, Ilianen"
- },
- "zsu": {
- "english_name": "Sukurum"
- },
- "gcf": {
- "english_name": "Creole French, Guadeloupean"
- },
- "kpx": {
- "english_name": "Koiali, Mountain"
- },
- "nkw": {
- "english_name": "Nkutu"
- },
- "bty": {
- "english_name": "Bobot"
- },
- "kpy": {
- "english_name": "Koryak"
- },
- "tgr": {
- "english_name": "Tareng"
- },
- "pox": {
- "english_name": "Polabian"
- },
- "uam": {
- "english_name": "Uamué"
- },
- "lai": {
- "english_name": "Lambya"
- },
- "zpw": {
- "english_name": "Zapotec, Zaniza"
- },
- "ylu": {
- "english_name": "Aribwaung"
- },
- "mgd": {
- "english_name": "Moru"
- },
- "qve": {
- "english_name": "Quechua, Eastern Apurímac"
- },
- "bpd": {
- "english_name": "Banda-Banda"
- },
- "aem": {
- "english_name": "Arem"
- },
- "cjk": {
- "english_name": "Chokwe"
- },
- "tew": {
- "english_name": "Tewa (USA)"
- },
- "rmk": {
- "english_name": "Romkun"
- },
- "ont": {
- "english_name": "Ontenu"
- },
- "hmp": {
- "english_name": "Hmong, Northern Mashan"
- },
- "dav": {
- "english_name": "Taita"
- },
- "stb": {
- "english_name": "Subanen, Northern"
- },
- "tpf": {
- "english_name": "Tarpia"
- },
- "bxe": {
- "english_name": "Birale"
- },
- "srn": {
- "english_name": "Sranan Tongo"
- },
- "kbd":