add button for languages setting
This commit is contained in:
@@ -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
32
app/src/web/i18n.py
Normal 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)
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user