diff options
58 files changed, 1501 insertions, 99 deletions
diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 78fc66e3f..84ce51a04 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -91,7 +91,7 @@ jobs: COMMIT_MESSAGE: build from commit ${{ github.sha }} babel: - name: Babel + name: Update translations branch runs-on: ubuntu-20.04 if: ${{ github.repository_owner == 'searxng' && github.ref == 'refs/heads/master' }} needs: @@ -102,32 +102,32 @@ jobs: - name: Checkout uses: actions/checkout@v2 with: - persist-credentials: false + fetch-depth: '0' + token: ${{ secrets.WEBLATE_GITHUB_TOKEN }} - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.9' architecture: 'x64' + - name: Cache Python dependencies + id: cache-python + uses: actions/cache@v2 + with: + path: ./local + key: python-ubuntu-20.04-3.9-${{ hashFiles('requirements*.txt', 'setup.py') }} + - name: weblate & git setup + env: + WEBLATE_CONFIG: ${{ secrets.WEBLATE_CONFIG }} + run: | + mkdir -p ~/.config + echo "${WEBLATE_CONFIG}" > ~/.config/weblate + git config --global user.email "searxng-bot@users.noreply.github.com" + git config --global user.name "searxng-bot" - name: Update transations id: update - continue-on-error: true - run: make V=1 ci.babel.update - - name: Open pull request - if: steps.update.outcome == 'success' - uses: peter-evans/create-pull-request@v3 - with: - commit-message: Update translations (pot, po) - committer: searx-bot <noreply@github.com> - author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> - signoff: false - branch: update_translations_pot - delete-branch: true - draft: false - title: 'Update translations (pot, po)' - body: | - Update messages.pot and messages.po files - labels: | - translation + run: | + git restore utils/brand.env + make V=1 weblate.push.translations dockers: name: Docker diff --git a/.github/workflows/translations-update.yml b/.github/workflows/translations-update.yml new file mode 100644 index 000000000..c3120ce1e --- /dev/null +++ b/.github/workflows/translations-update.yml @@ -0,0 +1,56 @@ +name: "Update translations" +on: + schedule: + - cron: "05 07 * * 5" + workflow_dispatch: + +jobs: + babel: + name: "create PR for additons from weblate" + runs-on: ubuntu-20.04 + if: ${{ github.repository_owner == 'searxng' && github.ref == 'refs/heads/master' }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: '0' + token: ${{ secrets.WEBLATE_GITHUB_TOKEN }} + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.9' + architecture: 'x64' + - name: Cache Python dependencies + id: cache-python + uses: actions/cache@v2 + with: + path: ./local + key: python-ubuntu-20.04-3.9-${{ hashFiles('requirements*.txt', 'setup.py') }} + - name: weblate & git setup + env: + WEBLATE_CONFIG: ${{ secrets.WEBLATE_CONFIG }} + run: | + mkdir -p ~/.config + echo "${WEBLATE_CONFIG}" > ~/.config/weblate + git config --global user.email "searxng-bot@users.noreply.github.com" + git config --global user.name "searxng-bot" + - name: Merge and push transation updates + run: | + make V=1 weblate.translations.commit + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@v3 + with: + token: ${{ secrets.WEBLATE_GITHUB_TOKEN }} + commit-message: Update translations + committer: searxng-bot <searxng-bot@users.noreply.github.com> + author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> + signoff: false + branch: translations_update + delete-branch: true + draft: false + title: 'Update translations' + body: | + Update translations + labels: | + translation diff --git a/.weblate b/.weblate new file mode 100644 index 000000000..80bdba884 --- /dev/null +++ b/.weblate @@ -0,0 +1,3 @@ +[weblate] +url = https://weblate.bubu1.eu/api/ +translation = searxng/searxng @@ -77,7 +77,7 @@ test.shell: # wrap ./manage script MANAGE += buildenv -MANAGE += ci.babel.update babel.extract babel.update babel.compile +MANAGE += weblate.translations.commit weblate.push.translations MANAGE += data.all data.languages data.useragents data.osm_keys_tags MANAGE += docs.html docs.live docs.gh-pages docs.prebuild docs.clean MANAGE += docker.build docker.push docker.buildx diff --git a/README.rst b/README.rst index 1ab7ee201..e0fd102f8 100644 --- a/README.rst +++ b/README.rst @@ -6,6 +6,7 @@ |AGPL License| |Issues| |commits| +|weblate| Privacy-respecting, hackable `metasearch engine`_ @@ -32,6 +33,8 @@ Privacy-respecting, hackable `metasearch engine`_ .. |commits| image:: https://img.shields.io/github/commit-activity/y/searxng/searxng?color=yellow&label=commits :target: https://github.com/searxng/searxng/commits/master +.. |weblate| image:: https://weblate.bubu1.eu/widgets/searxng/-/searxng/svg-badge.svg + :target: https://weblate.bubu1.eu/projects/searxng/ If you are looking for running instances, ready to use, then visit searx.space_. diff --git a/docs/dev/translation.rst b/docs/dev/translation.rst index 523dcf78c..922c29c54 100644 --- a/docs/dev/translation.rst +++ b/docs/dev/translation.rst @@ -4,69 +4,77 @@ Translation =========== -.. _searx@transifex: https://www.transifex.com/asciimoo/searx/ +.. _weblate.bubu1.eu: https://weblate.bubu1.eu/projects/searxng/ +.. _Weblate: https://docs.weblate.org +.. _translations branch: https://github.com/searxng/searxng/tree/translations +.. _orphan branch: https://git-scm.com/docs/git-checkout#Documentation/git-checkout.txt---orphanltnewbranchgt +.. _Weblate repository: https://weblate.bubu1.eu/projects/searxng/searxng/#repository +.. _wlc: https://docs.weblate.org/en/latest/wlc.html -Translation currently takes place on `searx@transifex`_ +.. |translated| image:: https://weblate.bubu1.eu/widgets/searxng/-/searxng/svg-badge.svg + :target: https://weblate.bubu1.eu/projects/searxng/ -Requirements -============ +.. sidebar:: |translated| -* Transifex account + - Weblate_ + - SearXNG `translations branch`_ + - SearXNG `Weblate repository`_ + - Weblate Client: wlc_ + - Babel Command-Line: `pybabel <http://babel.pocoo.org/en/latest/cmdline.html>`_ + - `weblate workflow <https://docs.weblate.org/en/latest/workflows.html>`_ -Init Transifex project -====================== +Translation takes place on weblate.bubu1.eu_. -After installing ``transifex`` using pip, run the following command to -initialize the project. +Translations which has been added by translators on the weblate.bubu1.eu_ UI are +committed to Weblate's counterpart of the SearXNG *origin* repository which is +located at ``https://weblate.bubu1.eu/git/searxng/searxng``. -.. code:: sh +There is no need to clone this repository, :ref:`SearXNG Weblate workflow` take +care of the synchronization with the *origin*. To avoid merging commits from +the counterpart directly on the ``master`` branch of *SearXNG origin*, a *pull +request* (PR) is created by this workflow. - ./manage pyenv.cmd tx init # Transifex instance: https://www.transifex.com/asciimoo/searx/ +Weblate monitors the `translations branch`_, not the ``master`` branch. This +branch is an `orphan branch`_, decoupled from the master branch (we already know +orphan branches from the ``gh-pages``). The `translations branch`_ contains +only the +- ``translation/messages.pot`` and the +- ``translation/*/messages.po`` files, nothing else. -After ``$HOME/.transifexrc`` is created, get a Transifex API key and insert it -into the configuration file. -Create a configuration file for ``tx`` named ``$HOME/.tx/config``. +.. _SearXNG Weblate workflow: -.. code:: ini +.. figure:: translation.svg - [main] - host = https://www.transifex.com - [searx.messagespo] - file_filter = searx/translations/<lang>/LC_MESSAGES/messages.po - source_file = messages.pot - source_lang = en - type = PO + SearXNG's PR workflow to be in sync with Weblate +Sync from *origin* to *weblate*: using ``make weblate.push.translations`` + For each commit on the ``master`` branch of SearXNG *origin* the GitHub job + :origin:`babel / Update translations branch + <.github/workflows/integration.yml>` checks for updated translations. -Then run ``tx set``: +Sync from *weblate* to *origin*: using ``make weblate.translations.commit`` + Every Friday, the GitHub workflow :origin:`babel / create PR for additons from + weblate <.github/workflows/translations-update.yml>` creates a PR with the + updated translation files: -.. code:: shell + - ``translation/messages.pot``, + - ``translation/*/messages.po`` and + - ``translation/*/messages.mo`` - ./manage pyenv.cmd tx set --auto-local \ - -r searx.messagespo 'searx/translations/<lang>/LC_MESSAGES/messages.po' \ - --source-lang en --type PO --source-file messages.pot --execute +wlc +=== +.. _wlc configuration: https://docs.weblate.org/en/latest/wlc.html#wlc-config +.. _API key: https://weblate.bubu1.eu/accounts/profile/#api -Update translations -=================== +All weblate integration is done by GitHub workflows, but if you want to use wlc_, +copy this content into `wlc configuration`_ in your HOME ``~/.config/weblate`` -To retrieve the latest translations, pull it from Transifex. +.. code-block:: ini -.. code:: sh + [keys] + https://weblate.bubu1.eu/api/ = APIKEY - ./manage pyenv.cmd tx pull -a - [?] Enter your api token: .... - -Then check the new languages. If strings translated are not enough, delete those -folders, because those should not be compiled. Call the command below to compile -the ``.po`` files. - -.. code:: shell - - ./manage pyenv.cmd pybabel compile -d searx/translations - - -After the compilation is finished commit the ``.po`` and ``.mo`` files and -create a PR. +Replace ``APIKEY`` by your `API key`_. diff --git a/docs/dev/translation.svg b/docs/dev/translation.svg new file mode 100644 index 000000000..70400cca7 --- /dev/null +++ b/docs/dev/translation.svg @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="968px" preserveAspectRatio="none" style="width:1008px;height:968px;background:#FFFFFF;" version="1.1" viewBox="0 0 1008 968" width="1008px" zoomAndPan="magnify"><defs><filter height="300%" id="fwj4fqzvak25j" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#FFFFFF" filter="url(#fwj4fqzvak25j)" height="320.7266" style="stroke:#000000;stroke-width:2.0;" width="981" x="10" y="116.7266"/><rect fill="#FFFFFF" filter="url(#fwj4fqzvak25j)" height="289.5938" style="stroke:#000000;stroke-width:2.0;" width="961" x="20" y="140.8594"/><rect fill="#FFFFFF" filter="url(#fwj4fqzvak25j)" height="324.7266" style="stroke:#000000;stroke-width:2.0;" width="848" x="143" y="494.5859"/><rect fill="#FFFFFF" filter="url(#fwj4fqzvak25j)" height="245.3281" style="stroke:#000000;stroke-width:2.0;" width="828" x="153" y="518.7188"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="91" x2="91" y1="56.5938" y2="908.5781"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="270" x2="270" y1="56.5938" y2="908.5781"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="514" x2="514" y1="56.5938" y2="908.5781"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="738" x2="738" y1="56.5938" y2="908.5781"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="899" x2="899" y1="56.5938" y2="908.5781"/><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="119" x="30" y="21.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="105" x="37" y="41.292">master branch</text><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="119" x="30" y="907.5781"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="105" x="37" y="927.5732">master branch</text><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="211" x="163" y="21.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="197" x="170" y="41.292">translations_update branch</text><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="211" x="163" y="907.5781"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="197" x="170" y="927.5732">translations_update branch</text><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="153" x="436" y="21.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="443" y="41.292">translations branch</text><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="153" x="436" y="907.5781"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="443" y="927.5732">translations branch</text><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="46.5938" style="stroke:#A80036;stroke-width:1.5;" width="153" x="660" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="120" x="676.5" y="24.9951">weblate clone of</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="667" y="41.292">SearXNG repository</text><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="46.5938" style="stroke:#A80036;stroke-width:1.5;" width="153" x="660" y="907.5781"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="120" x="676.5" y="927.5732">weblate clone of</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="667" y="943.8701">SearXNG repository</text><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="46.5938" style="stroke:#A80036;stroke-width:1.5;" width="140" x="827" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="868" y="24.9951">weblate</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="122" x="834" y="41.292">pending changes</text><rect fill="#FEFECE" filter="url(#fwj4fqzvak25j)" height="46.5938" style="stroke:#A80036;stroke-width:1.5;" width="140" x="827" y="907.5781"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="868" y="927.5732">weblate</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="122" x="834" y="943.8701">pending changes</text><rect fill="#EEEEEE" filter="url(#fwj4fqzvak25j)" height="3" style="stroke:#EEEEEE;stroke-width:1.0;" width="1001" x="0" y="87.1602"/><line style="stroke:#000000;stroke-width:1.0;" x1="0" x2="1001" y1="87.1602" y2="87.1602"/><line style="stroke:#000000;stroke-width:1.0;" x1="0" x2="1001" y1="90.1602" y2="90.1602"/><rect fill="#EEEEEE" filter="url(#fwj4fqzvak25j)" height="23.1328" style="stroke:#000000;stroke-width:2.0;" width="230" x="385.5" y="76.5938"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="211" x="391.5" y="92.6606">for each commit on master</text><path d="M10,116.7266 L314,116.7266 L314,123.7266 L304,133.7266 L10,133.7266 L10,116.7266 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="320.7266" style="stroke:#000000;stroke-width:2.0;" width="981" x="10" y="116.7266"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="259" x="25" y="129.7935">.github/workflows/integration.yml</text><path d="M20,140.8594 L332,140.8594 L332,147.8594 L322,157.8594 L20,157.8594 L20,140.8594 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="289.5938" style="stroke:#000000;stroke-width:2.0;" width="961" x="20" y="140.8594"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="267" x="35" y="153.9263">make weblate.push.translations</text><polygon fill="#FBFB77" filter="url(#fwj4fqzvak25j)" points="711,162.9922,765,162.9922,775,173.9922,765,185.9922,711,185.9922,701,173.9922,711,162.9922" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="50" x="713" y="179.0591">wlc lock</text><polygon fill="#A80036" points="726.5,208.2578,736.5,212.2578,726.5,216.2578,730.5,212.2578" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="514.5" x2="732.5" y1="212.2578" y2="212.2578"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="47" x="521.5" y="207.1919">wlc pull</text><polygon fill="#A80036" points="749.5,237.3906,739.5,241.3906,749.5,245.3906,745.5,241.3906" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="743.5" x2="898" y1="241.3906" y2="241.3906"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="74" x="755.5" y="236.3247">wlc commit</text><polygon fill="#A80036" points="525.5,266.5234,515.5,270.5234,525.5,274.5234,521.5,270.5234" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="519.5" x2="737.5" y1="270.5234" y2="270.5234"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="196" x="531.5" y="265.4575">git merge weblate/translations</text><polygon fill="#A80036" points="502.5,310.7891,512.5,314.7891,502.5,318.7891,506.5,314.7891" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="91.5" x2="508.5" y1="314.7891" y2="314.7891"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="101" x="98.5" y="294.5903">pybabel extract</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="399" x="98.5" y="309.7231">extract messages, store messages.pot on translations branch</text><polygon fill="#A80036" points="726.5,385.3203,736.5,389.3203,726.5,393.3203,730.5,389.3203" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="514.5" x2="732.5" y1="389.3203" y2="389.3203"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="200" x="521.5" y="338.856">pybabel update (messages.po)</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="163" x="521.5" y="353.9888">git add searx/translations</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="69" x="521.5" y="369.1216">git commit</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="51" x="521.5" y="384.2544">git push</text><polygon fill="#FBFB77" filter="url(#fwj4fqzvak25j)" points="703,402.3203,773,402.3203,783,413.3203,773,425.3203,703,425.3203,693,413.3203,703,402.3203" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="66" x="705" y="418.3872">wlc unlock</text><rect fill="#EEEEEE" filter="url(#fwj4fqzvak25j)" height="3" style="stroke:#EEEEEE;stroke-width:1.0;" width="1001" x="0" y="465.0195"/><line style="stroke:#000000;stroke-width:1.0;" x1="0" x2="1001" y1="465.0195" y2="465.0195"/><line style="stroke:#000000;stroke-width:1.0;" x1="0" x2="1001" y1="468.0195" y2="468.0195"/><rect fill="#EEEEEE" filter="url(#fwj4fqzvak25j)" height="23.1328" style="stroke:#000000;stroke-width:2.0;" width="111" x="445" y="454.4531"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="92" x="451" y="470.52">every Friday</text><path d="M143,494.5859 L513,494.5859 L513,501.5859 L503,511.5859 L143,511.5859 L143,494.5859 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="324.7266" style="stroke:#000000;stroke-width:2.0;" width="848" x="143" y="494.5859"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="325" x="158" y="507.6528">.github/workflows/translations-update.yml</text><path d="M153,518.7188 L465,518.7188 L465,525.7188 L455,535.7188 L153,535.7188 L153,518.7188 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="245.3281" style="stroke:#000000;stroke-width:2.0;" width="828" x="153" y="518.7188"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="267" x="168" y="531.7856">make weblate.translations.commit</text><polygon fill="#FBFB77" filter="url(#fwj4fqzvak25j)" points="711,540.8516,765,540.8516,775,551.8516,765,563.8516,711,563.8516,701,551.8516,711,540.8516" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="50" x="713" y="556.9185">wlc lock</text><polygon fill="#A80036" points="726.5,586.1172,736.5,590.1172,726.5,594.1172,730.5,590.1172" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="514.5" x2="732.5" y1="590.1172" y2="590.1172"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="47" x="521.5" y="585.0513">wlc pull</text><polygon fill="#A80036" points="749.5,615.25,739.5,619.25,749.5,623.25,745.5,619.25" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="743.5" x2="898" y1="619.25" y2="619.25"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="74" x="755.5" y="614.1841">wlc commit</text><polygon fill="#A80036" points="525.5,644.3828,515.5,648.3828,525.5,652.3828,521.5,648.3828" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="519.5" x2="737.5" y1="648.3828" y2="648.3828"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="196" x="531.5" y="643.3169">git merge weblate/translations</text><polygon fill="#A80036" points="281.5,718.9141,271.5,722.9141,281.5,726.9141,277.5,722.9141" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="275.5" x2="513.5" y1="722.9141" y2="722.9141"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="105" x="287.5" y="672.4497">pybabel compile</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="134" x="287.5" y="687.5825">cp searx/translations</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="44" x="287.5" y="702.7153">git add</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="69" x="287.5" y="717.8481">git commit</text><polygon fill="#FBFB77" filter="url(#fwj4fqzvak25j)" points="703,735.9141,773,735.9141,783,746.9141,773,758.9141,703,758.9141,693,746.9141,703,735.9141" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="66" x="705" y="751.981">wlc unlock</text><polygon fill="#FBFB77" filter="url(#fwj4fqzvak25j)" points="175,776.0469,365,776.0469,375,795.0469,365,814.0469,175,814.0469,165,795.0469,175,776.0469" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="186" x="177" y="792.1138">create or update pull request</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="135" x="177" y="807.2466">"Update translations"</text><rect fill="#EEEEEE" filter="url(#fwj4fqzvak25j)" height="3" style="stroke:#EEEEEE;stroke-width:1.0;" width="1001" x="0" y="846.8789"/><line style="stroke:#000000;stroke-width:1.0;" x1="0" x2="1001" y1="846.8789" y2="846.8789"/><line style="stroke:#000000;stroke-width:1.0;" x1="0" x2="1001" y1="849.8789" y2="849.8789"/><rect fill="#EEEEEE" filter="url(#fwj4fqzvak25j)" height="23.1328" style="stroke:#000000;stroke-width:2.0;" width="168" x="416.5" y="836.3125"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="149" x="422.5" y="852.3794">developper's review</text><polygon fill="#A80036" points="102.5,886.5781,92.5,890.5781,102.5,894.5781,98.5,890.5781" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="96.5" x2="269.5" y1="890.5781" y2="890.5781"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="121" x="108.5" y="885.5122">merge pull request</text><!--MD5=[e3d4a82efdc738a59c5df45b59de0f06] +@startuml +participant "master branch" as master +participant "translations_update branch" as translations_update +participant "translations branch" as translations +participant "weblate clone of\ntranslations branch" as weblate +participant "weblate\npending changes " as weblate_change + +== for each commit on master == + +group .github/workflows/integration.yml + group make weblate.push.translations + hnote over weblate : wlc lock + translations -> weblate: wlc pull + weblate_change -> weblate: wlc commit + weblate -> translations: git merge weblate/translations + master -> translations: pybabel extract\nextract messages, store messages.pot on translations branch + translations -> weblate: pybabel update (messages.po)\ngit add searx/translations\ngit commit\ngit push + hnote over weblate : wlc unlock + end +end + +== every Friday == + +group .github/workflows/translations-update.yml + group make weblate.translations.commit + hnote over weblate : wlc lock + translations -> weblate: wlc pull + weblate_change -> weblate: wlc commit + weblate -> translations: git merge weblate/translations + translations -> translations_update: pybabel compile\ncp searx/translations\ngit add\ngit commit + hnote over weblate : wlc unlock + end + hnote over translations_update : create or update pull request\n"Update translations" +end + +== developper's review == + +translations_update -> master: merge pull request +@enduml + +See +https://plantuml.com/en/sequence-diagram +https://www.planttext.com +--></g></svg> @@ -45,9 +45,8 @@ help() { buildenv: rebuild ./utils/brand.env babel.: - extract : extract messages from source files and generate POT file - update : update existing message catalogs from POT file - compile : compile translation catalogs into binary MO files + master.to.translations: update the translations branch from the messages of the master branch. + translations.to.master: copy change from the translations branch to the master branch. data.: all : update searx/languages.py and ./data/* languages : update searx/data/engines_languages.json & searx/languages.py @@ -122,46 +121,185 @@ buildenv() { return "${PIPESTATUS[0]}" } -babel.sha256sum() { - grep "msgid" "searx/translations/messages.pot" | sort | sha256sum | cut -f1 -d ' ' -} +TRANSLATIONS_WORKTREE="$CACHE/translations" + +weblate.translations.worktree() { + + # Create git worktree ${TRANSLATIONS_WORKTREE} and checkout branch + # 'translations' from Weblate's counterpart (weblate) of the SearXNG + # (origin). + # + # remote weblate https://weblate.bubu1.eu/git/searxng/searxng/ -ci.babel.update() { - local sha_before ( set -e - sha_before="$(babel.sha256sum)" - babel.extract - if [ "$(babel.sha256sum)" = "${sha_before}" ]; then - build_msg BABEL 'no changes detected, exiting' - return 1 + if ! git remote get-url weblate 2> /dev/null; then + git remote add weblate https://weblate.bubu1.eu/git/searxng/searxng/ + fi + if [ -d "${TRANSLATIONS_WORKTREE}" ]; then + pushd . + cd "${TRANSLATIONS_WORKTREE}" + git reset --hard HEAD + git pull origin translations + popd + else + mkdir -p "${TRANSLATIONS_WORKTREE}" + git worktree add "${TRANSLATIONS_WORKTREE}" translations fi - babel.update - build_msg BABEL 'update done, edit .po files if required and run babel.compile' ) - dump_return $? } -babel.extract() { - build_msg BABEL 'extract messages from source files and generate POT file' - pyenv.cmd pybabel extract -F babel.cfg \ - -o "searx/translations/messages.pot" \ - "searx/" +weblate.to.translations() { + + # Update 'translations' branch of SearXNG (origin) with last additions from + # Weblate. + + # 1. Check if Weblate is locked, if not die with error message + # 2. On Weblate's counterpart (weblate), pull master and translations branch + # from SearXNG (origin). + # 3. Commit changes made in a Weblate object on Weblate's counterpart + # (weblate). + # 4. In translations worktree, merge changes of branch 'translations' from + # remote 'weblate' and push it on branch 'translations' of 'origin' + + ( set -e + if [ "$(pyenv.cmd wlc lock-status)" != "locked: True" ]; then + die 1 "weblate must be locked, currently: $(pyenv.cmd wlc lock-status)" + fi + # weblate: commit pending changes + pyenv.cmd wlc pull + pyenv.cmd wlc commit + + # get the translations in a worktree + weblate.translations.worktree + + pushd "${TRANSLATIONS_WORKTREE}" + git remote update weblate + git merge weblate/translations + git push + popd + ) dump_return $? } -babel.update() { - build_msg BABEL 'update existing message catalogs from POT file' - pyenv.cmd pybabel update -N \ - -i "searx/translations/messages.pot" \ - -d "searx/translations" - dump_return $? +weblate.translations.commit() { + + # Update 'translations' branch of SearXNG (origin) with last additions from + # Weblate. Copy the changes to the master branch, compile translations and + # create a commit in the local branch (master) + + local existing_commit_hash commit_body commit_message exitcode + ( set -e + # lock change on weblate + pyenv.cmd wlc lock + + # get translations branch in git worktree (TRANSLATIONS_WORKTREE) + weblate.translations.worktree + existing_commit_hash=$(cd "${TRANSLATIONS_WORKTREE}"; git log -n1 --pretty=format:'%h') + + # pull weblate commits + weblate.to.translations + + # copy the changes to the master branch + cp -rv --preserve=mode,timestamps "${TRANSLATIONS_WORKTREE}/searx/translations" "searx" + + # compile translations + build_msg BABEL 'compile translation catalogs into binary MO files' + pyenv.cmd pybabel compile --statistics \ + -d "searx/translations" + # git add/commit (no push) + commit_body=$(cd "${TRANSLATIONS_WORKTREE}"; git log --pretty=format:'%h - %as - %aN <%ae>' "${existing_commit_hash}..HEAD") + commit_message=$(echo -e "[translations] update\n${commit_body}") + git add searx/translations + git commit -m "${commit_message}" + ) + exitcode=$? + ( # make sure to always unlock weblate + set -e + pyenv.cmd wlc unlock + ) + dump_return $exitcode } -babel.compile() { - build_msg BABEL 'compile translation catalogs into binary MO files' - pyenv.cmd pybabel compile --statistics \ - -d "searx/translations" - dump_return $? +weblate.push.translations() { + + # Push *translation changes* from SearXNG (origin) to Weblate's counterpart + # (weblate). + + # In branch master of SearXNG (origin) check for meaningful changes in + # folder 'searx/translations', commit changes on branch 'translations' and + # at least, pull updated branches on Weblate's counterpart (weblate). + + # 1. Create git worktree ${TRANSLATIONS_WORKTREE} and checkout branch + # 'translations' from remote 'weblate'. + # 2. Stop if there is no meaningful change in the 'master' branch (origin), + # compared to the 'translations' branch (weblate), otherwise ... + # 3. Update 'translations' branch of SearXNG (origin) with last additions + # from Weblate. + # 5. Notify Weblate to pull updated 'master' & 'translations' branch. + + local messages_pot diff_messages_pot last_commit_hash last_commit_detail \ + last_commit_message exitcode + ( set -e + # lock change on weblate + pyenv.cmd wlc lock + + # get translations branch in git worktree (TRANSLATIONS_WORKTREE) + weblate.translations.worktree + + # update messages.pot in the master branch + build_msg BABEL 'extract messages from source files and generate POT file' + messages_pot="${TRANSLATIONS_WORKTREE}/searx/translations/messages.pot" + pyenv.cmd pybabel extract -F babel.cfg \ + -o "${messages_pot}" \ + "searx/" + + # stop if there is no meaningful change in the master branch + diff_messages_pot=$(cd "${TRANSLATIONS_WORKTREE}";\ + git diff -- "searx/translations/messages.pot") + if ! echo "$diff_messages_pot" | grep -qE "[\+\-](msgid|msgstr)"; then + build_msg BABEL 'no changes detected, exiting' + return 0 + fi + + # save messages.pot in the translations branch for later + pushd "${TRANSLATIONS_WORKTREE}" + git stash push + popd + + # merge weblate commits into the translations branch + weblate.to.translations + + # restore messages.pot in the translations branch + pushd "${TRANSLATIONS_WORKTREE}" + git stash pop + popd + + # update messages.po files in the master branch + build_msg BABEL 'update existing message catalogs from POT file' + pyenv.cmd pybabel update -N \ + -i "${messages_pot}" \ + -d "${TRANSLATIONS_WORKTREE}/searx/translations" + + # git add/commit/push + last_commit_hash=$(git log -n1 --pretty=format:'%h') + last_commit_detail=$(git log -n1 --pretty=format:'%h - %as - %aN <%ae>' "${last_commit_hash}") + last_commit_message="[translations] update messages.pot and messages.po files\nFrom ${last_commit_detail}" + + pushd "${TRANSLATIONS_WORKTREE}" + git add searx/translations + git commit -m "${last_commit_message}" + git push + popd + + # notify weblate to pull updated master & translations branch + pyenv.cmd wlc pull + ) + exitcode=$? + ( # make sure to always unlock weblate + set -e + pyenv.cmd wlc unlock + ) + dump_return $exitcode } data.all() { diff --git a/requirements-dev.txt b/requirements-dev.txt index a6f29db55..e8dc0221c 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -17,3 +17,4 @@ sphinx-autobuild==2021.3.14 linuxdoc==20210324 aiounittest==1.4.0 yamllint==1.26.2 +wlc==1.12 diff --git a/searx/engines/google.py b/searx/engines/google.py index 8e649c9d1..e1caabb12 100644 --- a/searx/engines/google.py +++ b/searx/engines/google.py @@ -298,6 +298,7 @@ def request(query, params): 'ie': "utf8", 'oe': "utf8", 'start': offset, + 'filter': '0', **additional_parameters, }) diff --git a/searx/translations/ar/LC_MESSAGES/messages.mo b/searx/translations/ar/LC_MESSAGES/messages.mo Binary files differindex ec7de05a1..f81633278 100644 --- a/searx/translations/ar/LC_MESSAGES/messages.mo +++ b/searx/translations/ar/LC_MESSAGES/messages.mo diff --git a/searx/translations/bg/LC_MESSAGES/messages.mo b/searx/translations/bg/LC_MESSAGES/messages.mo Binary files differindex 52965ce76..8feffd0ae 100644 --- a/searx/translations/bg/LC_MESSAGES/messages.mo +++ b/searx/translations/bg/LC_MESSAGES/messages.mo diff --git a/searx/translations/bo/LC_MESSAGES/messages.mo b/searx/translations/bo/LC_MESSAGES/messages.mo Binary files differindex d1e6d921f..b6a18ab06 100644 --- a/searx/translations/bo/LC_MESSAGES/messages.mo +++ b/searx/translations/bo/LC_MESSAGES/messages.mo diff --git a/searx/translations/ca/LC_MESSAGES/messages.mo b/searx/translations/ca/LC_MESSAGES/messages.mo Binary files differindex 4f576c05a..99b984b96 100644 --- a/searx/translations/ca/LC_MESSAGES/messages.mo +++ b/searx/translations/ca/LC_MESSAGES/messages.mo diff --git a/searx/translations/cs/LC_MESSAGES/messages.mo b/searx/translations/cs/LC_MESSAGES/messages.mo Binary files differindex a08d93bdf..f1e19d8f5 100644 --- a/searx/translations/cs/LC_MESSAGES/messages.mo +++ b/searx/translations/cs/LC_MESSAGES/messages.mo diff --git a/searx/translations/cy/LC_MESSAGES/messages.mo b/searx/translations/cy/LC_MESSAGES/messages.mo Binary files differindex 3edc67411..2909d3491 100644 --- a/searx/translations/cy/LC_MESSAGES/messages.mo +++ b/searx/translations/cy/LC_MESSAGES/messages.mo diff --git a/searx/translations/da/LC_MESSAGES/messages.mo b/searx/translations/da/LC_MESSAGES/messages.mo Binary files differindex 315aeb4cd..98199af60 100644 --- a/searx/translations/da/LC_MESSAGES/messages.mo +++ b/searx/translations/da/LC_MESSAGES/messages.mo diff --git a/searx/translations/de/LC_MESSAGES/messages.mo b/searx/translations/de/LC_MESSAGES/messages.mo Binary files differindex df15937bb..d7b6f42f3 100644 --- a/searx/translations/de/LC_MESSAGES/messages.mo +++ b/searx/translations/de/LC_MESSAGES/messages.mo diff --git a/searx/translations/el_GR/LC_MESSAGES/messages.mo b/searx/translations/el_GR/LC_MESSAGES/messages.mo Binary files differindex f034e13b3..4847854b2 100644 --- a/searx/translations/el_GR/LC_MESSAGES/messages.mo +++ b/searx/translations/el_GR/LC_MESSAGES/messages.mo diff --git a/searx/translations/en/LC_MESSAGES/messages.mo b/searx/translations/en/LC_MESSAGES/messages.mo Binary files differindex 0f41e8d0d..6937ac3e6 100644 --- a/searx/translations/en/LC_MESSAGES/messages.mo +++ b/searx/translations/en/LC_MESSAGES/messages.mo diff --git a/searx/translations/eo/LC_MESSAGES/messages.mo b/searx/translations/eo/LC_MESSAGES/messages.mo Binary files differindex 50781d0fd..90a3ecf48 100644 --- a/searx/translations/eo/LC_MESSAGES/messages.mo +++ b/searx/translations/eo/LC_MESSAGES/messages.mo diff --git a/searx/translations/es/LC_MESSAGES/messages.mo b/searx/translations/es/LC_MESSAGES/messages.mo Binary files differindex a6b5ae5c2..ce50af7f0 100644 --- a/searx/translations/es/LC_MESSAGES/messages.mo +++ b/searx/translations/es/LC_MESSAGES/messages.mo diff --git a/searx/translations/et/LC_MESSAGES/messages.mo b/searx/translations/et/LC_MESSAGES/messages.mo Binary files differindex dbd3aa478..1e7bd8933 100644 --- a/searx/translations/et/LC_MESSAGES/messages.mo +++ b/searx/translations/et/LC_MESSAGES/messages.mo diff --git a/searx/translations/eu/LC_MESSAGES/messages.mo b/searx/translations/eu/LC_MESSAGES/messages.mo Binary files differindex 0ebbd70b6..b0030d158 100644 --- a/searx/translations/eu/LC_MESSAGES/messages.mo +++ b/searx/translations/eu/LC_MESSAGES/messages.mo diff --git a/searx/translations/fa_IR/LC_MESSAGES/messages.mo b/searx/translations/fa_IR/LC_MESSAGES/messages.mo Binary files differindex 72ed5b97e..836fbdb90 100644 --- a/searx/translations/fa_IR/LC_MESSAGES/messages.mo +++ b/searx/translations/fa_IR/LC_MESSAGES/messages.mo diff --git a/searx/translations/fi/LC_MESSAGES/messages.mo b/searx/translations/fi/LC_MESSAGES/messages.mo Binary files differindex 35d8e81e0..63f5440d1 100644 --- a/searx/translations/fi/LC_MESSAGES/messages.mo +++ b/searx/translations/fi/LC_MESSAGES/messages.mo diff --git a/searx/translations/fil/LC_MESSAGES/messages.mo b/searx/translations/fil/LC_MESSAGES/messages.mo Binary files differindex b4c558b61..4545a6ac1 100644 --- a/searx/translations/fil/LC_MESSAGES/messages.mo +++ b/searx/translations/fil/LC_MESSAGES/messages.mo diff --git a/searx/translations/fr/LC_MESSAGES/messages.mo b/searx/translations/fr/LC_MESSAGES/messages.mo Binary files differindex bcfb1deaf..0f3f8f627 100644 --- a/searx/translations/fr/LC_MESSAGES/messages.mo +++ b/searx/translations/fr/LC_MESSAGES/messages.mo diff --git a/searx/translations/gl/LC_MESSAGES/messages.mo b/searx/translations/gl/LC_MESSAGES/messages.mo Binary files differindex 20837709d..3cae7a39e 100644 --- a/searx/translations/gl/LC_MESSAGES/messages.mo +++ b/searx/translations/gl/LC_MESSAGES/messages.mo diff --git a/searx/translations/he/LC_MESSAGES/messages.mo b/searx/translations/he/LC_MESSAGES/messages.mo Binary files differindex d5e8bcec1..1c8c2434a 100644 --- a/searx/translations/he/LC_MESSAGES/messages.mo +++ b/searx/translations/he/LC_MESSAGES/messages.mo diff --git a/searx/translations/hr/LC_MESSAGES/messages.mo b/searx/translations/hr/LC_MESSAGES/messages.mo Binary files differindex 069049d75..5ee841679 100644 --- a/searx/translations/hr/LC_MESSAGES/messages.mo +++ b/searx/translations/hr/LC_MESSAGES/messages.mo diff --git a/searx/translations/hu/LC_MESSAGES/messages.mo b/searx/translations/hu/LC_MESSAGES/messages.mo Binary files differindex c507f8179..9053f3ab5 100644 --- a/searx/translations/hu/LC_MESSAGES/messages.mo +++ b/searx/translations/hu/LC_MESSAGES/messages.mo diff --git a/searx/translations/ia/LC_MESSAGES/messages.mo b/searx/translations/ia/LC_MESSAGES/messages.mo Binary files differindex 1fef39356..e9ee61d61 100644 --- a/searx/translations/ia/LC_MESSAGES/messages.mo +++ b/searx/translations/ia/LC_MESSAGES/messages.mo diff --git a/searx/translations/it/LC_MESSAGES/messages.mo b/searx/translations/it/LC_MESSAGES/messages.mo Binary files differindex acfb100f3..2029291da 100644 --- a/searx/translations/it/LC_MESSAGES/messages.mo +++ b/searx/translations/it/LC_MESSAGES/messages.mo diff --git a/searx/translations/ja/LC_MESSAGES/messages.mo b/searx/translations/ja/LC_MESSAGES/messages.mo Binary files differindex 91bc68174..a6826a77b 100644 --- a/searx/translations/ja/LC_MESSAGES/messages.mo +++ b/searx/translations/ja/LC_MESSAGES/messages.mo diff --git a/searx/translations/lt/LC_MESSAGES/messages.mo b/searx/translations/lt/LC_MESSAGES/messages.mo Binary files differindex eba67d8bc..f499bd60a 100644 --- a/searx/translations/lt/LC_MESSAGES/messages.mo +++ b/searx/translations/lt/LC_MESSAGES/messages.mo diff --git a/searx/translations/nb_NO/LC_MESSAGES/messages.mo b/searx/translations/nb_NO/LC_MESSAGES/messages.mo Binary files differnew file mode 100644 index 000000000..3b9e4639a --- /dev/null +++ b/searx/translations/nb_NO/LC_MESSAGES/messages.mo diff --git a/searx/translations/nb_NO/LC_MESSAGES/messages.po b/searx/translations/nb_NO/LC_MESSAGES/messages.po new file mode 100644 index 000000000..96b0ecb3e --- /dev/null +++ b/searx/translations/nb_NO/LC_MESSAGES/messages.po @@ -0,0 +1,1146 @@ +# Translations template for PROJECT. +# Copyright (C) 2021 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-07-31 19:11+0200\n" +"PO-Revision-Date: 2021-08-20 07:16+0000\n" +"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n" +"Language-Team: Norwegian Bokmål <https://weblate.bubu1.eu/projects/searxng/" +"searxng/nb_NO/>\n" +"Language: nb_NO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.7.2\n" +"Generated-By: Babel 2.9.1\n" + +#: searx/webapp.py:187 +msgid "files" +msgstr "filer" + +#: searx/webapp.py:188 +msgid "general" +msgstr "generelt" + +#: searx/webapp.py:189 +msgid "music" +msgstr "musikk" + +#: searx/webapp.py:190 +msgid "social media" +msgstr "sosiale media" + +#: searx/webapp.py:191 +msgid "images" +msgstr "bilder" + +#: searx/webapp.py:192 +msgid "videos" +msgstr "videoer" + +#: searx/webapp.py:193 +#, fuzzy +msgid "it" +msgstr "IT" + +#: searx/webapp.py:194 +msgid "news" +msgstr "nyheter" + +#: searx/webapp.py:195 +msgid "map" +msgstr "kart" + +#: searx/webapp.py:196 +msgid "onions" +msgstr "løktjenester" + +#: searx/webapp.py:197 +msgid "science" +msgstr "vitenskap" + +#: searx/webapp.py:201 +msgid "timeout" +msgstr "tidsavbrudd" + +#: searx/webapp.py:202 +msgid "parsing error" +msgstr "tolkningsfeil" + +#: searx/webapp.py:203 +msgid "HTTP protocol error" +msgstr "HTTP-protokollfeil" + +#: searx/webapp.py:204 +msgid "network error" +msgstr "nettverksfeil" + +#: searx/webapp.py:206 +msgid "unexpected crash" +msgstr "uventet krasj" + +#: searx/webapp.py:213 +msgid "HTTP error" +msgstr "HTTP-feil" + +#: searx/webapp.py:214 +msgid "HTTP connection error" +msgstr "HTTP-tilkoblingsfeil" + +#: searx/webapp.py:220 +msgid "proxy error" +msgstr "mellomtjenerfeil" + +#: searx/webapp.py:221 +msgid "CAPTCHA" +msgstr "CAPTCHA" + +#: searx/webapp.py:222 +msgid "too many requests" +msgstr "for mange forespørsler" + +#: searx/webapp.py:223 +msgid "access denied" +msgstr "tilgang nektet" + +#: searx/webapp.py:224 +msgid "server API error" +msgstr "Tjener-API-feil" + +#: searx/webapp.py:423 +msgid "No item found" +msgstr "Fant ingen elementer" + +#: searx/webapp.py:531 searx/webapp.py:932 +msgid "Invalid settings, please edit your preferences" +msgstr "Ugyldige innstillinger. Rediger dine preferanser." + +#: searx/webapp.py:547 +msgid "Invalid settings" +msgstr "Ugyldige innstillinger" + +#: searx/webapp.py:619 searx/webapp.py:685 +msgid "search error" +msgstr "søkefeil" + +#: searx/webapp.py:728 +msgid "{minutes} minute(s) ago" +msgstr "for {minutes} minute(s) siden" + +#: searx/webapp.py:730 +msgid "{hours} hour(s), {minutes} minute(s) ago" +msgstr "for {hours} time(r), {minutes} minutt(er) siden" + +#: searx/webapp.py:853 +msgid "Suspended" +msgstr "" + +#: searx/answerers/random/answerer.py:65 +msgid "Random value generator" +msgstr "Generator for tilfeldige tall" + +#: searx/answerers/random/answerer.py:66 +msgid "Generate different random values" +msgstr "Generer forskjellige tilfeldige verdier" + +#: searx/answerers/statistics/answerer.py:50 +msgid "Statistics functions" +msgstr "Statistikkfunksjoner" + +#: searx/answerers/statistics/answerer.py:51 +msgid "Compute {functions} of the arguments" +msgstr "Regn ut {functions} av parameterne" + +#: searx/engines/openstreetmap.py:155 +msgid "Get directions" +msgstr "Få veibeskrivelser" + +#: searx/engines/pdbe.py:90 +msgid "{title} (OBSOLETE)" +msgstr "{title} (FORELDET)" + +#: searx/engines/pdbe.py:97 +msgid "This entry has been superseded by" +msgstr "Denne oppføringen har blitt erstattet av" + +#: searx/engines/pubmed.py:78 +msgid "No abstract is available for this publication." +msgstr "Sammendrag er ikke tilgjengelig for denne publikasjonen." + +#: searx/engines/qwant.py:196 +msgid "Source" +msgstr "Kilde" + +#: searx/engines/qwant.py:198 +msgid "Channel" +msgstr "Kanal" + +#: searx/plugins/hash_plugin.py:24 +msgid "Converts strings to different hash digests." +msgstr "Konverterer strenger til andre sjekksumsføljetonger." + +#: searx/plugins/hash_plugin.py:52 +msgid "hash digest" +msgstr "sjekksumsføljetong" + +#: searx/plugins/infinite_scroll.py:3 +msgid "Infinite scroll" +msgstr "Uendelig rulling" + +#: searx/plugins/infinite_scroll.py:4 +msgid "Automatically load next page when scrolling to bottom of current page" +msgstr "Last inn neste side automatisk ved rulling til bunnen av nåværende side" + +#: searx/plugins/oa_doi_rewrite.py:9 +msgid "Open Access DOI rewrite" +msgstr "" + +#: searx/plugins/oa_doi_rewrite.py:10 +msgid "" +"Avoid paywalls by redirecting to open-access versions of publications " +"when available" +msgstr "" + +#: searx/plugins/search_on_category_select.py:18 +msgid "Search on category select" +msgstr "" + +#: searx/plugins/search_on_category_select.py:19 +msgid "" +"Perform search immediately if a category selected. Disable to select " +"multiple categories. (JavaScript required)" +msgstr "" + +#: searx/plugins/self_info.py:19 +msgid "Self Informations" +msgstr "" + +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Tracker URL remover" +msgstr "" + +#: searx/plugins/tracker_url_remover.py:28 +msgid "Remove trackers arguments from the returned URL" +msgstr "" + +#: searx/plugins/vim_hotkeys.py:3 +msgid "Vim-like hotkeys" +msgstr "Vim-lignende hurtigtaster" + +#: searx/plugins/vim_hotkeys.py:4 +msgid "" +"Navigate search results with Vim-like hotkeys (JavaScript required). " +"Press \"h\" key on main or result page to get help." +msgstr "" + +#: searx/templates/oscar/404.html:4 searx/templates/simple/404.html:4 +msgid "Page not found" +msgstr "Fant ikke siden" + +#: searx/templates/oscar/404.html:6 searx/templates/simple/404.html:6 +#, python-format +msgid "Go to %(search_page)s." +msgstr "Gå til %(search_page)s." + +#: searx/templates/oscar/404.html:6 searx/templates/simple/404.html:6 +msgid "search page" +msgstr "søkeside" + +#: searx/templates/oscar/about.html:2 searx/templates/oscar/navbar.html:6 +msgid "about" +msgstr "om" + +#: searx/templates/oscar/advanced.html:4 +msgid "Advanced settings" +msgstr "Avanserte innstillinger" + +#: searx/templates/oscar/base.html:55 +#: searx/templates/oscar/messages/first_time.html:4 +#: searx/templates/oscar/messages/save_settings_successfull.html:5 +#: searx/templates/oscar/messages/unknow_error.html:5 +msgid "Close" +msgstr "Lukk" + +#: searx/templates/oscar/base.html:57 +#: searx/templates/oscar/messages/no_results.html:4 +#: searx/templates/simple/messages/no_results.html:4 +#: searx/templates/simple/results.html:45 +msgid "Error!" +msgstr "Feil!" + +#: searx/templates/oscar/base.html:85 searx/templates/simple/base.html:53 +msgid "Powered by" +msgstr "Drevet av" + +#: searx/templates/oscar/base.html:85 searx/templates/simple/base.html:53 +msgid "a privacy-respecting, hackable metasearch engine" +msgstr "" + +#: searx/templates/oscar/base.html:86 searx/templates/simple/base.html:54 +msgid "Source code" +msgstr "Kildekode" + +#: searx/templates/oscar/base.html:87 searx/templates/simple/base.html:55 +msgid "Issue tracker" +msgstr "Problemsporer" + +#: searx/templates/oscar/base.html:88 +#: searx/templates/oscar/messages/no_results.html:13 +#: searx/templates/simple/base.html:56 +#: searx/templates/simple/messages/no_results.html:14 +msgid "Public instances" +msgstr "Offentlige instanser" + +#: searx/templates/oscar/base.html:89 searx/templates/simple/base.html:57 +msgid "Contact instance maintainer" +msgstr "" + +#: searx/templates/oscar/languages.html:2 +msgid "Language" +msgstr "Språk" + +#: searx/templates/oscar/languages.html:4 +#: searx/templates/simple/languages.html:2 +#: searx/templates/simple/preferences.html:118 +msgid "Default language" +msgstr "Forvalgt språk" + +#: searx/templates/oscar/macros.html:23 +#: searx/templates/simple/result_templates/torrent.html:6 +msgid "magnet link" +msgstr "magnetlenke" + +#: searx/templates/oscar/macros.html:24 +#: searx/templates/simple/result_templates/torrent.html:7 +msgid "torrent file" +msgstr "torrentfil" + +#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39 +#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75 +#: searx/templates/simple/macros.html:44 +msgid "cached" +msgstr "hurtiglagret" + +#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59 +#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93 +#: searx/templates/simple/macros.html:44 +msgid "proxied" +msgstr "mellomtjent" + +#: searx/templates/oscar/macros.html:133 +#: searx/templates/oscar/preferences.html:318 +#: searx/templates/oscar/preferences.html:336 +#: searx/templates/oscar/preferences.html:390 +#: searx/templates/simple/preferences.html:182 +msgid "Allow" +msgstr "Tillat" + +#: searx/templates/oscar/macros.html:139 +msgid "broken" +msgstr "knekt" + +#: searx/templates/oscar/macros.html:141 +msgid "supported" +msgstr "støttet" + +#: searx/templates/oscar/macros.html:143 +msgid "not supported" +msgstr "ikke støttet" + +#: searx/templates/oscar/navbar.html:7 +#: searx/templates/oscar/preferences.html:89 +msgid "preferences" +msgstr "innstillinger" + +#: searx/templates/oscar/preferences.html:11 +#: searx/templates/simple/preferences.html:27 +msgid "No HTTPS" +msgstr "Ingen HTTPS" + +#: searx/templates/oscar/preferences.html:13 +#: searx/templates/oscar/results.html:27 searx/templates/simple/results.html:40 +msgid "Number of results" +msgstr "Antall resultater" + +#: searx/templates/oscar/preferences.html:13 +msgid "Avg." +msgstr "Gjen." + +#: searx/templates/oscar/messages/no_results.html:8 +#: searx/templates/oscar/preferences.html:16 +#: searx/templates/oscar/preferences.html:17 +#: searx/templates/oscar/results.html:36 +#: searx/templates/simple/messages/no_results.html:8 +#: searx/templates/simple/preferences.html:29 +#: searx/templates/simple/preferences.html:30 +#: searx/templates/simple/results.html:48 +msgid "View error logs and submit a bug report" +msgstr "Vis feillogger og send inn en feilrapport" + +#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/stats.html:70 +#: searx/templates/simple/preferences.html:51 +#: searx/templates/simple/stats.html:70 +msgid "Median" +msgstr "Median" + +#: searx/templates/oscar/preferences.html:38 +#: searx/templates/oscar/stats.html:76 +#: searx/templates/simple/preferences.html:52 +#: searx/templates/simple/stats.html:76 +msgid "P80" +msgstr "P80" + +#: searx/templates/oscar/preferences.html:39 +#: searx/templates/oscar/stats.html:82 +#: searx/templates/simple/preferences.html:53 +#: searx/templates/simple/stats.html:82 +msgid "P95" +msgstr "P95" + +#: searx/templates/oscar/preferences.html:67 +#: searx/templates/simple/preferences.html:81 +msgid "Failed checker test(s): " +msgstr "" + +#: searx/templates/oscar/preferences.html:95 +#: searx/templates/simple/preferences.html:99 +msgid "Preferences" +msgstr "Innstillinger" + +#: searx/templates/oscar/preferences.html:100 +#: searx/templates/oscar/preferences.html:110 +#: searx/templates/simple/preferences.html:105 +msgid "General" +msgstr "Generelt" + +#: searx/templates/oscar/preferences.html:101 +#: searx/templates/oscar/preferences.html:192 +msgid "User Interface" +msgstr "Brukergrensesnitt" + +#: searx/templates/oscar/preferences.html:102 +#: searx/templates/oscar/preferences.html:256 +#: searx/templates/simple/preferences.html:290 +msgid "Privacy" +msgstr "Personvern" + +#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:295 +#: searx/templates/simple/preferences.html:172 +msgid "Engines" +msgstr "Søkemotorer" + +#: searx/templates/oscar/preferences.html:104 +msgid "Special Queries" +msgstr "Spesialspørringer" + +#: searx/templates/oscar/preferences.html:105 +#: searx/templates/oscar/preferences.html:430 +#: searx/templates/simple/preferences.html:258 +msgid "Cookies" +msgstr "Kaker" + +#: searx/templates/oscar/preferences.html:122 +#: searx/templates/oscar/preferences.html:124 +#: searx/templates/simple/preferences.html:108 +msgid "Default categories" +msgstr "Forvalgte kategorier" + +#: searx/templates/oscar/preferences.html:132 +#: searx/templates/simple/preferences.html:115 +#: searx/templates/simple/preferences.html:300 +msgid "Search language" +msgstr "Søkespråk" + +#: searx/templates/oscar/preferences.html:133 +#: searx/templates/simple/preferences.html:124 +msgid "What language do you prefer for search?" +msgstr "" + +#: searx/templates/oscar/preferences.html:140 +#: searx/templates/oscar/preferences.html:322 +#: searx/templates/oscar/preferences.html:332 +#: searx/templates/simple/preferences.html:143 +#: searx/templates/simple/preferences.html:186 +msgid "SafeSearch" +msgstr "TrygtSøk" + +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/simple/preferences.html:151 +msgid "Filter content" +msgstr "Filtrer innhold" + +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/simple/preferences.html:146 +msgid "Strict" +msgstr "Strengt" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/simple/preferences.html:147 +msgid "Moderate" +msgstr "Moderat" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/simple/preferences.html:148 +msgid "None" +msgstr "Ingen" + +#: searx/templates/oscar/preferences.html:152 +#: searx/templates/simple/preferences.html:129 +msgid "Autocomplete" +msgstr "Auto-fullføring" + +#: searx/templates/oscar/preferences.html:153 +#: searx/templates/simple/preferences.html:138 +msgid "Find stuff as you type" +msgstr "Finn ting mens du skriver" + +#: searx/templates/oscar/preferences.html:167 +#: searx/templates/simple/preferences.html:157 +msgid "Open Access DOI resolver" +msgstr "" + +#: searx/templates/oscar/preferences.html:168 +#: searx/templates/simple/preferences.html:167 +msgid "" +"Redirect to open-access versions of publications when available (plugin " +"required)" +msgstr "" + +#: searx/templates/oscar/preferences.html:182 +msgid "Engine tokens" +msgstr "Søkemotorsymboler" + +#: searx/templates/oscar/preferences.html:183 +msgid "Access tokens for private engines" +msgstr "" + +#: searx/templates/oscar/preferences.html:197 +#: searx/templates/simple/preferences.html:219 +msgid "Interface language" +msgstr "Grensesnitts-språk" + +#: searx/templates/oscar/preferences.html:198 +#: searx/templates/simple/preferences.html:227 +msgid "Change the language of the layout" +msgstr "" + +#: searx/templates/oscar/preferences.html:209 +#: searx/templates/simple/preferences.html:232 +msgid "Themes" +msgstr "Drakter" + +#: searx/templates/oscar/preferences.html:210 +#: searx/templates/simple/preferences.html:240 +msgid "Change searx layout" +msgstr "" + +#: searx/templates/oscar/preferences.html:221 +#: searx/templates/oscar/preferences.html:227 +msgid "Choose style for this theme" +msgstr "Velg stil for denne drakten" + +#: searx/templates/oscar/preferences.html:221 +#: searx/templates/oscar/preferences.html:227 +msgid "Style" +msgstr "Stil" + +#: searx/templates/oscar/preferences.html:230 +msgid "Show advanced settings" +msgstr "Vis avanserte innstillinger" + +#: searx/templates/oscar/preferences.html:231 +msgid "Show advanced settings panel in the home page by default" +msgstr "" + +#: searx/templates/oscar/preferences.html:234 +#: searx/templates/oscar/preferences.html:244 +#: searx/templates/simple/preferences.html:248 +msgid "On" +msgstr "På" + +#: searx/templates/oscar/preferences.html:235 +#: searx/templates/oscar/preferences.html:245 +#: searx/templates/simple/preferences.html:249 +msgid "Off" +msgstr "Av" + +#: searx/templates/oscar/preferences.html:240 +#: searx/templates/simple/preferences.html:245 +msgid "Results on new tabs" +msgstr "Resultater i nye faner" + +#: searx/templates/oscar/preferences.html:241 +#: searx/templates/simple/preferences.html:252 +#, fuzzy +msgid "Open result links on new browser tabs" +msgstr "Åpne resultatlenker i nye nettleserfaner" + +#: searx/templates/oscar/preferences.html:261 +#: searx/templates/simple/preferences.html:293 +msgid "Method" +msgstr "Metode" + +#: searx/templates/oscar/preferences.html:262 +msgid "" +"Change how forms are submited, <a " +"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" +" rel=\"external\">learn more about request methods</a>" +msgstr "" + +#: searx/templates/oscar/preferences.html:272 +#: searx/templates/simple/preferences.html:305 +msgid "Image proxy" +msgstr "Bildemellomtjener" + +#: searx/templates/oscar/preferences.html:273 +#: searx/templates/simple/preferences.html:312 +msgid "Proxying image results through searx" +msgstr "" + +#: searx/templates/oscar/preferences.html:276 +#: searx/templates/simple/preferences.html:308 +msgid "Enabled" +msgstr "Påskrudd" + +#: searx/templates/oscar/preferences.html:277 +#: searx/templates/simple/preferences.html:309 +msgid "Disabled" +msgstr "Avskrudd" + +#: searx/templates/oscar/preferences.html:303 +msgid "Allow all" +msgstr "Tillat alle" + +#: searx/templates/oscar/preferences.html:304 +msgid "Disable all" +msgstr "Nekt alle" + +#: searx/templates/oscar/preferences.html:319 +#: searx/templates/oscar/preferences.html:335 +#: searx/templates/oscar/stats.html:29 +#: searx/templates/simple/preferences.html:183 +#: searx/templates/simple/stats.html:28 +msgid "Engine name" +msgstr "Søkemotornavn" + +#: searx/templates/oscar/preferences.html:320 +#: searx/templates/oscar/preferences.html:334 +#: searx/templates/simple/preferences.html:184 +msgid "Shortcut" +msgstr "Snarvei" + +#: searx/templates/oscar/preferences.html:321 +#: searx/templates/oscar/preferences.html:333 +msgid "Selected language" +msgstr "Valgt språk" + +#: searx/templates/oscar/preferences.html:323 +#: searx/templates/oscar/preferences.html:331 +#: searx/templates/oscar/time-range.html:2 +#: searx/templates/simple/preferences.html:187 +msgid "Time range" +msgstr "Tidsområde" + +#: searx/templates/oscar/preferences.html:324 +#: searx/templates/oscar/preferences.html:330 +#: searx/templates/oscar/stats.html:32 +#: searx/templates/simple/preferences.html:188 +#: searx/templates/simple/stats.html:31 +msgid "Response time" +msgstr "Svartid" + +#: searx/templates/oscar/preferences.html:325 +#: searx/templates/oscar/preferences.html:329 +#: searx/templates/simple/preferences.html:189 +msgid "Max time" +msgstr "Mak. tid" + +#: searx/templates/oscar/preferences.html:326 +#: searx/templates/oscar/preferences.html:328 +#: searx/templates/simple/preferences.html:190 +msgid "Reliablity" +msgstr "Pålitelighet" + +#: searx/templates/oscar/preferences.html:384 +msgid "Query" +msgstr "Spørring" + +#: searx/templates/oscar/preferences.html:391 +msgid "Keywords" +msgstr "Nøkkelord" + +#: searx/templates/oscar/preferences.html:392 +msgid "Name" +msgstr "Navn" + +#: searx/templates/oscar/preferences.html:393 +msgid "Description" +msgstr "Beskrivelse" + +#: searx/templates/oscar/preferences.html:394 +msgid "Examples" +msgstr "Eksempler" + +#: searx/templates/oscar/preferences.html:399 +msgid "This is the list of searx's instant answering modules." +msgstr "Dette er en liste over moduler for umiddelbare svar i searx." + +#: searx/templates/oscar/preferences.html:412 +msgid "This is the list of plugins." +msgstr "Dette er en liste over programtillegg." + +#: searx/templates/oscar/preferences.html:433 +#: searx/templates/simple/preferences.html:261 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "" +"Dette er en liste over kaker og verdiene i dem som searx lagrer på " +"datamaskinen din." + +#: searx/templates/oscar/preferences.html:434 +#: searx/templates/simple/preferences.html:262 +msgid "With that list, you can assess searx transparency." +msgstr "Med denne listen kan du bedømme searx-åpenhet." + +#: searx/templates/oscar/preferences.html:439 +#: searx/templates/simple/preferences.html:268 +msgid "Cookie name" +msgstr "Kakenavn" + +#: searx/templates/oscar/preferences.html:440 +#: searx/templates/simple/preferences.html:269 +msgid "Value" +msgstr "Verdi" + +#: searx/templates/oscar/preferences.html:457 +#: searx/templates/simple/preferences.html:321 +msgid "" +"These settings are stored in your cookies, this allows us not to store " +"this data about you." +msgstr "" + +#: searx/templates/oscar/preferences.html:458 +#: searx/templates/simple/preferences.html:323 +msgid "" +"These cookies serve your sole convenience, we don't use these cookies to " +"track you." +msgstr "" + +#: searx/templates/oscar/preferences.html:462 +#: searx/templates/simple/preferences.html:282 +msgid "Search URL of the currently saved preferences" +msgstr "Søkenettadresse med nåværende lagrede innstillinger" + +#: searx/templates/oscar/preferences.html:463 +#: searx/templates/simple/preferences.html:286 +msgid "" +"Note: specifying custom settings in the search URL can reduce privacy by " +"leaking data to the clicked result sites." +msgstr "" + +#: searx/templates/oscar/preferences.html:468 +#: searx/templates/simple/preferences.html:326 +msgid "save" +msgstr "lagre" + +#: searx/templates/oscar/preferences.html:469 +#: searx/templates/simple/preferences.html:328 +msgid "back" +msgstr "tilbake" + +#: searx/templates/oscar/preferences.html:470 +#: searx/templates/simple/preferences.html:327 +msgid "Reset defaults" +msgstr "Tilbakestill forvalg" + +#: searx/templates/oscar/results.html:32 searx/templates/simple/results.html:45 +msgid "Engines cannot retrieve results" +msgstr "" + +#: searx/templates/oscar/results.html:53 searx/templates/simple/results.html:66 +msgid "Suggestions" +msgstr "Forslag" + +#: searx/templates/oscar/results.html:74 +msgid "Links" +msgstr "Lenker" + +#: searx/templates/oscar/results.html:79 searx/templates/simple/results.html:84 +msgid "Search URL" +msgstr "Søkenettadresse" + +#: searx/templates/oscar/results.html:84 searx/templates/simple/results.html:89 +#, fuzzy +msgid "Download results" +msgstr "Last ned resultater" + +#: searx/templates/oscar/results.html:95 +msgid "RSS subscription" +msgstr "RSS-abonnement" + +#: searx/templates/oscar/results.html:104 +#, fuzzy +msgid "Search results" +msgstr "Søkeresultater" + +#: searx/templates/oscar/results.html:109 +#: searx/templates/simple/results.html:113 +msgid "Try searching for:" +msgstr "Prøv å søke etter:" + +#: searx/templates/oscar/results.html:162 +#: searx/templates/oscar/results.html:187 +#: searx/templates/simple/results.html:179 +msgid "next page" +msgstr "neste side" + +#: searx/templates/oscar/results.html:169 +#: searx/templates/oscar/results.html:180 +#: searx/templates/simple/results.html:162 +msgid "previous page" +msgstr "forrige side" + +#: searx/templates/oscar/search.html:6 searx/templates/oscar/search_full.html:9 +#: searx/templates/simple/search.html:4 +msgid "Search for..." +msgstr "Søk etter …" + +#: searx/templates/oscar/search.html:8 +#: searx/templates/oscar/search_full.html:11 +#: searx/templates/simple/search.html:6 +msgid "Start search" +msgstr "Start søk" + +#: searx/templates/oscar/search.html:9 +#: searx/templates/oscar/search_full.html:12 +#: searx/templates/simple/search.html:5 +msgid "Clear search" +msgstr "Tøm søk" + +#: searx/templates/oscar/search_full.html:12 +msgid "Clear" +msgstr "Tøm" + +#: searx/templates/oscar/stats.html:4 +msgid "stats" +msgstr "statistikk" + +#: searx/templates/oscar/stats.html:18 searx/templates/simple/stats.html:21 +msgid "Engine stats" +msgstr "Søkemotorstatistikk" + +#: searx/templates/oscar/stats.html:30 searx/templates/simple/stats.html:29 +msgid "Scores" +msgstr "Poengsummer" + +#: searx/templates/oscar/stats.html:31 searx/templates/simple/stats.html:30 +msgid "Result count" +msgstr "" + +#: searx/templates/oscar/stats.html:33 searx/templates/simple/stats.html:32 +msgid "Reliability" +msgstr "Pålitelighet" + +#: searx/templates/oscar/stats.html:42 searx/templates/simple/stats.html:41 +msgid "Scores per result" +msgstr "" + +#: searx/templates/oscar/stats.html:65 searx/templates/simple/stats.html:65 +msgid "Total" +msgstr "" + +#: searx/templates/oscar/stats.html:66 searx/templates/simple/stats.html:66 +msgid "HTTP" +msgstr "HTTP" + +#: searx/templates/oscar/stats.html:67 searx/templates/simple/stats.html:67 +msgid "Processing" +msgstr "" + +#: searx/templates/oscar/stats.html:106 searx/templates/simple/stats.html:105 +msgid "Warnings" +msgstr "Advarsler" + +#: searx/templates/oscar/stats.html:106 searx/templates/simple/stats.html:105 +msgid "Errors and exceptions" +msgstr "" + +#: searx/templates/oscar/stats.html:112 searx/templates/simple/stats.html:111 +msgid "Exception" +msgstr "Unntak" + +#: searx/templates/oscar/stats.html:114 searx/templates/simple/stats.html:113 +msgid "Message" +msgstr "Melding" + +#: searx/templates/oscar/stats.html:116 searx/templates/simple/stats.html:115 +msgid "Percentage" +msgstr "" + +#: searx/templates/oscar/stats.html:118 searx/templates/simple/stats.html:117 +msgid "Parameter" +msgstr "Parameter" + +#: searx/templates/oscar/result_templates/files.html:35 +#: searx/templates/oscar/stats.html:126 searx/templates/simple/stats.html:125 +msgid "Filename" +msgstr "Filnavn" + +#: searx/templates/oscar/stats.html:127 searx/templates/simple/stats.html:126 +msgid "Function" +msgstr "Funksjon" + +#: searx/templates/oscar/stats.html:128 searx/templates/simple/stats.html:127 +msgid "Code" +msgstr "Kode" + +#: searx/templates/oscar/stats.html:135 searx/templates/simple/stats.html:134 +msgid "Checker" +msgstr "" + +#: searx/templates/oscar/stats.html:138 searx/templates/simple/stats.html:137 +msgid "Failed test" +msgstr "" + +#: searx/templates/oscar/stats.html:139 searx/templates/simple/stats.html:138 +msgid "Comment(s)" +msgstr "Kommentar(er)" + +#: searx/templates/oscar/time-range.html:5 +#: searx/templates/simple/time-range.html:3 +msgid "Anytime" +msgstr "Når som helst" + +#: searx/templates/oscar/time-range.html:8 +#: searx/templates/simple/time-range.html:6 +#, fuzzy +msgid "Last day" +msgstr "Siste dag" + +#: searx/templates/oscar/time-range.html:11 +#: searx/templates/simple/time-range.html:9 +msgid "Last week" +msgstr "Siste uke" + +#: searx/templates/oscar/time-range.html:14 +#: searx/templates/simple/time-range.html:12 +msgid "Last month" +msgstr "Siste måned" + +#: searx/templates/oscar/time-range.html:17 +#: searx/templates/simple/time-range.html:15 +msgid "Last year" +msgstr "Siste år" + +#: searx/templates/oscar/messages/first_time.html:6 +#: searx/templates/oscar/messages/no_data_available.html:3 +msgid "Heads up!" +msgstr "" + +#: searx/templates/oscar/messages/first_time.html:7 +msgid "It look like you are using searx first time." +msgstr "" + +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "Info." + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "" + +#: searx/templates/oscar/messages/no_data_available.html:4 +#: searx/templates/simple/stats.html:24 +msgid "There is currently no data available. " +msgstr "" + +#: searx/templates/oscar/messages/no_results.html:4 +#: searx/templates/simple/messages/no_results.html:4 +msgid "Engines cannot retrieve results." +msgstr "" + +#: searx/templates/oscar/messages/no_results.html:13 +#: searx/templates/simple/messages/no_results.html:14 +msgid "Please, try again later or find another searx instance." +msgstr "" + +#: searx/templates/oscar/messages/no_results.html:17 +#: searx/templates/simple/messages/no_results.html:18 +msgid "Sorry!" +msgstr "Beklager." + +#: searx/templates/oscar/messages/no_results.html:18 +#: searx/templates/simple/messages/no_results.html:19 +msgid "" +"we didn't find any results. Please use another query or search in more " +"categories." +msgstr "" + +#: searx/templates/oscar/messages/save_settings_successfull.html:7 +msgid "Well done!" +msgstr "" + +#: searx/templates/oscar/messages/save_settings_successfull.html:8 +msgid "Settings saved successfully." +msgstr "Innstillinger lagret." + +#: searx/templates/oscar/messages/unknow_error.html:7 +msgid "Oh snap!" +msgstr "Oida." + +#: searx/templates/oscar/messages/unknow_error.html:8 +msgid "Something went wrong." +msgstr "Noe gikk galt." + +#: searx/templates/oscar/result_templates/default.html:7 +#: searx/templates/oscar/result_templates/files.html:7 +#: searx/templates/oscar/result_templates/files.html:10 +#: searx/templates/simple/result_templates/default.html:6 +msgid "show media" +msgstr "vis media" + +#: searx/templates/oscar/result_templates/default.html:7 +#: searx/templates/oscar/result_templates/files.html:7 +#: searx/templates/simple/result_templates/default.html:6 +msgid "hide media" +msgstr "skjul media" + +#: searx/templates/oscar/result_templates/files.html:33 +#: searx/templates/oscar/result_templates/videos.html:19 +msgid "Author" +msgstr "Opphavsmann" + +#: searx/templates/oscar/result_templates/files.html:37 +#: searx/templates/oscar/result_templates/torrent.html:7 +#: searx/templates/simple/result_templates/torrent.html:11 +msgid "Filesize" +msgstr "Filstørrelse" + +#: searx/templates/oscar/result_templates/files.html:38 +#: searx/templates/oscar/result_templates/torrent.html:9 +#: searx/templates/simple/result_templates/torrent.html:12 +msgid "Bytes" +msgstr "Byte" + +#: searx/templates/oscar/result_templates/files.html:39 +#: searx/templates/oscar/result_templates/torrent.html:10 +#: searx/templates/simple/result_templates/torrent.html:13 +msgid "kiB" +msgstr "kiB" + +#: searx/templates/oscar/result_templates/files.html:40 +#: searx/templates/oscar/result_templates/torrent.html:11 +#: searx/templates/simple/result_templates/torrent.html:14 +msgid "MiB" +msgstr "MiB" + +#: searx/templates/oscar/result_templates/files.html:41 +#: searx/templates/oscar/result_templates/torrent.html:12 +#: searx/templates/simple/result_templates/torrent.html:15 +msgid "GiB" +msgstr "GiB" + +#: searx/templates/oscar/result_templates/files.html:42 +#: searx/templates/oscar/result_templates/torrent.html:13 +#: searx/templates/simple/result_templates/torrent.html:16 +msgid "TiB" +msgstr "TiB" + +#: searx/templates/oscar/result_templates/files.html:46 +msgid "Date" +msgstr "Dato" + +#: searx/templates/oscar/result_templates/files.html:48 +msgid "Type" +msgstr "Type" + +#: searx/templates/oscar/result_templates/images.html:27 +msgid "Get image" +msgstr "Hent bilde" + +#: searx/templates/oscar/result_templates/images.html:30 +msgid "View source" +msgstr "Vis kilde" + +#: searx/templates/oscar/result_templates/map.html:26 +#: searx/templates/simple/result_templates/map.html:11 +msgid "address" +msgstr "adresse" + +#: searx/templates/oscar/result_templates/map.html:59 +#: searx/templates/simple/result_templates/map.html:42 +msgid "show map" +msgstr "vis kart" + +#: searx/templates/oscar/result_templates/map.html:59 +#: searx/templates/simple/result_templates/map.html:42 +msgid "hide map" +msgstr "skjul kart" + +#: searx/templates/oscar/result_templates/torrent.html:6 +#: searx/templates/simple/result_templates/torrent.html:9 +msgid "Seeder" +msgstr "Deler" + +#: searx/templates/oscar/result_templates/torrent.html:6 +#: searx/templates/simple/result_templates/torrent.html:9 +msgid "Leecher" +msgstr "Henter" + +#: searx/templates/oscar/result_templates/torrent.html:15 +#: searx/templates/simple/result_templates/torrent.html:20 +msgid "Number of Files" +msgstr "Antall filer" + +#: searx/templates/oscar/result_templates/videos.html:7 +#: searx/templates/simple/result_templates/videos.html:6 +msgid "show video" +msgstr "vis video" + +#: searx/templates/oscar/result_templates/videos.html:7 +#: searx/templates/simple/result_templates/videos.html:6 +msgid "hide video" +msgstr "skjul video" + +#: searx/templates/oscar/result_templates/videos.html:20 +msgid "Length" +msgstr "Lengde" + +#: searx/templates/simple/categories.html:6 +msgid "Click on the magnifier to perform search" +msgstr "" + +#: searx/templates/simple/preferences.html:83 +msgid "Errors:" +msgstr "Feil:" + +#: searx/templates/simple/preferences.html:173 +msgid "Currently used search engines" +msgstr "" + +#: searx/templates/simple/preferences.html:185 +msgid "Supports selected language" +msgstr "Støtter valgt språk" + +#: searx/templates/simple/preferences.html:216 +msgid "User interface" +msgstr "Brukergrensesnitt" + +#: searx/templates/simple/results.html:24 +msgid "Answers" +msgstr "Svar" diff --git a/searx/translations/nl/LC_MESSAGES/messages.mo b/searx/translations/nl/LC_MESSAGES/messages.mo Binary files differindex ed60684da..4d72e102d 100644 --- a/searx/translations/nl/LC_MESSAGES/messages.mo +++ b/searx/translations/nl/LC_MESSAGES/messages.mo diff --git a/searx/translations/nl_BE/LC_MESSAGES/messages.mo b/searx/translations/nl_BE/LC_MESSAGES/messages.mo Binary files differindex b815deba3..78c61ce5e 100644 --- a/searx/translations/nl_BE/LC_MESSAGES/messages.mo +++ b/searx/translations/nl_BE/LC_MESSAGES/messages.mo diff --git a/searx/translations/oc/LC_MESSAGES/messages.mo b/searx/translations/oc/LC_MESSAGES/messages.mo Binary files differindex 5a2e377f0..800502bfd 100644 --- a/searx/translations/oc/LC_MESSAGES/messages.mo +++ b/searx/translations/oc/LC_MESSAGES/messages.mo diff --git a/searx/translations/pl/LC_MESSAGES/messages.mo b/searx/translations/pl/LC_MESSAGES/messages.mo Binary files differindex 2716d2a0d..f5f69f78a 100644 --- a/searx/translations/pl/LC_MESSAGES/messages.mo +++ b/searx/translations/pl/LC_MESSAGES/messages.mo diff --git a/searx/translations/pt/LC_MESSAGES/messages.mo b/searx/translations/pt/LC_MESSAGES/messages.mo Binary files differindex d086bc123..9a45acb12 100644 --- a/searx/translations/pt/LC_MESSAGES/messages.mo +++ b/searx/translations/pt/LC_MESSAGES/messages.mo diff --git a/searx/translations/pt_BR/LC_MESSAGES/messages.mo b/searx/translations/pt_BR/LC_MESSAGES/messages.mo Binary files differindex eed22bfa5..51a0fb056 100644 --- a/searx/translations/pt_BR/LC_MESSAGES/messages.mo +++ b/searx/translations/pt_BR/LC_MESSAGES/messages.mo diff --git a/searx/translations/ro/LC_MESSAGES/messages.mo b/searx/translations/ro/LC_MESSAGES/messages.mo Binary files differindex d7ed9d488..970c1a179 100644 --- a/searx/translations/ro/LC_MESSAGES/messages.mo +++ b/searx/translations/ro/LC_MESSAGES/messages.mo diff --git a/searx/translations/ru/LC_MESSAGES/messages.mo b/searx/translations/ru/LC_MESSAGES/messages.mo Binary files differindex 6476b9cad..42b854b1b 100644 --- a/searx/translations/ru/LC_MESSAGES/messages.mo +++ b/searx/translations/ru/LC_MESSAGES/messages.mo diff --git a/searx/translations/sk/LC_MESSAGES/messages.mo b/searx/translations/sk/LC_MESSAGES/messages.mo Binary files differindex 0bcc0b9d0..575162a9d 100644 --- a/searx/translations/sk/LC_MESSAGES/messages.mo +++ b/searx/translations/sk/LC_MESSAGES/messages.mo diff --git a/searx/translations/sl/LC_MESSAGES/messages.mo b/searx/translations/sl/LC_MESSAGES/messages.mo Binary files differindex 49d9a8818..bc5586afa 100644 --- a/searx/translations/sl/LC_MESSAGES/messages.mo +++ b/searx/translations/sl/LC_MESSAGES/messages.mo diff --git a/searx/translations/sr/LC_MESSAGES/messages.mo b/searx/translations/sr/LC_MESSAGES/messages.mo Binary files differindex a708020b9..f469fd6b1 100644 --- a/searx/translations/sr/LC_MESSAGES/messages.mo +++ b/searx/translations/sr/LC_MESSAGES/messages.mo diff --git a/searx/translations/sv/LC_MESSAGES/messages.mo b/searx/translations/sv/LC_MESSAGES/messages.mo Binary files differindex 1c15999c1..45fde4f33 100644 --- a/searx/translations/sv/LC_MESSAGES/messages.mo +++ b/searx/translations/sv/LC_MESSAGES/messages.mo diff --git a/searx/translations/ta/LC_MESSAGES/messages.mo b/searx/translations/ta/LC_MESSAGES/messages.mo Binary files differindex 8254c20c9..41a0d901f 100644 --- a/searx/translations/ta/LC_MESSAGES/messages.mo +++ b/searx/translations/ta/LC_MESSAGES/messages.mo diff --git a/searx/translations/te/LC_MESSAGES/messages.mo b/searx/translations/te/LC_MESSAGES/messages.mo Binary files differindex cf3013a0b..5c7462ab7 100644 --- a/searx/translations/te/LC_MESSAGES/messages.mo +++ b/searx/translations/te/LC_MESSAGES/messages.mo diff --git a/searx/translations/tr/LC_MESSAGES/messages.mo b/searx/translations/tr/LC_MESSAGES/messages.mo Binary files differindex 2a57083e8..ca72a34d9 100644 --- a/searx/translations/tr/LC_MESSAGES/messages.mo +++ b/searx/translations/tr/LC_MESSAGES/messages.mo diff --git a/searx/translations/uk/LC_MESSAGES/messages.mo b/searx/translations/uk/LC_MESSAGES/messages.mo Binary files differindex 82d0537ce..b0232f341 100644 --- a/searx/translations/uk/LC_MESSAGES/messages.mo +++ b/searx/translations/uk/LC_MESSAGES/messages.mo diff --git a/searx/translations/vi/LC_MESSAGES/messages.mo b/searx/translations/vi/LC_MESSAGES/messages.mo Binary files differindex f9fb99949..630ba2fbb 100644 --- a/searx/translations/vi/LC_MESSAGES/messages.mo +++ b/searx/translations/vi/LC_MESSAGES/messages.mo diff --git a/searx/translations/zh_CN/LC_MESSAGES/messages.mo b/searx/translations/zh_CN/LC_MESSAGES/messages.mo Binary files differindex 5358b7ec0..5e50fde33 100644 --- a/searx/translations/zh_CN/LC_MESSAGES/messages.mo +++ b/searx/translations/zh_CN/LC_MESSAGES/messages.mo diff --git a/searx/translations/zh_TW/LC_MESSAGES/messages.mo b/searx/translations/zh_TW/LC_MESSAGES/messages.mo Binary files differindex bf94770b3..741ca9cd9 100644 --- a/searx/translations/zh_TW/LC_MESSAGES/messages.mo +++ b/searx/translations/zh_TW/LC_MESSAGES/messages.mo diff --git a/searx/webapp.py b/searx/webapp.py index dfa7df620..a1abea887 100755 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -82,7 +82,7 @@ from searx.utils import ( dict_subset, match_language, ) -from searx.version import VERSION_STRING, GIT_URL +from searx.version import VERSION_STRING, GIT_URL, GIT_BRANCH from searx.query import RawTextQuery from searx.plugins import plugins from searx.plugins.oa_doi_rewrite import get_doi_resolver @@ -1303,6 +1303,7 @@ def config(): 'brand': { 'CONTACT_URL': get_setting('general.contact_url'), 'GIT_URL': GIT_URL, + 'GIT_BRANCH': GIT_BRANCH, 'DOCS_URL': get_setting('brand.docs_url'), }, 'doi_resolvers': list(settings['doi_resolvers'].keys()), |