summaryrefslogtreecommitdiffstats
path: root/aurweb/l10n.py
blob: a476ecd87c901cd286d6340969b8b43b465ef95b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import gettext

import aurweb.config


class Translator:
    def __init__(self):
        self._localedir = aurweb.config.get('options', 'localedir')
        self._translator = {}

    def translate(self, s, lang):
        if lang == 'en':
            return s
        if lang not in self._translator:
            self._translator[lang] = gettext.translation("aurweb",
                                                         self._localedir,
                                                         languages=[lang])
        return self._translator[lang].gettext(s)


def get_translator_for_request(request):
    """
    Determine the preferred language from a FastAPI request object and build a
    translator function for it.

    Example:
    ```python
    _ = get_translator_for_request(request)
    print(_("Hello"))
    ```
    """
    lang = request.cookies.get("AURLANG")
    if lang is None:
        lang = aurweb.config.get("options", "default_lang")
    translator = Translator()

    def translate(message):
        return translator.translate(message, lang)

    return translate