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 os
import argparse import argparse
from asyncio import StreamReader, StreamWriter from asyncio import StreamReader, StreamWriter
from quart import Quart, Response, request from quart import Quart, Response
from quart_babel import Babel from quart_babel import Babel
from quart_babel.locale import get_locale from quart_babel.locale import get_locale
from logging import config # noqa F401 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_toml import ConfigReadToml
from cnf.config_read_json import ConfigReadJson from cnf.config_read_json import ConfigReadJson
from web.routes import web_routes from web.routes import web_routes
from web.i18n import i18n_routes, my_get_locale, LANGUAGES
from modbus_tcp import ModbusTcp from modbus_tcp import ModbusTcp
@@ -33,14 +34,6 @@ class ProxyState:
ProxyState._is_up = value 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(): def my_get_tz():
return 'CET' return 'CET'
@@ -53,11 +46,15 @@ babel = Babel(app,
timezone_selector=my_get_tz, timezone_selector=my_get_tz,
default_translation_directories='../translations') default_translation_directories='../translations')
app.register_blueprint(web_routes) app.register_blueprint(web_routes)
app.register_blueprint(i18n_routes)
app.secret_key = 'super secret key'
@app.context_processor @app.context_processor
def utility_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') @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"> <body class="w3-light-grey">
<!-- Top container --> <!-- Top container -->
<div class="w3-bar w3-top w3-dark-grey w3-large" style="z-index:4"> <div class="w3-bar 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> <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 %} {% 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> <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>
{% else %}
<span class="w3-bar-item w3-right">Logo</span>
{% endif %} {% endif %}
<div class="w3-clear"></div>
</div> </div>
<!-- Sidebar/menu --> <!-- Sidebar/menu -->

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: tsun-gen3-proxy 0.14.0\n" "Project-Id-Version: tsun-gen3-proxy 0.14.0\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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" "PO-Revision-Date: 2025-04-18 16:24+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n" "Language: de\n"
@@ -19,11 +19,23 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\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:" msgid "Updated:"
msgstr "Aktualisiert:" msgstr "Aktualisiert:"
#: src/web/templates/base.html.j2:46 #: src/web/templates/base.html.j2:58
msgid "Connections" msgid "Connections"
msgstr "Verbindungen" msgstr "Verbindungen"