add button for languages setting

This commit is contained in:
Stefan Allius
2025-04-27 01:26:34 +02:00
parent 093ec03d60
commit 5e0aea3364
4 changed files with 67 additions and 18 deletions

View File

@@ -4,7 +4,7 @@ import logging.handlers
import os
import argparse
from asyncio import StreamReader, StreamWriter
from quart import Quart, Response, request
from quart import Quart, Response
from quart_babel import Babel
from quart_babel.locale import get_locale
from logging import config # noqa F401
@@ -18,6 +18,7 @@ from cnf.config_read_env import ConfigReadEnv
from cnf.config_read_toml import ConfigReadToml
from cnf.config_read_json import ConfigReadJson
from web.routes import web_routes
from web.i18n import i18n_routes, my_get_locale, LANGUAGES
from modbus_tcp import ModbusTcp
@@ -33,14 +34,6 @@ class ProxyState:
ProxyState._is_up = value
def my_get_locale():
# check how to get the locale form for the add-on - hass.selectedLanguage
# logging.info("get_locale(%s)", request.accept_languages)
return request.accept_languages.best_match(
['de', 'en']
)
def my_get_tz():
return 'CET'
@@ -53,11 +46,15 @@ babel = Babel(app,
timezone_selector=my_get_tz,
default_translation_directories='../translations')
app.register_blueprint(web_routes)
app.register_blueprint(i18n_routes)
app.secret_key = 'super secret key'
@app.context_processor
def utility_processor():
return dict(lang=get_locale())
return dict(lang=get_locale(),
lang_str=LANGUAGES.get(str(get_locale()), "English"),
languages=LANGUAGES)
@app.route('/-/ready')

32
app/src/web/i18n.py Normal file
View File

@@ -0,0 +1,32 @@
from quart import Blueprint
from quart import request, session, redirect
from quart_babel import _
LANGUAGES = {
'en': _('English'),
'de': _('German'),
'fr': _('French')
}
i18n_routes = Blueprint('i18n_routes', __name__)
def my_get_locale():
try:
language = session['language']
except KeyError:
language = None
if language is not None:
return language
# check how to get the locale form for the add-on - hass.selectedLanguage
# logging.info("get_locale(%s)", request.accept_languages)
return request.accept_languages.best_match(LANGUAGES.keys())
@i18n_routes.route('/language/<language>')
def set_language(language=None):
if language in LANGUAGES:
session['language'] = language
return redirect(request.referrer)

View File

@@ -22,13 +22,21 @@
<body class="w3-light-grey">
<!-- Top container -->
<div class="w3-bar w3-top w3-dark-grey w3-large" style="z-index:4">
<button class="w3-bar-item w3-button w3-hide-large w3-hover-none w3-hover-text-light-grey" onclick="w3_open();"><i class="fa fa-bars"></i>  Menu</button>
<div class="w3-bar w3-dark-grey w3-large" style="z-index:4">
<button class="w3-bar-item w3-button w3-hide-large" onclick="w3_open();"><i class="fa fa-bars"></i>  Menu</button>
<div class="w3-dropdown-hover w3-right">
<button class="w3-button">{{_(lang_str)}}</button>
<div class="w3-dropdown-content w3-bar-block w3-card-4" style="right:0">
{% for language in languages %}
<a href="./language/{{language}}" class="w3-bar-item w3-button">{{_(languages[language])}}</a>
{% endfor %}
</div>
</div>
{% if fetch_url is defined %}
<button class="w3-bar-item w3-button w3-hover-none w3-hover-text-light-grey w3-right" onclick="fetch_data();"><span class="w3-hide-small">{{_('Updated:')}}  </span><span id="update-time"></span>  <i class="fa fa-rotate-right w3-medium"></i></button>
{% else %}
<span class="w3-bar-item w3-right">Logo</span>
<button class="w3-bar-item w3-button w3-right" onclick="fetch_data();"><span class="w3-hide-small">{{_('Updated:')}}  </span><span id="update-time"></span>  <i class="w3-hover fa fa-rotate-right w3-medium"></i></button>
{% endif %}
<div class="w3-clear"></div>
</div>
<!-- Sidebar/menu -->

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tsun-gen3-proxy 0.14.0\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2025-04-20 21:21+0200\n"
"POT-Creation-Date: 2025-04-27 01:25+0200\n"
"PO-Revision-Date: 2025-04-18 16:24+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n"
@@ -19,11 +19,23 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: src/web/templates/base.html.j2:27
#: src/web/i18n.py:7
msgid "English"
msgstr "Englisch"
#: src/web/i18n.py:8
msgid "German"
msgstr "Deutsch"
#: src/web/i18n.py:9
msgid "French"
msgstr "Französisch"
#: src/web/templates/base.html.j2:37
msgid "Updated:"
msgstr "Aktualisiert:"
#: src/web/templates/base.html.j2:46
#: src/web/templates/base.html.j2:58
msgid "Connections"
msgstr "Verbindungen"