diff options
author | Markus Heiser <markus.heiser@darmarit.de> | 2022-02-03 16:25:35 +0100 |
---|---|---|
committer | Markus Heiser <markus.heiser@darmarit.de> | 2022-03-16 09:55:53 +0100 |
commit | b9cf3c82a18a4782a3aa543c91392c6483f5d2a4 (patch) | |
tree | c072b9a295e6538b500bd93eed2109247824573a /searx/babel_extract.py | |
parent | cd92a7eacdd6b4c333e57111e1503b8455628067 (diff) | |
download | searxng-b9cf3c82a18a4782a3aa543c91392c6483f5d2a4.tar.gz searxng-b9cf3c82a18a4782a3aa543c91392c6483f5d2a4.zip |
[mod] add i18n infrastructure for SearXNG message files (searxng.msg)
With this patch ``searxng.msg`` files can be added to SearXNG. In
``searxng.msg`` files messages can be defined which are not captured by babel's
gettext, like the generic names of the categories or messages that are stored in
constants.
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Diffstat (limited to 'searx/babel_extract.py')
-rw-r--r-- | searx/babel_extract.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/searx/babel_extract.py b/searx/babel_extract.py new file mode 100644 index 000000000..5f575f6d4 --- /dev/null +++ b/searx/babel_extract.py @@ -0,0 +1,51 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +"""This module implements the :origin:`searxng_msg <babel.cfg>` extractor to +extract messages from: + +- None + +The ``searxng.msg`` files are selected by Babel_, see Babel's configuration in +:origin:`babel.cfg`:: + + searxng_msg = searx.babel_extract.extract + ... + [searxng_msg: **/searxng.msg] + +A ``searxng.msg`` file is a python file that is *executed* by the +:py:obj:`extract` function. Additional ``searxng.msg`` files can be added by: + +1. Adding a ``searxng.msg`` file in one of the SearXNG python packages and +2. implement a method in :py:obj:`extract` that yields messages from this file. + +.. _Babel: https://babel.pocoo.org/en/latest/index.html + +""" + +from os import path + +SEARXNG_MSG_FILE = "searxng.msg" +_MSG_FILES = [] + + +def extract( + # pylint: disable=unused-argument + fileobj, + keywords, + comment_tags, + options, +): + """Extract messages from ``searxng.msg`` files by a custom extractor_. + + .. _extractor: + https://babel.pocoo.org/en/latest/messages.html#writing-extraction-methods + """ + if fileobj.name not in _MSG_FILES: + raise RuntimeError("don't know how to extract messages from %s" % fileobj.name) + + namespace = {} + exec(fileobj.read(), {}, namespace) # pylint: disable=exec-used + + for name in namespace['__all__']: + for k, v in namespace[name].items(): + yield 0, '_', v, ["%s['%s']" % (name, k)] |