I18N Code Work done.

This commit is contained in:
Christopher T. Johnson
2024-02-14 10:02:27 -05:00
parent 633d5e48b1
commit 793d758377
24 changed files with 8712 additions and 206 deletions

View File

@@ -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