add button for languages setting
This commit is contained in:
@@ -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
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">
|
<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 -->
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user