french l10n for app

This commit is contained in:
ABelliqueux 2022-11-03 14:42:17 +01:00
parent 77c72951c7
commit a3ca5174f3
7 changed files with 166 additions and 15 deletions

29
app.py
View File

@ -10,14 +10,18 @@ from werkzeug.utils import secure_filename
app = Flask(__name__) app = Flask(__name__)
# l10n
import gettext
LOCALE = os.getenv('LANG', 'en')
_ = gettext.translation('template', localedir='locales', languages=[LOCALE]).gettext
app.config.from_file("defaults.toml", load=toml.load) app.config.from_file("defaults.toml", load=toml.load)
config_locations = ["./", "~/.", "~/.config/"] config_locations = ["./", "~/.", "~/.config/"]
for location in config_locations: for location in config_locations:
# Optional config files, ~ is expanded to $HOME on *nix, %USERPROFILE% on windows # Optional config files, ~ is expanded to $HOME on *nix, %USERPROFILE% on windows
# ~ app.config.from_file("videopi.toml", load=toml.load, silent=True) # ~ app.config.from_file("videopi.toml", load=toml.load, silent=True)
if app.config.from_file(os.path.expanduser( location + "pilpil-client.toml"), load=toml.load, silent=True): if app.config.from_file(os.path.expanduser( location + "pilpil-client.toml"), load=toml.load, silent=True):
print("Found configuration file in " + os.path.expanduser( location )) print( _("Found configuration file in {}").format( os.path.expanduser(location) ) )
#UPLOAD_FOLDER = os.path.expanduser('~/Videos') #UPLOAD_FOLDER = os.path.expanduser('~/Videos')
#ALLOWED_EXTENSIONS = {'avi', 'mkv', 'mp4'} #ALLOWED_EXTENSIONS = {'avi', 'mkv', 'mp4'}
@ -76,9 +80,6 @@ def led( led_id, state ):
# Blink the Pi led to allow identification # Blink the Pi led to allow identification
def blinkPy(): def blinkPy():
# disable mmc access led
# ~ os.system('echo none | sudo tee /sys/class/leds/led0/trigger')
# ~ os.system('echo none | sudo tee /sys/class/leds/led1/trigger')
# Blink 10 times # Blink 10 times
for j in range(16): for j in range(16):
led(0, 1) led(0, 1)
@ -88,8 +89,6 @@ def blinkPy():
led(1, 1) led(1, 1)
time.sleep(.2) time.sleep(.2)
# restore default behavior # restore default behavior
# ~ os.system('echo mmc0 | sudo tee /sys/class/leds/led0/trigger')
# ~ os.system('echo default-on | sudo tee /sys/class/leds/led1/trigger')
led(0, 0) led(0, 0)
led(1, 0) led(1, 0)
return "OK" return "OK"
@ -101,7 +100,7 @@ def threadBlink():
@app.route("/") @app.route("/")
@auth.login_required @auth.login_required
def main(): def main():
return "Nothing to see here !" return _("Nothing to see here !")
@app.route("/rssi") @app.route("/rssi")
@auth.login_required @auth.login_required
@ -112,21 +111,21 @@ def rssi():
@auth.login_required @auth.login_required
def blink(): def blink():
threadBlink() threadBlink()
return "Blinkin" return _("Blinkin")
@app.route("/reboot") @app.route("/reboot")
@auth.login_required @auth.login_required
def reboot(): def reboot():
stdout = subprocess.run(["sudo", "/usr/sbin/reboot"], capture_output=True) stdout = subprocess.run(["sudo", "/usr/sbin/reboot"], capture_output=True)
print(stdout) print(stdout)
return "Rebooting..." return _("Rebooting...")
@app.route("/poweroff") @app.route("/poweroff")
@auth.login_required @auth.login_required
def shutdown(): def shutdown():
stdout = subprocess.run(["sudo", "/usr/sbin/poweroff"], capture_output=True) stdout = subprocess.run(["sudo", "/usr/sbin/poweroff"], capture_output=True)
print(stdout) print(stdout)
return "Shutting down..." return _("Shutting down...")
# File upload # File upload
@ -136,20 +135,20 @@ def upload_file():
if request.method == 'POST': if request.method == 'POST':
# check if the post request has the file part # check if the post request has the file part
if 'file' not in request.files: if 'file' not in request.files:
return "No file part: " + str(request.files) return _("No file part: {}").format(str(request.files))
file = request.files['file'] file = request.files['file']
# If the user does not select a file, the browser submits an # If the user does not select a file, the browser submits an
# empty file without a filename. # empty file without a filename.
if file.filename == '': if file.filename == '':
return 'No selected file' return _("No selected file")
if file and allowed_file(file.filename): if file and allowed_file(file.filename):
filename = secure_filename(file.filename) filename = secure_filename(file.filename)
file.save(os.path.join(UPLOAD_FOLDER, filename)) file.save(os.path.join(UPLOAD_FOLDER, filename))
return "File saved in " + UPLOAD_FOLDER return _("File saved in {}").format(UPLOAD_FOLDER)
return "OK" return "OK"
if __name__ == '__main__': if __name__ == '__main__':
# Turn ACT and POW leds off on start # Turn ACT and POW leds off on start
ledSetup() # ~ ledSetup()
# app.run() # app.run()
serve(app, host='127.0.0.1', port=5000, url_scheme='https') serve(app, host='127.0.0.1', port=5000, url_scheme='https')

Binary file not shown.

View File

@ -0,0 +1,49 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2022-11-03 12:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: ../app.py:25
msgid "Found configuration file in {}"
msgstr ""
#: ../app.py:104
msgid "Nothing to see here !"
msgstr ""
#: ../app.py:115
msgid "Blinkin"
msgstr ""
#: ../app.py:122
msgid "Rebooting..."
msgstr ""
#: ../app.py:129
msgid "Shutting down..."
msgstr ""
#: ../app.py:139
msgid "No file part: {}"
msgstr ""
#: ../app.py:144
msgid "No selected file"
msgstr ""
#: ../app.py:148
msgid "File saved in {}"
msgstr ""

Binary file not shown.

View File

@ -0,0 +1,49 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2022-11-03 12:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: French <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: ../app.py:25
msgid "Found configuration file in {}"
msgstr "Fichier de configuration trouvé dans {}"
#: ../app.py:104
msgid "Nothing to see here !"
msgstr "Rien à voir ici!"
#: ../app.py:115
msgid "Blinkin"
msgstr "Cligne"
#: ../app.py:122
msgid "Rebooting..."
msgstr "Redémarrage..."
#: ../app.py:129
msgid "Shutting down..."
msgstr "Extinction"
#: ../app.py:139
msgid "No file part: {}"
msgstr "Pas de données de fichier : {}"
#: ../app.py:144
msgid "No selected file"
msgstr "Aucun fichier sélectionné."
#: ../app.py:148
msgid "File saved in {}"
msgstr "Fichier enregistré dans {}"

5
locales/gen_mo.sh Executable file
View File

@ -0,0 +1,5 @@
#!/usr/bin/env bash
# pygettext ../../../app.py -o template.pot
for locale in */LC_MESSAGES/template.pot; do
/usr/bin/msgfmt -o ${locale%.*}.mo $locale
done

49
locales/template.pot Normal file
View File

@ -0,0 +1,49 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2022-11-03 12:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: ../app.py:25
msgid "Found configuration file in {}"
msgstr ""
#: ../app.py:104
msgid "Nothing to see here !"
msgstr ""
#: ../app.py:115
msgid "Blinkin"
msgstr ""
#: ../app.py:122
msgid "Rebooting..."
msgstr ""
#: ../app.py:129
msgid "Shutting down..."
msgstr ""
#: ../app.py:139
msgid "No file part: {}"
msgstr ""
#: ../app.py:144
msgid "No selected file"
msgstr ""
#: ../app.py:148
msgid "File saved in {}"
msgstr ""