Skip to content

Instantly share code, notes, and snippets.

@itarozzi
Created May 26, 2021 10:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itarozzi/94bb2f8932b092c6c2ad2ea907802e8d to your computer and use it in GitHub Desktop.
Save itarozzi/94bb2f8932b092c6c2ad2ea907802e8d to your computer and use it in GitHub Desktop.
pyside2 translation
#!/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)
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)
}
}
}
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