I18N Code Work done.
This commit is contained in:
@@ -1,19 +1,28 @@
|
||||
import json
|
||||
import os
|
||||
from typing import Any, Dict, List, Optional, Type, cast
|
||||
import re
|
||||
from typing import Any, Dict, List, Optional, Self, Type, cast
|
||||
|
||||
from PyQt6.QtCore import Qt, pyqtSlot
|
||||
from PyQt6.QtCore import (
|
||||
QCoreApplication,
|
||||
QLocale,
|
||||
QResource,
|
||||
Qt,
|
||||
QTranslator,
|
||||
pyqtSlot,
|
||||
)
|
||||
from PyQt6.QtMultimedia import QMediaDevices
|
||||
from PyQt6.QtWidgets import QAbstractItemView, QDialog, QListWidgetItem, QWidget
|
||||
|
||||
from ui.Preferences import Ui_Dialog
|
||||
from ui.Preferences import Ui_Preferences
|
||||
|
||||
|
||||
class Preferences(QDialog, Ui_Dialog):
|
||||
class Preferences(QDialog, Ui_Preferences):
|
||||
translator: Optional[QTranslator]
|
||||
_instance = None
|
||||
preferences: Dict[str, str | List[str]]
|
||||
|
||||
def __new__(cls: Type[Preferences]) -> Preferences:
|
||||
def __new__(cls: Type[Self]) -> Self:
|
||||
if cls._instance:
|
||||
return cls._instance
|
||||
cls._instance = super(Preferences, cls).__new__(cls)
|
||||
@@ -59,6 +68,15 @@ class Preferences(QDialog, Ui_Dialog):
|
||||
description = output.description()
|
||||
self.alertList.addItem(description)
|
||||
self.playerList.addItem(description)
|
||||
resource = QResource("/translate")
|
||||
translator = QTranslator()
|
||||
for child in resource.children():
|
||||
fn = f":/translate/{child}"
|
||||
if translator.load(fn):
|
||||
locale = QLocale(translator.language())
|
||||
lang_code = locale.language()
|
||||
language = QLocale.languageToString(lang_code)
|
||||
self.languageCombo.addItem(language, translator.language())
|
||||
self.setCurrent()
|
||||
return
|
||||
|
||||
@@ -72,6 +90,7 @@ class Preferences(QDialog, Ui_Dialog):
|
||||
"phoneticFont": "Gentium",
|
||||
"alertOutputs": ["default"],
|
||||
"playerOutputs": ["Feed for virtual microphone"],
|
||||
"language": "pt",
|
||||
}
|
||||
for output in self.preferences["alertOutputs"]:
|
||||
if output == "default":
|
||||
@@ -87,6 +106,17 @@ class Preferences(QDialog, Ui_Dialog):
|
||||
output, Qt.MatchFlag.MatchExactly
|
||||
):
|
||||
item.setSelected(True)
|
||||
index = self.languageCombo.findData(self.preferences["language"])
|
||||
if index >= 0:
|
||||
self.languageCombo.setCurrentIndex(index)
|
||||
self.translator = QTranslator()
|
||||
if self.translator.load(
|
||||
f":/translate/esl_reader_{self.preferences['language']}"
|
||||
):
|
||||
assert self.translator is not None
|
||||
QCoreApplication.installTranslator(self.translator)
|
||||
else:
|
||||
self.translator = None
|
||||
index = self.readerCombo.findText(self.preferences["readerFont"])
|
||||
if index >= 0:
|
||||
self.readerCombo.setCurrentIndex(index)
|
||||
@@ -107,6 +137,7 @@ class Preferences(QDialog, Ui_Dialog):
|
||||
self.preferences[
|
||||
"phoneticFont"
|
||||
] = self.phoneticsCombo.currentFont().family()
|
||||
self.preferences["language"] = self.languageCombo.currentData()
|
||||
self.preferences["alertOutputs"] = [
|
||||
x.data(Qt.ItemDataRole.DisplayRole)
|
||||
for x in self.alertList.selectedItems()
|
||||
@@ -117,5 +148,22 @@ class Preferences(QDialog, Ui_Dialog):
|
||||
]
|
||||
with open("preferences.json", "w") as f:
|
||||
json.dump(self.preferences, f, indent=2)
|
||||
if self.translator:
|
||||
if self.translator.language() != self.preferences["language"]:
|
||||
full_code: str = cast(str, self.preferences["language"])
|
||||
locale = QLocale(full_code)
|
||||
language = locale.language()
|
||||
code = QLocale.languageToCode(
|
||||
language, QLocale.LanguageCodeType.ISO639Part1
|
||||
)
|
||||
print(language, code)
|
||||
fn = f":/translate/esl_reader_{code}.qm"
|
||||
translator = QTranslator()
|
||||
if translator.load(fn):
|
||||
QCoreApplication.removeTranslator(self.translator)
|
||||
self.translator = translator
|
||||
QCoreApplication.installTranslator(self.translator)
|
||||
else:
|
||||
print(self.tr("Unable to load translation file ") + f"{fn}")
|
||||
super().accept()
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user