Created
May 26, 2021 10:08
-
-
Save itarozzi/94bb2f8932b092c6c2ad2ea907802e8d to your computer and use it in GitHub Desktop.
pyside2 translation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
# This Python file uses the following encoding: utf-8 | |
import sys | |
import os | |
from PySide2.QtCore import QLocale | |
from PySide2.QtGui import QGuiApplication | |
from PySide2.QtQml import QQmlApplicationEngine | |
from app_config import ConfigSerial | |
from app_config import ConfigGui | |
from app_config import ConfigMachine | |
from loguru import logger | |
from translationhelper import TranslationHelper | |
def main(argv): | |
app = QGuiApplication(sys.argv) | |
engine = QQmlApplicationEngine() | |
translation_helper = TranslationHelper(engine, "movit_flr_") | |
engine.rootContext().setContextProperty("FullscreenMode",ConfigGui.fullscreen_mode); | |
engine.rootContext().setContextProperty("TranslationHelper", translation_helper) | |
engine.load(os.path.join(os.path.dirname(__file__), "qml", "main.qml")) | |
if not engine.rootObjects(): | |
sys.exit(-1) | |
logger.info("========= Application exit =========") | |
sys.exit(app.exec_()) | |
if __name__ == "__main__": | |
fmt = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {message}" | |
logger.add('logs/log_movit_flr_debug.log', format = fmt, level='DEBUG', rotation="10 MB") | |
logger.info("========= Application start =========") | |
with logger.catch(): | |
main(sys.argv) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ApplicationWindow { | |
id: mainWindow | |
width: 1024 | |
height: 600 | |
visibility: FullscreenMode?"FullScreen":"Normal" | |
visible: true | |
title: qsTr("MovitFLR") | |
..... | |
// I need a better way to manage locale reference from QML. | |
// For now I use integer value as described here: | |
// https://doc.qt.io/qt-5/qlocale.html#Country-enum | |
Button{ | |
text: "EN" | |
x:100 | |
y:20 | |
z:100 | |
onClicked: { | |
TranslationHelper.change_language(31) | |
} | |
} | |
Button{ | |
text: "IT" | |
y:20 | |
z:100 | |
onClicked: { | |
TranslationHelper.change_language(58) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PySide2.QtCore import QLocale, QTranslator, Slot, QCoreApplication, QObject, Signal | |
import os | |
from loguru import logger | |
class TranslationHelper(QObject): | |
def __init__(self, engine, basename) -> None: | |
super().__init__() | |
self.__translator = QTranslator() | |
self.__engine = engine | |
self.__language = QLocale.C | |
trdir = os.path.join(os.path.dirname(__file__), 'translations') | |
self.__basename = os.path.join(trdir, basename) | |
self.change_language(self.__language); | |
def __del__(self): | |
pass | |
# @Signal | |
# def languageChanged(self) : | |
# pass | |
@Slot() | |
def get_language(self): | |
return self.__language | |
@Slot(int) | |
def change_language(self, language): | |
ret = False | |
locale = QLocale(QLocale.Language(language)) | |
logger.info("Change language to {}", locale) | |
if (language != self.__language): | |
QCoreApplication.removeTranslator(self.__translator) | |
if self.__translator.load(locale, self.__basename, ): | |
QCoreApplication.installTranslator(self.__translator) | |
# self.languageChanged | |
self.__language = language | |
logger.info("OK! Changed language to {}", language) | |
ret = True | |
else : | |
logger.warning("Unable to load translation file for {}", language) | |
self.__engine.retranslate() | |
else: | |
logger.warning("Skip change language to {}", language) | |
ret = True | |
return ret | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment