|
1 | | -import gettext as gettext_module |
2 | | -import re |
3 | | -from functools import lru_cache |
4 | 1 | from pathlib import Path |
5 | 2 |
|
6 | | -import streamlit as st |
7 | | -from loguru import logger |
| 3 | +from streamlit_gettext import GettextWrapper |
8 | 4 |
|
| 5 | +current_path = Path(__file__).parent |
| 6 | +_gettext_wrapper = GettextWrapper(locale_path=current_path / "locale") |
9 | 7 |
|
10 | | -def get_preferred_languages() -> list[str]: |
11 | | - accept_language = st.context.headers.get("Accept-Language") or "" |
12 | | - return re.findall(r"([a-zA-Z-]{2,})", accept_language) or [] |
13 | | - |
14 | | - |
15 | | -@lru_cache(maxsize=128, typed=False) |
16 | | -def _get_lang(languages: tuple[str]) -> gettext_module.NullTranslations: |
17 | | - logger.info(f"Languages: {languages}") |
18 | | - locale_dir = Path(__file__).parent / "locale" |
19 | | - |
20 | | - return gettext_module.translation( |
21 | | - "messages", |
22 | | - localedir=locale_dir, |
23 | | - languages=languages, |
24 | | - fallback=True, |
25 | | - ) |
26 | | - |
27 | | - |
28 | | - |
29 | | -class LanguageWrapper: |
30 | | - @staticmethod |
31 | | - def _get_lang() -> gettext_module.NullTranslations: |
32 | | - return _get_lang(tuple(get_preferred_languages())) |
33 | | - |
34 | | - def gettext(self, message: str) -> str: |
35 | | - lang = self._get_lang() |
36 | | - return lang.gettext(message) |
37 | | - |
38 | | - def ngettext(self, singular: str, plural: str, n: int) -> str: |
39 | | - lang = self._get_lang() |
40 | | - return lang.ngettext(singular, plural, n) |
41 | | - |
42 | | - |
43 | | -lang = LanguageWrapper() |
44 | | -gettext = lang.gettext |
45 | | -ngettext = lang.ngettext |
| 8 | +gettext = _gettext_wrapper.gettext |
| 9 | +ngettext = _gettext_wrapper.ngettext |
0 commit comments